Add minimal pick-and-place case with world embedded

This commit is contained in:
Igor Brylyov 2023-03-31 20:24:56 +00:00
parent 209e99a4b3
commit a87fb8a7ec
64 changed files with 2419 additions and 275 deletions

View file

@ -0,0 +1,19 @@
<?xml version="1.0"?>
<root main_tree_to_execute="BehaviorTree">
<!-- ////////// -->
<BehaviorTree ID="BehaviorTree">
<Sequence>
<SetBlackboard output_key="" value=""/>
<Repeat num_cycles="3">
<Sequence>
<AlwaysSuccess/>
<AlwaysSuccess/>
<AlwaysFailure/>
</Sequence>
</Repeat>
</Sequence>
</BehaviorTree>
<!-- ////////// -->
<TreeNodesModel/>
<!-- ////////// -->
</root>

View file

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<root BTCPP_format="4">
<BehaviorTree ID="Untitled">
<Sequence>
<SetBlackboard name="InitBT"
value="param_name"
output_key="param_values"/>
<Fallback>
<ReactiveSequence>
<GoToPose PoseArray="{param}"
robot_name="{robot_name}"/>
<AproachObject/>
</ReactiveSequence>
<AlwaysSuccess name="DoSomethingElse"/>
</Fallback>
</Sequence>
</BehaviorTree>
<!-- Description of Node Models (used by Groot) -->
<TreeNodesModel>
<Condition ID="AproachObject"
editable="true"/>
<Action ID="GoToPose"
editable="true">
<input_port name="PoseArray">Load from outside</input_port>
<input_port name="robot_name"/>
</Action>
</TreeNodesModel>
</root>

View file

@ -0,0 +1,19 @@
<?xml version="1.0"?>
<root main_tree_to_execute="GripperTree">
<BehaviorTree ID="GripperTree">
<Sequence>
<Action ID = "GripperControl"
pose = "open"
server_name="/gripper_control"
server_timeout="10"
cancel_timeout="5" />
</Sequence>
</BehaviorTree>
<TreeNodesModel>
<Action ID = "GripperControl">
<input_port name = "pose"/>
</Action>
</TreeNodesModel>
</root>

View file

@ -0,0 +1,61 @@
<?xml version="1.0"?>
<root main_tree_to_execute="BehaviorTree">
<!-- ////////// -->
<BehaviorTree ID="BehaviorTree">
<Sequence>
<Action GraspPose="GraspPose" ID="GetPickPlacePoses" ObjectName="ObjectPose" PlacePose="PlacePose" PostGraspPose="PostGraspPose" PostPlacePose="PostPlacePose" PreGraspPose="PreGraspPose" PrePlacePose="PrePlacePose"/>
<ReactiveSequence>
<Sequence>
<SubTree ID="Pick"/>
<SubTree ID="Place"/>
</Sequence>
<Action ID="SetNextObject" new_object="ObjectName"/>
<Action GraspPose="GraspPose" ID="GetPickPlacePoses" ObjectName="ObjectPose" PlacePose="PlacePose" PostGraspPose="PostGraspPose" PostPlacePose="PostPlacePose" PreGraspPose="PreGraspPose" PrePlacePose="PrePlacePose"/>
</ReactiveSequence>
</Sequence>
</BehaviorTree>
<!-- ////////// -->
<BehaviorTree ID="Pick">
<Sequence>
<Action ID="MoveToPose" motion_type="ptp" pose="PreGraspPose"/>
<Action ID="GripperCommand" command="open"/>
<Action ID="MoveToPose" motion_type="cp" pose="GraspPosition"/>
<Action ID="GripperCommand" command="close"/>
<Action ID="MoveToPose" motion_type="cp" pose="PostGraspPose"/>
</Sequence>
</BehaviorTree>
<!-- ////////// -->
<BehaviorTree ID="Place">
<Sequence>
<Action ID="MoveToPose" motion_type="ptp" pose="PrePlacePose"/>
<Action ID="MoveToPose" motion_type="cp" pose="PlacePose"/>
<Action ID="GripperCommand" command="open"/>
<Action ID="MoveToPose" motion_type="cp" pose="PostPlacePose"/>
</Sequence>
</BehaviorTree>
<!-- ////////// -->
<TreeNodesModel>
<Action ID="GetPickPlacePoses">
<output_port default="GraspPose" name="GraspPose"/>
<inout_port default="ObjectPose" name="ObjectName"/>
<output_port default="PlacePose" name="PlacePose"/>
<output_port default="PostGraspPose" name="PostGraspPose"/>
<output_port default="PostPlacePose" name="PostPlacePose"/>
<output_port default="PreGraspPose" name="PreGraspPose"/>
<output_port default="PrePlacePose" name="PrePlacePose"/>
</Action>
<Action ID="GripperCommand">
<input_port default="open" name="command"/>
</Action>
<Action ID="MoveToPose">
<input_port default="cartesian" name="motion_type"/>
<input_port default="PreGraspPose" name="pose"/>
</Action>
<SubTree ID="Pick"/>
<SubTree ID="Place"/>
<Action ID="SetNextObject">
<inout_port name="new_object"/>
</Action>
</TreeNodesModel>
<!-- ////////// -->
</root>

View file

@ -0,0 +1,50 @@
<?xml version="1.0"?>
<root main_tree_to_execute="BehaviorTree">
<!-- ////////// -->
<BehaviorTree ID="BehaviorTree">
<ReactiveSequence>
<SubTree ID="Pick"/>
<SubTree ID="Place"/>
</ReactiveSequence>
</BehaviorTree>
<!-- ////////// -->
<BehaviorTree ID="Pick">
<Sequence>
<Action ID="GetPickPlacePoses" ObjectPose="ObjectPose" Pose="{GraspPose}" PostPose="{PostGraspPose}" PrePose="{PreGraspPose}" name="box1"/>
<Action ID="MoveToPose" motion_type="ptp" pose="PreGraspPose"/>
<Action ID="GripperCommand" command="open"/>
<Action ID="MoveToPose" motion_type="cp" pose="GraspPosition"/>
<Action ID="GripperCommand" command="close"/>
<Action ID="MoveToPose" motion_type="cp" pose="PostGraspPose"/>
</Sequence>
</BehaviorTree>
<!-- ////////// -->
<BehaviorTree ID="Place">
<Sequence>
<Action ID="GetPickPlacePoses" ObjectPose="ObjectPose" Pose="PlacePose" PostPose="PostPlacePose" PrePose="PrePlacePose" name="GetPlacePoses"/>
<Action ID="MoveToPose" motion_type="ptp" pose="PrePlacePose"/>
<Action ID="MoveToPose" motion_type="cp" pose="PlacePose"/>
<Action ID="GripperCommand" command="open"/>
<Action ID="MoveToPose" motion_type="cp" pose="PostPlacePose"/>
</Sequence>
</BehaviorTree>
<!-- ////////// -->
<TreeNodesModel>
<Action ID="GetPickPlacePoses">
<input_port default="ObjectPose" name="ObjectPose"/>
<output_port default="GraspPose" name="Pose"/>
<output_port default="PostGraspPose" name="PostPose"/>
<output_port default="PreGraspPose" name="PrePose"/>
</Action>
<Action ID="GripperCommand">
<input_port default="open" name="command"/>
</Action>
<Action ID="MoveToPose">
<input_port default="cartesian" name="motion_type"/>
<input_port default="PreGraspPose" name="pose"/>
</Action>
<SubTree ID="Pick"/>
<SubTree ID="Place"/>
</TreeNodesModel>
<!-- ////////// -->
</root>

View file

@ -2,36 +2,68 @@
<root main_tree_to_execute="MainTree">
<BehaviorTree ID="MainTree">
<Sequence>
<Action ID="MoveToPose"
robot_name="ur_manipulator"
pose="pose1"
<Action ID="GetPickPlacePoses"
ObjectName="box1"
GraspPose="{GraspPose}"
PostGraspPose="{PostGraspPose}"
PostGraspPose2="{PostGraspPose2}"
PreGraspPose="{PreGraspPose}"
PlacePose="{PlacePose}"
PrePlacePose="{PrePlacePose}"
PostPlacePose="{PostPlacePose}"
PrePlaceJointState="{PrePlaceJointState}"
NextObject = "{NextObject}"
server_name="/get_pick_place_pose_service"
server_timeout="1000"/>
<Action ID="MoveToPose" robot_name="ur_manipulator_gripper" pose="{PreGraspPose}" server_name="/move_topose" server_timeout="10000" cancel_timeout="5000" />
<Action ID="MoveToPose" robot_name="ur_manipulator_gripper" pose="{GraspPose}" server_name="/move_cartesian" server_timeout="10000" cancel_timeout="5000" />
<Action ID="GripperControl" pose = "close" server_name="/gripper_control" server_timeout="10" cancel_timeout="5" />
<Action ID="MoveToPose" robot_name="ur_manipulator_gripper" pose="{PostGraspPose}" server_name="/move_cartesian" server_timeout="10000" cancel_timeout="5000" />
<Action ID="MoveToPose" robot_name="ur_manipulator_gripper" pose="{PostGraspPose2}" server_name="/move_cartesian" server_timeout="10000" cancel_timeout="5000" />
<!-- <Action ID="MoveToJointState" robot_name="ur_manipulator_gripper" PrePlaceJointState="{PrePlaceJointState}" server_name="/move_to_joint_states" server_timeout="10000" cancel_timeout="5000" /> -->
<Action ID="MoveToPose" robot_name="ur_manipulator_gripper" pose="{PrePlacePose}" server_name="/move_topose" server_timeout="10000" cancel_timeout="5000" />
<Action ID="MoveToPose" robot_name="ur_manipulator_gripper" pose="{PlacePose}" server_name="/move_cartesian" server_timeout="10000" cancel_timeout="5000" />
<!-- <Action ID="AddPlanningSceneObject" ObjectName="{NextObject}" pose="{PlacePose}" server_name="/add_planing_scene_object" server_timeout="1000"/> -->
<Action ID="GripperControl" pose = "open" server_name="/gripper_control" server_timeout="10" cancel_timeout="5" />
<Action ID="MoveToPose" robot_name="ur_manipulator_gripper" pose="{PostPlacePose}" server_name="/move_cartesian" server_timeout="10000" cancel_timeout="5000" />
<Repeat num_cycles="5">
<Sequence>
<Action ID="GetPickPlacePoses"
ObjectName="{NextObject}"
GraspPose="{GraspPose}"
PostGraspPose="{PostGraspPose}"
PostGraspPose2="{PostGraspPose2}"
PreGraspPose="{PreGraspPose}"
PlacePose="{PlacePose}"
PrePlacePose="{PrePlacePose}"
PostPlacePose="{PostPlacePose}"
PrePlaceJointState="{PrePlaceJointState}"
NextObject = "{NextObject}"
server_name="/get_pick_place_pose_service"
server_timeout="1000"/>
<Action ID="MoveToPose" robot_name="ur_manipulator_gripper" pose="{PreGraspPose}" server_name="/move_topose" server_timeout="10000" cancel_timeout="5000" />
<Action ID="MoveToPose" robot_name="ur_manipulator_gripper" pose="{GraspPose}" server_name="/move_cartesian" server_timeout="10000" cancel_timeout="5000" />
<Action ID="GripperControl" pose = "close" server_name="/gripper_control" server_timeout="10" cancel_timeout="5" />
<Action ID="MoveToPose" robot_name="ur_manipulator_gripper" pose="{PostGraspPose}" server_name="/move_cartesian" server_timeout="10000" cancel_timeout="5000" />
<Action ID="MoveToPose" robot_name="ur_manipulator_gripper" pose="{PostGraspPose2}" server_name="/move_cartesian" server_timeout="10000" cancel_timeout="5000" />
<!-- <Action ID="MoveToJointState" robot_name="ur_manipulator_gripper" PrePlaceJointState="{PrePlaceJointState}" server_name="/move_to_joint_states" server_timeout="10000" cancel_timeout="5000" /> -->
<Action ID="MoveToPose" robot_name="ur_manipulator_gripper" pose="{PrePlacePose}" server_name="/move_topose" server_timeout="10000" cancel_timeout="5000" />
<Action ID="MoveToPose" robot_name="ur_manipulator_gripper" pose="{PlacePose}" server_name="/move_cartesian" server_timeout="10000" cancel_timeout="5000" />
<Action ID="GripperControl" pose = "open" server_name="/gripper_control" server_timeout="10" cancel_timeout="5" />
<Action ID="MoveToPose" robot_name="ur_manipulator_gripper" pose="{PostPlacePose}" server_name="/move_cartesian" server_timeout="10000" cancel_timeout="5000" />
</Sequence>
</Repeat>
server_name="/move_topose"
server_timeout="1000"
cancel_timeout="500" />
<Action ID="MoveToPose"
robot_name="ur_manipulator"
pose="pose2"
server_name="/move_topose"
server_timeout="1000"
cancel_timeout="500" />
<Action ID="MoveToPose"
robot_name="ur_manipulator"
pose="pose3"
server_name="/move_topose"
server_timeout="1000"
cancel_timeout="500" />
</Sequence>
</BehaviorTree>
<TreeNodesModel>
<Action ID="MoveToPose">
<input_port name="robot_name"/>
<input_port name="pose"/>
<input_port name="pose_name"/>
</Action>
</TreeNodesModel>
</root>