Revision history [back]

Order of published joints from joint_state_controller

Hello all. I am wondering if it is possible to control the order in which the joint_state_controller publishes the robot joints and their respective values?

I am simulating a UR5 manipulator in Gazebo, and if we look at a sample message taken from the published /joint_states topic, they seem to be ordered in alphabetical (?) order (FYI the elbow_joint and shoulder_pan_joints should be switched):

header:
seq: 685
stamp:
secs: 13
nsecs: 722000000
frame_id: ''
name: [elbow_joint, shoulder_lift_joint, shoulder_pan_joint, wrist_1_joint, wrist_2_joint, wrist_3_joint]
position: [-9.935968448004928e-07, -1.5675146858950169, -0.0005566812821147238, -1.567509637814898, -1.5170622604365747e-05, -1.739371527698097e-06]
velocity: [3.6741224523988668e-06, -5.112008493828534e-05, 0.001605313567856731, 3.934066966728182e-05, 5.4372582579940575e-05, 6.217080293624165e-06]
effort: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]


Is there a simple solution to publishing these messages in the order in which they appear in the kinematic chain (i.e base_link --> .. --> tip_link).

I am currently manually sorting this data to the correct order when I read it into a node, but this is fairly inelegant (especially if i were to switch to a different robot which is for some reason publishing in the correct order).

I have used the controller_joint_names parameter in the past to do this in the industrial_robot_client, is there something similar method I can use for the joint_state_controller? (http://wiki.ros.org/industrial_robot_client/joint_naming#Joint_Reordering)

Thanks!

/////////////////////Details//////////////////////////////////////

First I load the relevant parameter .yaml files

 <!-- Load controller parameters -->


and then spawn my arm and joint_state_controllers from there

<node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen"
args="arm_controller joint_state_controller"/>


contents of controller_setup.yaml

joint_state_controller:
type: joint_state_controller/JointStateController
publish_rate: 50
# -------------------------------------------------------
arm_controller:
type: position_controllers/JointTrajectoryController
joints:
- shoulder_pan_joint
- shoulder_lift_joint
- elbow_joint
- wrist_1_joint
- wrist_2_joint
- wrist_3_joint
constraints:
goal_time: 0.6
stopped_velocity_tolerance: 0.05
shoulder_pan_joint: {trajectory: 0.1, goal: 0.1}
shoulder_lift_joint: {trajectory: 0.1, goal: 0.1}
elbow_joint: {trajectory: 0.1, goal: 0.1}
wrist_1_joint: {trajectory: 0.1, goal: 0.1}
wrist_2_joint: {trajectory: 0.1, goal: 0.1}
wrist_3_joint: {trajectory: 0.1, goal: 0.1}
stop_trajectory_duration: 0.5
state_publish_rate:  25
action_monitor_rate: 10