← Baxter

Baxter · Documentation

Baxter's topics and services

What the robot offers in ROS 1, what the bridge carries to ROS 2, and under which names.

Reading time
7 min read
Written by
Samuel Galla

AI-assisted This page was drafted with the help of AI tools and reviewed by its author. Check commands against the linked repository before running them on a robot. How we use AI

Everything Baxter can do is offered as ROS topics (streams of messages, such as joint angles coming out or commands going in) and services (a question with one answer, such as “open this camera”). The robot has 271 topics and 89 services. The bridge carries the ones the baxter_interface library and its tools use, listed below.

ROS 1 and ROS 2 names

A topic has the same name on both sides of the bridge. Only two things change:

ROS 1 (on the robot) ROS 2 (through the bridge)
Name /robot/joint_states /robot/joint_states
Name, robot with the name one /robot/joint_states /one/robot/joint_states
Message type sensor_msgs/JointState sensor_msgs/msg/JointState
Service type baxter_core_msgs/OpenCamera baxter_core_msgs/srv/OpenCamera

The robot itself always uses the plain names. The name in front is added only on the ROS 2 side (see Our two Baxters).

Under each name in the tables are its message type and its direction: out means from the robot to ROS 2, and in means a command from ROS 2 to the robot. Types are written without their package where it is obvious: JointCommand is baxter_core_msgs, Bool is std_msgs, JointState is sensor_msgs.

State and enabling

Topic What it carries
/robot/state AssemblyState · out enabled, stopped, error, e-stop
/robot/set_super_enable Bool · in true enables the motors, false disables them
/robot/set_super_reset Empty · in clears a stop or an error
/robot/set_super_stop Empty · in stops the robot, like the e-stop
/robot/joint_states JointState · out angle, speed and force of every joint of both arms and the head, 100 times per second

Arms

Each topic exists for left and right; only left is shown.

Topic What it carries
/robot/limb/left/joint_command JointCommand · in target angles, speeds or torques
/robot/limb/left/endpoint_state EndpointState · out where the hand is, how fast it moves, the force on it
/robot/limb/left/set_speed_ratio Float64 · in speed for position moves, 0 to 1
/robot/limb/left/joint_command_timeout Float64 · in how long a command stays valid
/robot/limb/left/inverse_dynamics_command trajectory_msgs/JointTrajectoryPoint · in extra force along a path, used by the trajectory action
/robot/limb/left/collision_avoidance_state CollisionAvoidanceState · out whether the arm is held back from touching the body or the other arm
/robot/limb/left/suppress_collision_avoidance Empty · in switches that off for a moment (used when tucking the arms)
/robot/digital_io/left_lower_cuff/state DigitalIOState · out true while someone holds the arm by its cuff
/robot/joint_state_publish_rate UInt16 · in how often the robot reports its joints

Grippers, head and screen

Topic What it carries
/robot/end_effector/left_gripper/command EndEffectorCommand · in open, close, calibrate (also right_gripper)
/robot/end_effector/left_gripper/state EndEffectorState · out position, force, whether it holds something
/robot/end_effector/left_gripper/properties EndEffectorProperties · out which gripper is mounted
/robot/head/head_state HeadState · out head angle, whether it pans or nods
/robot/head/command_head_pan HeadPanCommand · in turn the head
/robot/head/command_head_nod Bool · in nod once
/robot/xdisplay Image · in a picture for the 1024 × 600 screen

Cameras

Each topic exists for head_camera, left_hand_camera and right_hand_camera. Pictures only come from cameras that are open, and only two can be open at a time.

Topic What it carries
/cameras/left_hand_camera/image Image · out the pictures, up to 25 per second at 640 × 400
/cameras/left_hand_camera/camera_info CameraInfo · out size and lens values, sent with every picture

Sensors and lights

Topic What it carries
/robot/sonar/head_sonar/state PointCloud · out echoes of the 12 ultrasound sensors around the head
/robot/range/left_hand_range/state Range · out the infrared distance sensor in the hand (also right_hand_range)
/robot/accelerometer/left_accelerometer/state Imu · out the accelerometer in the hand (also right_accelerometer)
/robot/sonar/head_sonar/lights/state UInt16 · out which of the yellow sonar lights are on
/robot/sonar/head_sonar/lights/set_lights UInt16 · in switch them
/robot/sonar/head_sonar/lights/red_level, green_level Float32 · out the halo’s colour
/robot/sonar/head_sonar/lights/set_red_level, set_green_level Float32 · in set it

Buttons and lights

Topic What it carries
/robot/navigators/left_navigator/state NavigatorState · out the scroll wheel and three buttons; also right_navigator, torso_left_navigator, torso_right_navigator
/robot/digital_io/left_inner_light/state DigitalIOState · out the navigator lights: inner and outer, on left, right, torso_left and torso_right
/robot/digital_io/command DigitalOutputCommand · in switch any light or output
/robot/analog_io/command AnalogOutputCommand · in set any analog output
/robot/analog_io_states AnalogIOStates · out all analog inputs and outputs at once

Every other button, switch and output (the cuff buttons, suction valves, the torso fan, and so on) has a topic of its own on the robot: /robot/digital_io/<name>/state or /robot/analog_io/<name>/state. They are not bridged unless added to the bridge’s list.

Maintenance

Each exists for left and right. These start routines that move an arm by itself and change the robot’s calibration; use them through the library’s tare and calibrate_arm tools.

Topic What it carries
/robustcontroller/left/CalibrateArm/enable baxter_maintenance_msgs/CalibrateArmEnable · in start the arm calibration
/robustcontroller/left/CalibrateArm/status RobustControllerStatus · out its progress
/robustcontroller/left/Tare/enable baxter_maintenance_msgs/TareEnable · in start re-zeroing the arm’s force sensing
/robustcontroller/left/Tare/status RobustControllerStatus · out its progress

Services

Service What it does
/cameras/list ListCameras which cameras the robot offers right now
/cameras/open OpenCamera open a camera with a resolution
/cameras/close CloseCamera close it
/cameras/reset std_srvs/Empty make the robot look for its cameras again
/ExternalTools/left/PositionKinematicsNode/IKService SolvePositionIK joint angles that put the hand at a given place (also right)

From the bridge itself

These don’t exist on the robot. The bridge adds them.

Name What it is
/baxter_bridge/robot_info topic, String facts about the robot, such as its software version (ros2 run baxter_interface robot_info)
robot/robot_description topic the robot’s own model, with its measured arm mounts, for RViz and MoveIt
/baxter_bridge/ping service answers at once; the bridge uses it to notice when it has got stuck

The Mobility Base

The base’s bridge carries these. Rates are the base’s own.

Topic What it carries
/mobility_base/mode Mode · out e-stop, disabled, joystick, program; 2 per second
/mobility_base/battery BatteryState · out voltage and charge, every 2 seconds
/mobility_base/bumper_states BumperState · out which bumpers are pressed, 10 per second
/mobility_base/twist TwistStamped · out measured speed, 250 per second
/mobility_base/wrench WrenchStamped · out measured force, 250 per second
/mobility_base/joint_states JointState · out the four wheels, 250 per second
/mobility_base/joystick TwistStamped · out what the wireless joystick asks for, 50 per second
/mobility_base/joystick_raw JoystickRaw · out the joystick’s sticks and switches
/mobility_base/imu/data_raw Imu · out the inertial sensor, 100 per second
/mobility_base/imu/is_calibrated Bool · out whether it is calibrated
/mobility_base/cmd_vel Twist · in speed forward and sideways in m/s, turning in rad/s
/mobility_base/suppress_wireless Empty · in makes the base ignore its joystick for a moment

The types without a package are mobility_base_core_msgs or the standard ones. The services /mobility_base/get_max_speed and /mobility_base/set_max_speed read and set the base’s own speed limit.

What is not bridged

The rest of the robot’s topics and services stay on the ROS 1 side. These include the robot’s collision detection and diagnostics, the single buttons and switches mentioned above, its coordinate frames (/tf), and its internal motor messages. The bridge’s list can be extended without rebuilding anything, provided the message type exists on both sides.

Spotted a mistake? Edit this page on GitHub ↗