Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/qualcomm-qrb-ros/qrb_ros_simulation/llms.txt

Use this file to discover all available pages before exploring further.

ROS actions provide the primary interface for controlling the robotic arm in QRB ROS Simulation. Unlike topics, which carry a continuous stream of data, actions support long-running commands with feedback and the ability to cancel in-flight goals. The simulation exposes one action server for arm trajectory control, used by both the RML-63 Robotic Arm and the QRB Mobile Manipulator.

Action server reference

/rm_group_controller/follow_joint_trajectory

FieldValue
Action typecontrol_msgs/action/FollowJointTrajectory
Available onRML-63 Robotic Arm, QRB Mobile Manipulator
RequiresControllers loaded via the gazebo_rml_63_gripper_load_controller.launch.py launch file
This action server is managed by the rm_group_controller, a JointTrajectoryController spawned by the ros2_control controller manager. It accepts a sequence of joint positions with optional velocities, accelerations, and time constraints, then executes the trajectory on joints joint1 through joint6 of the RML-63 arm.
The action server is not available until the simulation is running and the controllers are loaded. Sending a goal before pressing Play in Gazebo or before running the controller loader will fail with a connection timeout.

Message structure

The control_msgs/action/FollowJointTrajectory type follows the standard ROS 2 control interface. A goal message contains a trajectory_msgs/msg/JointTrajectory with one or more waypoints.
# Inspect the full action definition
ros2 interface show control_msgs/action/FollowJointTrajectory
A minimal goal specifies the joint names and a list of trajectory points, each with target positions and a time from start:
# View the trajectory message definition
ros2 interface show trajectory_msgs/msg/JointTrajectory
The arm controller accepts commands for these six joints:
  • joint1
  • joint2
  • joint3
  • joint4
  • joint5
  • joint6
The gripper is controlled through a separate hand_controller action server and accepts commands for joint01, joint11, joint02, and joint22.

Loading controllers

The action server only becomes active after you load the controllers. This is a separate step from launching Gazebo.
1

Launch the simulation and press Play

Start Gazebo with the arm or mobile manipulator launch file, then press Play in the Gazebo toolbar to start the simulation clock.
ros2 launch qrb_ros_sim_gazebo gazebo_rml_63_gripper.launch.py
2

Load the controllers

In a separate terminal, source the install overlay and run the controller loader:
source ~/qrb_ros_simulation_ws/install/local_setup.sh
ros2 launch qrb_ros_sim_gazebo gazebo_rml_63_gripper_load_controller.launch.py
This spawns joint_state_broadcaster, rm_group_controller, and hand_controller in sequence.

Verifying the action server

After loading the controllers, confirm that the action server is active:
ros2 action list
You should see /rm_group_controller/follow_joint_trajectory in the output. To inspect the action type:
ros2 action info /rm_group_controller/follow_joint_trajectory
For the full step-by-step launch instructions, including how to send test goals to the arm, see RML-63 Robotic Arm simulation setup.

Build docs developers (and LLMs) love