Preskoči na glavno vsebino

Stroji s Traits: Kako bo Almadar transformiral robotiko

· 4 min branja
Ekipa Almadar
Ekipa Almadar

Vizija za prihodnost avtomatizacije


Uvod

Predstavljajte si svet, kjer ne potrebujete pisati tisočev vrstic kode, da robot inteligentno premaknete. Svet, kjer deklarirate vedênje stroja na enak način, kot opisujete planete, ki se gibljejo v svojih orbitah.

To je svet Almadar.

V tej seriji bomo raziskovali, kako jezik Almadar lahko revolucionira robotiko in industrijsko avtomatizacijo.


Problem: Zakaj je programiranje robotov težko?

Tradicionalni pristop

Ko inženirji danes programirajo robota, se soočijo z ogromnimi izzivi:

# Tradicionalni pristop - zapletena, kompleksna koda
class RobotArm:
def __init__(self):
self.position = (0, 0, 0)
self.is_holding = False
self.speed = 0
self.error_state = None

def move_to(self, target):
if self.error_state:
self.handle_error() # Kje je to definirano?
return
if self.is_holding and self.weight > MAX_WEIGHT:
self.emergency_stop() # Kaj se zgodi potem?
return
# ... še stotine vrstic

Problemi:

  1. Naraščajoča kompleksnost — Vsak nov pogoj podvoji kompleksnost
  2. Skrite napake — Kaj se zgodi, če pozabimo določeno stanje?
  3. Težavno testiranje — Kako zagotovimo, da so vse poti pokrite?
  4. Ločena dokumentacija — Koda pravi eno, dokumentacija drugo

Rešitev: Traits kot način razmišljanja

Fizika programske opreme

V fiziki opisujemo gibanje objektov z preprostimi zakoni:

  • Objekt je bodisi v mirovanju bodisi v gibanju
  • Prehod med njima zahteva silo (dogodek)
  • Zakoni nadzorujejo, kdaj se prehodi lahko zgodijo

Almadar uporablja enako logiko za programsko opremo:

FizikaAlmadar
Stanje (mirovanje/gibanje)State machine stanja
SilaDogodki
ZakoniGuardi
ReakcijaEffects

Primer: Robotska roka v Almadarju

{
"name": "RoboticArm",
"entity": {
"name": "Arm",
"persistence": "runtime",
"fields": [
{ "name": "position", "type": "object" },
{ "name": "speed", "type": "number" },
{ "name": "isHolding", "type": "boolean" },
{ "name": "weight", "type": "number" }
]
},
"traits": [{
"name": "MovementTrait",
"stateMachine": {
"states": [
{ "name": "idle", "isInitial": true },
{ "name": "moving" },
{ "name": "holding" },
{ "name": "error" }
],
"events": [
{ "key": "MOVE", "name": "Start movement" },
{ "key": "STOP", "name": "Stop" },
{ "key": "GRAB", "name": "Grab object" },
{ "key": "RELEASE", "name": "Release object" },
{ "key": "EMERGENCY", "name": "Emergency stop" }
],
"transitions": [
{
"from": "idle",
"to": "moving",
"event": "MOVE",
"guard": ["and",
["not", "@entity.isHolding"],
["<", "@payload.speed", 100]
],
"effects": [
["persist", "update", "Arm", { "speed": "@payload.speed" }],
["emit", "MOVEMENT_STARTED", { "target": "@payload.target" }]
]
},
{
"from": "moving",
"to": "idle",
"event": "STOP",
"effects": [
["persist", "update", "Arm", { "speed": 0 }]
]
},
{
"from": "idle",
"to": "holding",
"event": "GRAB",
"guard": ["<", "@payload.weight", 50],
"effects": [
["persist", "update", "Arm", {
"isHolding": true,
"weight": "@payload.weight"
}],
["notify", "info", "Object grabbed"]
]
},
{
"from": "idle",
"to": "error",
"event": "EMERGENCY",
"effects": [
["persist", "update", "Arm", { "speed": 0 }],
["emit", "EMERGENCY_STOP", { "reason": "@payload.reason" }],
["notify", "error", "Emergency stop!"]
]
},
{
"from": "moving",
"to": "error",
"event": "EMERGENCY",
"effects": [
["persist", "update", "Arm", { "speed": 0 }],
["emit", "EMERGENCY_STOP", { "reason": "@payload.reason" }],
["notify", "error", "Emergency stop!"]
]
},
{
"from": "holding",
"to": "error",
"event": "EMERGENCY",
"effects": [
["persist", "update", "Arm", { "speed": 0 }],
["emit", "EMERGENCY_STOP", { "reason": "@payload.reason" }],
["notify", "error", "Emergency stop!"]
]
}
]
}
}]
}

Kaj to pomeni?

  1. Vsa stanja so jasna — idle, moving, holding, error
  2. Vsi prehodi so definirani — Ni presenečenj
  3. Guardi varujejo — Ni mogoče zgrabiti teže večje od 50
  4. Katero koli stanje v emergency — Ekspliciten prehod na stanje zagotavlja, da vsako stanje lahko doseže error

Priložnost

Zakaj je Almadar primeren

PotrebaAlmadar Rešitev
Hitrost razvoja60% hitreje kot tradicionalno
ZanesljivostZagotovljeni state machines
VarnostGuardi preprečujejo napačno vedênje
DokumentacijaShema JE dokumentacija
UsposabljanjeDeklarativna, berljiva sintaksa

Primer: Delivery Robot

{
"name": "DeliveryRobot",
"orbitals": [
{
"name": "Navigation",
"traits": [{ "ref": "GPSTrait" }, { "ref": "ObstacleAvoidanceTrait" }]
},
{
"name": "Delivery",
"traits": [{ "ref": "PackageReceiveTrait" }, { "ref": "PackageDeliverTrait" }]
},
{
"name": "Communication",
"traits": [{ "ref": "CustomerNotificationTrait" }],
"listens": [
{ "event": "DELIVERY_COMPLETE", "triggers": "SEND_CONFIRMATION" }
]
}
]
}

Trije Orbitali, ki samodejno komunicirajo:

  1. Navigation — Nadzoruje gibanje
  2. Delivery — Upravlja pakete
  3. Communication — Obvesti stranko

Ko Delivery emitira DELIVERY_COMPLETE, Communication posluša in pošlje potrditev stranki samodejno.


Naslednji koraki

Za razvijalce

  1. Prenesite compilernpm install -g @almadar/cli
  2. Preberite dokumentacijoGetting Started Guide
  3. Poskusite primer — Zgradite svoj prvi robotski trait

Za podjetja

  1. Kontaktirajte nashello@almadar.io
  2. Rezervirajte demo — Pokazali vam bomo Almadar na vašem projektu
  3. Začnite majhno — Pilot projekt za dokaz vrednosti

Za izobraževalne ustanove

Ponujamo:

  • Gostujoča predavanja — Uvod v Almadar
  • Diplomski projekti — Supervizija in vodstvo
  • Raziskovalna partnerstva — Skupen razvoj

Zaključek

"Stroji ne potrebujejo več tisočev vrstic. Potrebujejo jasne, definirane traits."

Almadar ni samo programski jezik. Je nov način razmišljanja o vedênju strojev. Način, ki programiranje približa fiziki, razvoj pa oblikovanju.

Ste pripravljeni?


V naslednjem delu

Part 2: Gradnja industrijskega robotskega krmilnika — Skupaj bomo zgradili robotsko roko z jezikom Almadar, korak za korakom.


Napisala ekipa Almadar
Januar 2025

Nedavne objave