This repository contains a smach-based Finite State Machine (FSM) ROS Python package for sending generic cartesian control commands to floating base robots via CartesI/O.
The package is structured as follows:
src/states.py
defines several genericsmach.State
that can be used to send commands through CartesI/O API client (moreover, it contains other states that are specific to the INRIA Tiago Dual robot);src/sm_factory.py
defines "assembler" methods to build the FSM for carrying out the tasks of the 1st euROBIN coopetition;
The scripts
folder contains some example ROS nodes to run the FSM. The available nodes are:
execute_cmd
node receives the plan from an LLM service that analyze vocal instructions, assemble and execute the right FSM according to the requested task;homing
node commands to robot to go in its home configuration;update_odom
node resets the floating base state in CartesI\O according to the measured odometry;dummy_fsm
node is a simple example that makes the robot executes dummy motions using differen modalities;pick_object_from_table
node is an example of a more concrete FSM for a pick-and-place application.
The config
folder contains the YAML files describing the motions, and the demonstrated trajectories (saved as npy
files inside sub-folder demo
) for replay.
You can try a docker example with a simulated Tiago Dual (omnibase) developed by PAL Robotics (CartesI/O configuration at the link: (https://github.com/hucebot/tiago_dual_cartesio_config)).
To build the docker image, from the inria_fsm_cartesio/docker folder, run:
bash build.sh
To run the container, form the inria_fsm_cartesio/docker folder, run:
bash launch.sh
Then run:
terminator
Inside terminator
, open a first terminal and run:
roscore
In a second terminal, launch CartesI/O for the Tiago Dual robot:
mon launch tiago_dual_cartesio_config cartesio.launch
Here you can try out CartesI/O interactive marker to move the robot around.
If you want to try also the FSM, in a third terminal run:
rosrun fsm_cartesio dummy_fsm
The dummy_fsm
node offers a basic example on how to start creating smach FSM using CartesI/O functionalities.