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.


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:

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.