ros_control: Where to publish joint_states?

1,387 views
Skip to first unread message

Dave Coleman

unread,
Jul 24, 2013, 3:25:02 PM7/24/13
to ros-sig-ro...@googlegroups.com, Jonathan Bohren
Howdy,

I'm currently working on Jonathan Bohren's Reflexxes trajectory controller (adding an action server to it), and I'm curious what the recommended practice was for publishing joint states for a robot. Using this trajectory controller for say, an arm, means that the controller is requesting ~7 hardware_interfaces. I have this setup but I also need something that publishes the JointState of these actuators (so that the robot_state_publisher can publish to TF). Should I also add this ability to the Reflexxes trajectory controller, or does that go somewhere else? I'm kind of again hitting on the idea of having an individual controller for each joint, and then multi-dof controllers that operate on top of them (such as a joint trajectory controller) as I suggested in this issue

Also, does anyone know what other trajectory controllers are currently available for ros_control? I remember Adolfo mentioned he was working on one somewhere...

Thanks!

Dave

Marcus Liebhardt

unread,
Jul 24, 2013, 10:22:49 PM7/24/13
to Dave Coleman, ros-sig-ro...@googlegroups.com, Jonathan Bohren
Dave,
I haven't implemented a ros_control controller yet, but as far as I understood, it would be the job of the joint_controller_manager to publish those joint states. That manager in turn gets information about each joint from the hardware interfaces, e.g.

joint_controller -> joint command -> joint_controller_manager -> actuator command -> actuator_interface -> actuator state -> joint_controller_manager -> joint state

@others: Please correct me, if my understanding about the above workflow is wrong!

Cheers,
Marcus



Dave

--
You received this message because you are subscribed to the Google Groups "ROS/Orocos Robot Control Special Interest Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ros-sig-robot-co...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 



--
Marcus Liebhardt 
Control Engineer
Yujin Robot
주소대한민국 서울시 금천구 가산동 345-30 남성프라자 #601, 153-023.
Address: Door #601, Namsung-Plaza, 345-30 Gasan-dong, Guemcheon-gu, Seoul, 153-023, Republic of Korea
Website: http://www.yujinrobot.com
Email: marcus.l...@yujinrobot.com
Phone: +82-70-46577073

Adolfo Rodríguez Tsouroukdissian

unread,
Jul 25, 2013, 6:07:46 AM7/25/13
to Dave Coleman, ros-sig-ro...@googlegroups.com, Jonathan Bohren
On Wed, Jul 24, 2013 at 9:25 PM, Dave Coleman <davetc...@gmail.com> wrote:
Howdy,

I'm currently working on Jonathan Bohren's Reflexxes trajectory controller (adding an action server to it), and I'm curious what the recommended practice was for publishing joint states for a robot.

Publishing a joint states topic is done by the JointStateController [1] that you run in addition to the Reflexxes controller. The JointStateController is read-only, hence does not claim resources and can happily coexist with another resource-claiming controller that operates on the same joints.
 
Using this trajectory controller for say, an arm, means that the controller is requesting ~7 hardware_interfaces. I have this setup but I also need something that publishes the JointState of these actuators (so that the robot_state_publisher can publish to TF).

You need to publish the state of the joints, not the actuators. The JointStateController already does that.
 
Should I also add this ability to the Reflexxes trajectory controller, or does that go somewhere else? I'm kind of again hitting on the idea of having an individual controller for each joint, and then multi-dof controllers that operate on top of them (such as a joint trajectory controller) as I suggested in this issue

For multi-dof controllers, you don't need "...an individual controller for each joint, and then multi-dof controllers that operate on top of them" .You just need a single controller that operates on multiple JointHandles taken from the desired HardwareInterface. The Reflexxes controller you mention does this [2, 3].


Also, does anyone know what other trajectory controllers are currently available for ros_control? I remember Adolfo mentioned he was working on one somewhere...

I've been working on this for the past few weeks, but have been delayed by other pressing matters. I want to deliver something on-par with PR2's JointTrajectoryActionController, but allowing the possibility to use different trajectory representations/interpolators (no plugins yet). By default it will use quintic splines. I expect to have something usable in about two weeks. Development is taking place in [4]. The current state of affairs is:

Done:
- (More or less) general trajectory interface. If you provide an alternative trajectory segment implementation that complies with some modest API requirements, you benefit from pretty much all the rest. A Reflexxes segment would be a nice test case.
- Online trajectory replacement.

In progress:
- Support for continuous joints, graceful handling of multi-turns.
- Stitch it all together inside the controller.

Todo:
- Path and goal tolerances for the action interface.

As always, with tons of tests, decent doc.

Adolfo.


Thanks!

Dave Coleman

unread,
Jul 25, 2013, 1:20:35 PM7/25/13
to Adolfo Rodríguez Tsouroukdissian, ros-sig-ro...@googlegroups.com, Jonathan Bohren
Thanks for the answers, I hadn't realized the JointStateController was needed but I have it working great now.

I'm looking forward to your joint_trajectory_controller, Adolfo, I haven't had any success with Reflexxes so far, though I'm probably just missing something.


- Dave
Reply all
Reply to author
Forward
0 new messages