This is a ROS 2 simulation stack for the iRobot® Create® 3 robot, modified for multiple robot instances.
Have a look at the Create® 3 documentation for more details on the ROS 2 interfaces exposed by the robot.
mkdir -p ~/create3_ws/src
cd ~/create3_ws/src
git clone --recurse-submodules git@github.com:Hustwireless/create3_multi.git
sudo apt-get update
rosdep install --from-path src -yi
export IGNITION_VERSION=fortress
colcon build --symlink-install
source install/local_setup.bash
$ . install/setup.zsh && ros2 launch irobot_create_multi create3_gazebo.launch.py namespace:=robot1
$ . install/setup.zsh && ros2 launch irobot_create_multi create3_spawn.launch.py namespace:=robot2 x:=1.0
$ . install/setup.zsh && ros2 action send_goal /robot1/walk create3_walk_msgs/action/Walk "{explore_duration:{sec: 100, nanosec: 0}, max_runtime:{sec: 120,nanosec: 0}}"
$ . install/setup.zsh && ros2 action send_goal /robot2/walk create3_walk_msgs/action/Walk "{explore_duration:{sec: 100, nanosec: 0}, max_runtime:{sec: 120,nanosec: 0}}"
- The current implementation, developed for ROS Humble, evolves from
createCoverage
. It utilizes a state machine to alternate behaviors amongnavigation
,estop
,dock
,undock
, androtate
. Navigation
leverages the create3 API'sDrive Goals
for movement directives.- To deploy two identical robots, inclusive of all controllers and sensors, it would be good to spawn each robot's nodes and topics within distinct namespaces.
- An ongoing issue with ROS Galactic involves the lack of namespace support in several dependent packages. For details, refer to this GitHub issue. Addressing this requires modifications to the
ros2_control
,ros2_controllers
, andgazebo_ros_control
packages. - For ROS Humble, specifically regarding the correct namespace allocation for gazebo ros plugins, modifications to the
gazebo_ros
package appears to be necessary as well, which could fix this Github issue.
- Sometimes when robot climbs up to the docking station, it stops moving afterwards. That's because the docking station mechanism has locked the robot's chassis.
- If the navigation velocity was set a bit larger, the robots cannot stop in time before cliding with each other.