ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

ROS Control and CAN interface on a custom robot.

asked 2016-10-21 14:51:59 -0500

Hello all,

I am currently in the process of working on a custom robot with custom joints. We have electric motors with an encoder and a low level driver that we can communicate with via CAN. I'm wondering how do we get ros_control and eventually MoveIt to control the robot completely. I was looking for tutorials on the wiki page, and didn't find anything of real use. I've used ros_control with Universal Robots, but never for a custom system. Does anyone have any general information on how to go about this?

I will update with the actually CAN controller when the electrical engineer on the project selects it. I'm just trying to look ahead.

edit retag flag offensive close merge delete


hi, did you find a good solution or example on how to use CAN in a hardware interface?

guidout gravatar image guidout  ( 2023-05-14 21:19:44 -0500 )edit

2 Answers

Sort by ยป oldest newest most voted

answered 2016-10-21 15:18:58 -0500

gvdhoorn gravatar image

Provided you are actually using CANopen, you could look at the ros_canopen packages. The canopen_motor_node abstracts CiA 402 devices, by exposing ros_control compatible hardware interfaces (based on what the configured devices support). There are other OSS implementations for ROS and CANopen, but I don't know of any that come with plug-and-play ros_control support.

After you have the ros_control interface configured, things will be similar to how you used the ur_modern_driver (or at least: I'm assuming that's what you meant when you wrote "used ros_control with Universal Robots").

I was looking for tutorials on the wiki page, and didn't find anything of real use.

That doens't surprise me too much, as "I'm creating a custom robot and interfacing with my actuators and sensors using CAN" is apparently not common enough that it warrant(s)(ed) a dedicated tutorial (yet).

It would be nice to add one though.

edit flag offensive delete link more

answered 2017-02-26 22:19:45 -0500

ufr3c_tjc gravatar image

We are also currently working with field robots that use J1939 CAN hydraulic valve controllers. We use CAN communication cards that are compatible with SocketCAN. This makes it extremely easy to send CAN messages from a C++ API. CANopen is limited to industrial robots, which may/may not be what you're using. But if CANopen isn't a possibility, SocketCAN is your next best option. There is USB2CAN from 8devices which is $60, as well as mini PCI-E cards from Innodisk, both of which we have tested and are currently using. The write method of your hardware_interface simply writes a CAN message onto the bus.

edit flag offensive delete link more


but SocketCAN is not a CAN protocol. It's just an API library.

andrestoga gravatar image andrestoga  ( 2019-08-22 20:47:08 -0500 )edit

Question Tools



Asked: 2016-10-21 14:51:59 -0500

Seen: 4,253 times

Last updated: Oct 21 '16