Download presentation
Presentation is loading. Please wait.
1
1 Creating Architectures with Syndicate and TDL Ace Project Robotics Institute, Carnegie Mellon September 12, 2007
2
2 Outline What are the layers of Syndicate? Designing a task tree Writing in TDL to create a task tree Exploring concurrency
3
3 Syndicate There are three layers: Planning Executive Behavioral But what are the layers? What do they do?
4
4 Syndicate Layers: Behavioral Made up of “blocks” Each block is a small thread/function/process Represent hardware capabilities or repeatable behaviors “Stateless”: relies on current data; no knowledge of past or future Communicate with sensors Send commands to robots and get feedback Communicate data to other blocks
5
5 Syndicate Layers: Executive Made up of “tasks” Each task is concerned with achieving a single goal Tasks can be arranged temporally Spawn subtasks Enable and connect blocks in the behavioral layer to achieve the task Enable tell a block to start running Connect tell blocks to send data to other blocks Monitor blocks for failure Provide failure recovery
6
6 Syndicate Layers: Planning Has knowledge of robots’ mission Receives feedback from system Decides what tasks to spawn to achieve mission And on which robots These tasks form a “task tree”
7
7 Syndicate for the Ace Project: Some Examples Behavioral layer Block to talk to fiducial tracker Block to command base and get pos. feedback Block to command arm and get pos. feedback Executive layer Task to pick up plug Task to move robot to task board Task to dock plug No planning layer!
8
8 Where is the planning layer? Planning layer creates task trees online Based on knowledge of the system Example: New task to be done. Planner knows which robots are available/capable to achieve it. Spawn the task on the desired robot. Our tasks are straightforward Number and type of robots is known We hard-code our own task tree One super-task spawns the main tree
9
9 Example: Docking a Plug Let’s start with a simplified version of our scenario We have one robot It needs to pick up a plug and then dock it
10
10 Docking a Plug Our main task is RetrieveAndDock Break it down: Go up to the stanchion where the plug is Pick up the plug Go to the task board Dock the plug
11
11 Docking a Plug: Task Tree
12
12 GoTowardsPlug Want the robot to go towards the stanchion and put itself in position to get the plug Spawn additional subtasks Turn towards the stanchion Drive to the stanchion Turn to face the stanchion
13
13 Updated Task Tree
14
14 PickUpPlug Plug is in a fixed position Assign waypoints relative to that position As robot’s end-effector goes to those waypoints, it picks up plug Run one visual servo task for each waypoint
15
15 Filling in the Task Tree
16
16 Filling in the Task Tree
17
17 Filling in the Task Tree EstimatePoses and MoveArmAndBase run concurrently on our single robot
18
18 Shape of the Task Tree We’ve grouped some tasks into supertasks Sometimes this is for repeatability and reuse Like grouping many VisualServo tasks into one VisuallyServoToWaypoints task Sometimes this is for aesthetics Like grouping turn/move/turn into one GoTowardsStanchion task
19
19 Shape of the Task Tree This tree is fundamentally the same as the previous one, but is harder to read and understand
20
20 Example: Coding in TDL Assume these tasks exist: MoveRobotForward (x meters) TurnRobot (y degrees) Let’s code the new task ApproachTarget We’ll use this task twice: Approaching the stanchion Approaching the task board
21
21 Code for ApproachTarget Goal ApproachTarget (double firstAngle, double moveDist, double secondAngle) { TurnTowardsTarget : spawn TurnRobot (firstAngle); MoveTowardsTarget: spawn MoveRobot (moveDist) WITH SERIAL TurnTowardsTarget; TurnToFaceTarget: spawn TurnRobot (secondAngle) WITH SERIAL MoveTowardsTarget; }
22
22 Code for ApproachTarget Goal ApproachTarget (double firstAngle, double moveDist, double secondAngle) { TurnTowardsTarget : spawn TurnRobot (firstAngle); MoveTowardsTarget: spawn MoveRobot (moveDist) WITH SERIAL TurnTowardsTarget; TurnToFaceTarget: spawn TurnRobot (secondAngle) WITH SERIAL MoveTowardsTarget; } Just a keyword that says this is not supposed to be a “leaf” in the task tree
23
23 Code for ApproachTarget Goal ApproachTarget (double firstAngle, double moveDist, double secondAngle) { TurnTowardsTarget : spawn TurnRobot (firstAngle); MoveTowardsTarget: spawn MoveRobot (moveDist) WITH SERIAL TurnTowardsTarget; TurnToFaceTarget: spawn TurnRobot (secondAngle) WITH SERIAL MoveTowardsTarget; } Parameters to the task
24
24 Code for ApproachTarget Goal ApproachTarget (double firstAngle, double moveDist, double secondAngle) { TurnTowardsTarget : spawn TurnRobot (firstAngle); MoveTowardsTarget: spawn MoveRobot (moveDist) WITH SERIAL TurnTowardsTarget; TurnToFaceTarget: spawn TurnRobot (secondAngle) WITH SERIAL MoveTowardsTarget; } Notice how we call TurnRobot with different parameters in different task instances
25
25 Code for ApproachTarget Goal ApproachTarget (double firstAngle, double moveDist, double secondAngle) { TurnTowardsTarget : spawn TurnRobot (firstAngle); MoveTowardsTarget: spawn MoveRobot (moveDist) WITH SERIAL TurnTowardsTarget; TurnToFaceTarget: spawn TurnRobot (secondAngle) WITH SERIAL MoveTowardsTarget; } In the tree, this is the task name, but this is the actual function being executed
26
26 Code for ApproachTarget Goal ApproachTarget (double firstAngle, double moveDist, double secondAngle) { TurnTowardsTarget : spawn TurnRobot (firstAngle); MoveTowardsTarget: spawn MoveRobot (moveDist) WITH SERIAL TurnTowardsTarget; TurnToFaceTarget: spawn TurnRobot (secondAngle) WITH SERIAL MoveTowardsTarget; } Tells the system to execute this task after TurnTowardsTarget completes
27
27 Code for ApproachTarget Goal ApproachTarget (double firstAngle, double moveDist, double secondAngle) { TurnTowardsTarget : spawn TurnRobot (firstAngle); MoveTowardsTarget: spawn MoveRobot (moveDist) WITH SERIAL TurnTowardsTarget; TurnToFaceTarget: spawn TurnRobot (secondAngle) WITH SERIAL MoveTowardsTarget; } Any questions?
28
28 Coding in TDL Now let’s use ApproachTarget This code: ApproachTaskBoard: spawn ApproachTarget (30, 2, -30) WITH SERIAL PickUpPlug; Creates this task tree:
29
29 Serial or Concurrent? We have one robot, so a lot of our tasks are serial with each other Like turn/move/turn However, the robot has multiple sensors and controllable pieces We could have some tasks run concurrently Read positions from VisTracker while moving arm towards the task board Move the arm to a safe configuration while moving the base away from the stanchion
30
30 More Complicated Task Trees: Example with Concurrence Multiple robots lends itself to more concurrency Temporal constraints make an acyclic graph
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.