Contains all config files (TS and LTL specifications) and launch files for the different agents of the SSF COIN project MS4 demonstration.
The demonstration is now finished, a video of it can be found here.
The host computer is running the ROS core. It's important to set all robots and external element ROS_MASTER_URI to the host computer IP.
A centralized and shared localization is provided my the motion capture system of the Smart Mobility Lab (Qualisys). A ROS interface is used to communicate with all agents.
Assembly robots are Nexus Robotics 4WD Holonomic robots equipped with custom internal controller and a platform for package handling.
Onboard computer is either:
- Nvidia Jetson TX2
- Nvidia Jetson Nano
Using move_base for navigation:
- Global path planner: Navfn
- Local path planner: TEB
The robots are running the LTL planner and the robot-specific nodes from ltl_automaton_nexus.
To run the robot, launch from the onboard computer: roslaunch coin_ms4_demo nexus_agent.launch agent_name:=<agent_name> obstacle_names:="[<other_agent_name1>, <other_agent_name2>]"
replacing <agent_name> and <other_agent_name#> by the nexus names (on the format nexus0).
The robot model used by the LTL planner has two components: workspace (2d region) model and load model. The nexus robot TS config file can be found at /config/nexus_ts.yaml.
The workspace is discretized in 15 regions and 3 stations (using the 2d pose region from ltl_automaton_std_transition_systems).
The load model is composed of 3 states:
- unloaded
- loaded_box
- loaded_assembly
- "pick_box" only possible at "s0"
- "pick_assembly" only possible at "s1"
- "deliver_assembly" only possible at "s2"
The nexus robot LTL formula can be found at /config/nexus_ltl_spec.yaml.
Hard task is: (⎕◊ loaded_assembly)∧(⎕◊ unloaded)
.
The robot should alternatively be loaded with the full assembly and unloaded.
No soft task defined.
The manipulator is a HEBI Robotics A-2085-06 with 6 degrees of freedom. It is interfaced with ROS using the hebiros package. It is endowed with a custom electromagnet end-effector for boxes handling.
The manipulator is running the LTL planner and its specific nodes from ltl_automaton_6dof_hebi_arm.
To run the robot, launch from a computer on the network: roslaunch coin_ms4_demo hebi_arm.launch
.
The manipulator model used by the LTL planner has two components: jointspace (6-DoF joint configurations) model and load model. The manipulator robot TS config file can be found at /config/6dof_hebi_ts.yaml.
The jointspace is discretized in 3 configurations (using the 6dof configurations from ltl_automaton_std_transition_systems).
The load model is composed of 2 states:
- unload
- loaded
- "pick" only possible at "pick_ready"
- "drop" only possible at "drop_ready"
The manipulator LTL formula can be found at /config/6dof_hebi_ltl_spec.yaml.
Hard task is: (⎕◊ loaded_assembly)∧(⎕◊ unloaded)
.
The robot should alternatively be loaded with the full assembly and unloaded.
No soft task defined.
The delivery robot used in the scenario is a Turtlebot2. Embedded localization is not used and replaced by the motion capture system.
Using move_base for navigation with default planner.
The robots is running the LTL planner and the robot-specific nodes from ltl_automaton_turtlebot.
To run the robot, launch from the onboard computer: roslaunch coin_ms4_demo turtlebot_agent.launch initial_beta:=40"
For perfomance reasons, it can be useful to run only the high level nodes (LTL planner, LTL Turtlebot node, HIL nodes) on a host computer instead of the Turtlebot onboard laptop. To do so, run the following on the host computer: roslaunch coin_ms4_demo turtlebot_agent_high_level.launch
, and the following on the onboard computer: roslaunch coin_ms4_demo turtlebot_agent_low_level.launch
.
The delivery robot model used by the LTL planner has 3 components: the workspace model, the load model and the battery model. The delivery robot TS config file can be found at /config/turtlebot_ts.yaml.
The workspace is discretized in 15 regions and 3 stations (using the 2d pose region from ltl_automaton_std_transition_systems).
The load model is composed of 3 states:
- unloaded
- loaded
- "pick" only possible at "s2"
- "drop" only possible at "s3"
The battery model is composed of 2 states:
- uncharged
- charged
- "charge" only possible at "s1"
The robot LTL formula can be found at /config/turtlebot_ltl_spec.yaml.
Hard task is: (⎕ (uncharged →◊ charged)) ∧ (⎕◊ loaded) ∧ ⎕(loaded →◊ unloaded) ∧ ⎕(¬ r23 ∧ ¬ r26 ∧ ¬ r32 ∧ ¬ r35 )
.
- If the robot battery is uncharged, it has to charge it.
- AND The robot should alternatively be loaded and unloaded.
- AND The robot should avoid regions with obstacles (r23, r26, r32, r35)
Soft task is ((loaded ∧ s2) → ((¬ unloaded) U (loaded ∧ r36)))
.
The robot should go to region r36 after being loaded and before unloading (for a visual inspection task)
Button boxes are used to send acknowledgement of task done by human workers. The ros_raspberry_pi_button package is used to interface the button boxes to the ROS network.
To run the button box, connect to the internal raspberry pi and run the following:
- Assembly line button box:
roslaunch coin_ms4_demo assembly_line_button_box.launch
(config file in /config/button_box/assembly_line_button_box.yaml) - Delivery button box:
roslaunch coin_ms4_demo assembly_line_button_box.launch
(config file in /config/button_box/delivery_button_box.yaml)