This section details how to get the physical turtlebot's OpenManipulator arm up and running. Please refer back to the class meeting 9 page for helpful tips on how to program the arm using the OpenManipulatorX GUI and Python code.
Then, run the following commands, which start Bringup and MoveIT! on the Pi, and the OpenManipulator c++ interface on the PC.
turtlebot4), check USB port number, and run bringup:
$ set_robot_num [robot_num]
$ ssh ubuntu@$ROBOT_IP
$ sudo dmesg | grep ttyUSB
After running sudo dmesg | grep ttyUSB look for which USB port the FTDI USB Serial Device is connected to, it should be either ttyUSB0 or ttyUSB1.
Now run the bringup command for the arm by specifying the USB port you identified in the prior step.
$ bringup_arm port_name:=/dev/ttyUSB1
bringup_arm is an alias for the command ros2 launch open_manipulator_x_bringup hardware.launch.py.
$ ssh ubuntu@$ROBOT_IP
$ start_moveit
start_moveit is an alias for the command ros2 launch open_manipulator_x_moveit_config move_group.launch.py.
$ ros2 launch open_manipulator_x_gui open_manipulator_x_gui.launch.py
$ ros2 run [package-name] [file-name]
In this exercise, we will use the arm of the Turtlebot to guide imaginary traffic. You should not use the robot's wheels for this exercise. You will be working the same groups.
To get started on this exercise, you'll need to clone three packages:
Run the following commands:
$ cd ~/intro_robo_ws/src/
$ git clone https://github.com/Intro-Robotics-UChicago-Fall-2025/lab_e_traffic_bot.git
$ git clone https://github.com/Intro-Robotics-UChicago-Fall-2025/custom_interfaces.git
$ cd ~/intro_robo_ws
$ colcon build --symlink-install --packages-select lab_e_traffic_bot custom_interfaces
$ source install/setup.bash
traffic_status topic.
Here is an example using the Turtlebot3.
Terminal 1: SSH into the robot and run bringup.
$ set_robot_num [robot_num]
$ ssh ubuntu@$ROBOT_IP
$ bringup_arm port_name:=/dev/[USB port]
Terminal 2: SSH into the robot and start MoveIt!.
$ ssh ubuntu@$ROBOT_IP
$ start_moveit
Terminal 3 : Run the OpenManipulator c++ interface on the PC.
$ ros2 run omx_cpp_interface arm_cmd
Terminal 4: Run the traffic node, which will send the continuous "traffic signals" to
your Turtlebot.
$ ros2 run lab_e_traffic_bot traffic
Terminal 5: Run the node that moves your robot arm.
$ ros2 run lab_e_traffic_bot move
custom_interfaces/msg/Traffic.msg, you will see
that it is an empty msg file. Update the msg file such that you can encode at least 3 directions with that
message. Here is a helpful resource for configuring messages: official wiki . lab_e_traffic_bot/traffic.py file
such that it publishes a traffic message with a different direction every 10 seconds. After this step, make sure that your traffic controller is publishing traffic messages appropriately via
ros2 topic echo /tbXX/traffic_status.
lab_e_traffic_bot/move.py
file such that the turtlebot arm performs something different per msg received in the
traffic_status callback function. Once done, run the move.py file and make sure your
robot arm moves as it receives different messages.
omx_cpp_interface will need to get launched every time you wish to control the robot through
code using the MoveIt interface. For your Lab E Deliverables, submit the following via Canvas/Gradescope by 2:00pm on Thursday, October 30th:
I want to thank former Intro Robotics TAs Pouya Mahdi Gholami and Yves Shum for developing the traffic box exercise and Lauren Wright for adapting it to ROS2.