Overview
Component Activation
The ROS2 drivers mentioned below are all automatically started when launching the system services. These drivers further expand on the functionality for interfacing as well as for independent component checking.
Service Status
Check service status:
sudo systemctl status clearpath-robot.service
sudo systemctl status mmp-webserver.service
Webserver
The webserver is accessible at http://192.168.131.1:9000 with credentials:
Username: admin
Password: mybotshop
ROS2 Domain Setup
For ROS2 Jazzy, use the following environment setup:
source /opt/ros/jazzy/setup.bash
source /opt/mybotshop/install/setup.bash
Teleoperation
Teleoperate using the keyboard teleop package:
ros2 run teleop_twist_keyboard teleop_twist_keyboard \
--ros-args --remap cmd_vel:=/r100_0118/cmd_vel \
--ros-args -p stamped:=true
Note
Replace r100_0118 with your robot’s namespace. Reduce speed by pressing z until 0.1 for safe indoor operation.
Visualization
View the robot state in RViz2:
ros2 launch mmp_viz view_robot.launch.py
Component Activation
The ros drivers mentioned below are all automatically started when launching the accessories launch file. These drivers further expand on the functionality for interfacing as well as for independent component checking.
ROS Multimachine
To use Rviz on your pc for faster updates please setup the multimachine. By default, if you connect to the built-in router, you need only to follow the builtin router subsection.
Multimachine - Client - Builtin Router
For all the terminals in your pc, you may export these environment variables. The ros master should correspond to the robots ip where as the ros ip and ros hostname should correspond to your pc’s ip that is connected to the robot in the same network.
export ROS_MASTER_URI = http://192.168.131.1:11311/
export ROS_IP =192.168.131. < your_assigned_ip_from_router >
export ROS_HOSTNAME =192.168.131. < your_assigned_ip_from_router >
Important
Please note that you should ideally have the mmp_description and mmp_viz rospackages built on your pc so that you may view
the robot over the network.
Multimachine - Host - Custom Router
For all the terminals in the robot 4 — 5 recommended, you can export the following environment variables. The ip should correspond
to the ip address of your robot which has been obtained from sudo nmtui.
export ROS_MASTER_URI =http://192.168.0.219:11311/
export ROS_IP =192.168.0.219
export ROS_HOSTNAME =192.168.0.219
Multimachine - Client - Custom Router
For all the terminals in your pc, you may export these environment variables. The ros master should correspond to the robots ip where as the ros ip and ros hostname should correspond to your pc’s ip that is connected to the robot in the same network.
export ROS_MASTER_URI =http://192.168.0.219:11311/
export ROS_IP =192.168.0.225
export ROS_HOSTNAME =192.168.0.225
Important
Please note that you should ideally have the mmp_description and mmp_viz rospackages built on your pc so that you may view
the robot over the network.
Multimachine Usage
Stop the mmp service via (On the robot).
sudo service mmp stop
On the robot launch.
roslaunch mmp_startup system_startup.launch
On the users pc launch.
roslaunch mmp_viz view_robot.launch
Robotic Arms
Dual xARM850 + Robotiq 2F-140
Please follow this checklist to interact with the dual xARM850 arms and grippers via ROS2.
Ensure the robot arms are receiving power (flip the 50A lever towards its black counterpart)
Release emergency switch
Enable arms via webserver console or xARM web interface:
Left arm: http://192.168.131.5:18333
Right arm: http://192.168.131.6:18333
Launch xARM drivers:
ros2 launch mmp_xarm custom_dualarm_drivers.launch.py
Or launch individual arms:
# Left arm only
ros2 launch mmp_xarm include/xarm850_unit_1.launch.py
# Right arm only
ros2 launch mmp_xarm include/xarm850_unit_2.launch.py
Gripper Control
Launch gripper controllers:
ros2 launch mmp_robotiq_dual gripper_left.launch.py
ros2 launch mmp_robotiq_dual gripper_right.launch.py
Open/Close grippers via service:
ros2 service call /r100_0118/gripper/left/open std_srvs/srv/Trigger
ros2 service call /r100_0118/gripper/left/close std_srvs/srv/Trigger
Set gripper position (0=open, 255=closed):
ros2 service call /r100_0118/gripper/left/set_position \
mmp_interface/srv/GripperCommand \
"{position: 128, speed: 255, force: 100}"
MoveIt2
To use MoveIt2 for dual arm planning:
ros2 launch mmp_dual_uf850_moveit2 mbs_dual_arm.launch.py
Launch visualizer:
ros2 launch mmp_viz view_dualarm.launch.py
Note
Configure planner with OMPL -> TRRT (default). Ensure to see trails of planned path before execution.
Test xARM Trajectory
# Make Left Robot Arm Stand
ros2 action send_goal /r100_0118_uf1/uf850_ufactory_unit01_traj_controller/follow_joint_trajectory \
control_msgs/action/FollowJointTrajectory "{
trajectory: {
joint_names: [uf_left_joint1, uf_left_joint2,
uf_left_joint3, uf_left_joint4,
uf_left_joint5, uf_left_joint6],
points: [{
positions: [-0.003, 0.424, -0.907, -0.005, 0.241, 0.1],
time_from_start: {sec: 5, nanosec: 0}
}]
}
}"
UR5e + Robotiq
Please follow this checklist to interact with the UR5e and Gripper via ROS.
Power on teach pendant — In Teach pendant Top Center Right
Release emergency switch — In Teach pendant Top Center
UR5e is in remote mode — In Teach pendant Top right
UR5e is Power off state with a icon — In Teach pendant Bottom left (Important)
Launch ROS driver:
roslaunch mmp_arm ur5e_robotiq_driver.launch
To test the gripper run:
rosrun mmp_demo gripper.py
To test the UR5e and gripper use moveit you can use Moveit:
roslaunch mmp_ur_moveit_config mmp_moveit.launch
Auxiliary Rigs
3-Axis Rig System
The 3-axis rig system provides positioning for the dual manipulator arms with one Y-axis (base plate) and two Z-axes (lift plates).
Position Ranges
Base Plate: 0-400 (0=Front, 400=Rear)
Left Plate: 0-500 (0=Down, 500=Up)
Right Plate: 0-500 (0=Down, 500=Up)
Activation
Activate rig system:
ros2 service call /r100_0118/mmp_rig/activation \
mmp_interface/srv/RigActivation \
"{base_plate: true, left_plate: true, right_plate: true}"
Deactivate rig system (recommended when not in use):
ros2 service call /r100_0118/mmp_rig/activation \
mmp_interface/srv/RigActivation \
"{base_plate: false, left_plate: false, right_plate: false}"
Position Control
Warning
Ensure arms are not in collision path before moving rig!
Move to middle position:
ros2 service call /r100_0118/mmp_rig/control \
mmp_interface/srv/RigControl \
"{base_plate: 200.0, left_plate: 250.0, right_plate: 250.0}"
Move to rear + highest position:
ros2 service call /r100_0118/mmp_rig/control \
mmp_interface/srv/RigControl \
"{base_plate: 400.0, left_plate: 500.0, right_plate: 500.0}"
Move to front + lowest position:
ros2 service call /r100_0118/mmp_rig/control \
mmp_interface/srv/RigControl \
"{base_plate: 0.0, left_plate: 0.0, right_plate: 0.0}"
Velocity Control
For simple velocity-based movement:
# Stop all axes
ros2 topic pub /r100_0118/mmp_rig/cmd_vel \
mmp_interface/msg/RigControlCmd \
"{base_plate: 0, left_plate: 0, right_plate: 0}"
# Move base plate forward
ros2 topic pub /r100_0118/mmp_rig/cmd_vel \
mmp_interface/msg/RigControlCmd \
"{base_plate: 1, left_plate: 0, right_plate: 0}"
Lift Actuation
Note
The lift driver is on by default from the startup job.
Start the driver via:
roslaunch mmp_lift base.launch
Move lift up 1 to -600 microsteps
rostopic pub -r 1 /cmd_lift std_msgs/Float32 "data : -600.0"
Move lift down 1 to 600 microsteps
rostopic pub -r 1 /cmd_lift std_msgs /Float32 "data : 600.0"
Activate Lifts softlock, for the lift to move
rosservice call /get_lift_manual_control "{}"
Sensors
Ouster + Hokuyo
Note
The Hokuyos are on by default from the startup services.
To launch all LiDARs run:
ros2 launch mmp_lidars combined_scan.launch.py
Individual LiDAR launches:
# Front Hokuyo
ros2 launch mmp_lidars include/hokuyo_f.launch.py
# Rear Hokuyo
ros2 launch mmp_lidars include/hokuyo_r.launch.py
# Ouster OS1
ros2 launch mmp_lidars include/ouster.launch.py
LiDAR IP Addresses:
Hokuyo Front: 192.168.131.21
Hokuyo Rear: 192.168.131.22
Ouster: 192.168.131.30
Depth Cameras
Start Intel RealSense D405 (wrist camera):
ros2 launch mmp_depth_cameras realsense_i.launch.py
Start Intel RealSense D455:
ros2 launch mmp_depth_cameras realsense_ii.launch.py
Start ZED2i stereo camera:
ros2 launch mmp_depth_cameras zed.launch.py
Note
Running Ouster and RealSense simultaneously may cause camera latency due to high bandwidth usage. Consider using one or the other for optimal performance.
Navigation
SLAM (2D Mapping):
ros2 launch mmp_nav2 slam.launch.py
ros2 lifecycle set /r100_0118/slam_toolbox configure
ros2 lifecycle set /r100_0118/slam_toolbox activate
Save map:
ros2 run nav2_map_server map_saver_cli -f \
/opt/mybotshop/src/mybotshop/mmp_nav2/maps/custom_map \
--ros-args --remap map:=/r100_0118/map
Odometry-based navigation:
ros2 launch mmp_nav2 odom_navi.launch.py
Map-based navigation:
ros2 launch mmp_nav2 map_navi.launch.py
Ouster + Hokuyo
Note
The Hokuyos are on by default from the startup job.
To launch all three lidars run:
roslaunch mmp_lidars ouster_hokuyos.launch
To launch the hokuyos only (ideal when working with realsense):
roslaunch mmp_lidars hokuyos.launch
Realsense Camera
Start the pan and tilt camera D455:
roslaunch mmp_realsense_cameras d455.launch
Start the wrist camera:
roslaunch mmp_realsense_cameras d405.launch
Start both cameras:
roslaunch mmp_realsense_cameras realsense.launch
Note
When both the Ouster and Realsense cameras work at the same time, the latency of the camera stream increases due large amount of data transfer. Ideally, Ouster should be running or Realsense. Both can work at the same time but then Realsense suffer from latency issues.
Pan & Tilt
Start the pan and tilt dynamixel motors via:
roslaunch mmp_pan_and_tilt controller.launch
Move pan and tilt with ranges of -1.5708 to +1.5708 in radian
rostopic pub /cmd_pan_and_tilt mmp_msgs/PanTilt " pan : 1.0" "tilt : 0.0"
Caution
Caution Notes
Always follow the proper shutdown procedure to prevent data corruption and hardware damage.
Always remain close to the emergency stop buttons.
Deactivate the rig system before shutting down.
Disable xARM850 arms before engaging E-Stop.
Sudden jerks to the mobile robot can cause a disconnection. The velocity provided should always be smooth.
Ensure arms are not in collision path before moving the rig system.
Known Issues
xARM850 not starting
If the xARM850 doesn’t start and you can’t hear clicking sounds, engage the emergency stop and release it after 5 seconds. Then try again either with the driver or their web interface.
Realsense cameras lagging
Running Ouster and RealSense simultaneously may cause latency due to high bandwidth usage.
Consider using one or the other for optimal performance.
E-Stop Recovery
Ridgeback recovers automatically when E-Stop is released.
Rig requires re-activation via service call.
xARM850 requires re-enable via web interface or driver restart.
Emergency Stop
When E-Stop is engaged:
All motors on the Ridgeback cease operation immediately
All three rig axes stop and hold position (brakes engage)
Both xARM850 arms enter emergency stop state (servos disabled)
All motion commands are ignored until E-Stop is released
After releasing E-Stop:
# Re-activate rig system
ros2 service call /r100_0118/mmp_rig/activation \
mmp_interface/srv/RigActivation \
"{base_plate: true, left_plate: true, right_plate: true}"
Then re-enable xARM850 arms via web interface:
Left arm: http://192.168.131.5:18333
Right arm: http://192.168.131.6:18333
Caution Notes
Power off the UR5e correctly via the teach pendant.
Always remain close to the emergency stop buttons.
Sudden jerks to the mobile robot can cause a disconnection, the velocity that is provided should always have be smooth either through the joystick, keyboard, or program.
Known Issues
Pan, tilt not working (Usually caused by the provision of wrong command values)
◦ Solution is to powercycle the dynamixels and restart their driver.
Ridgeback shuts down sometimes when powered on.
◦ In rare cases the network does not startup in time causing the ridgeback to shut down.Powercycling should resolve the issue.
Realsense cameras lagging
◦ Utilize multi-machine setup.
◦ Ensure ouster is not running concurrently with the realsense as it takes up alot of bandwith which may be causing the lag.
Lift joystick not working
◦ This occasionally occurs if you try to move the lift while releasing the soft limit switches. Restarting the mmp service will correct this.