ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | Q&A
Ask Your Question

Send data thanks to PDO protocol

asked 2016-04-12 03:54:01 -0600

GuillaumeB gravatar image

I am working on controlling a canopen device thanks to canopen_master. I got inspired by the canopen_chain_node but it seems that this node only use SDO protocol. PDO management seems to be implemented in the canopen_master but I wonder how to publish a PDO frame thanks to canopen_master (maybe directly change the data in the OD?).

Is there something that i missed?

Did someone have an example of a ros_canopen SDO publisher?


edit retag flag offensive close merge delete

1 Answer

Sort by » oldest newest most voted

answered 2016-04-12 07:27:25 -0600

Mathias Lüdtke gravatar image

updated 2016-04-12 07:35:59 -0600

If you want to use PDOs instead of SDOs, just configure the mapping in the EDS/DCF. ros_canopen will switch to PDO transfer automatically.

edit flag offensive delete link more


thank you for your answer. I have already configure the PDO mapping in my EDS and I gave the OD based on this file to my canopen::node. But when I use canopen::ObjectStorage::Entry::set() (or cached) it use SDO (I checked it with candump)

GuillaumeB gravatar image GuillaumeB  ( 2016-04-12 09:02:31 -0600 )edit

Do you use the release or the source overlay(recommended!)? Please double check your settings. If you still cannot resolve the problem, please open a github issue and provide your settings and the candump.

Mathias Lüdtke gravatar image Mathias Lüdtke  ( 2016-04-12 10:02:05 -0600 )edit

I am using the branch indigo-devel from the ros-industrial/ros_canopen repo.

GuillaumeB gravatar image GuillaumeB  ( 2016-04-12 10:16:26 -0600 )edit

I double checked my settings and the problem was my eds file. The parsed value "Number of entries" was not set. Thank you for your help!

GuillaumeB gravatar image GuillaumeB  ( 2016-04-14 08:49:22 -0600 )edit

Hello, how do you configure the mapping inside the EDS file? Once configured, to send a PDO you still have to use the srv_set_object (or srv_get_object) services or you use the socketcan_bridge package to send PDO frames? thanks!

EDIT: the answer to my second question is here but still, How can i do to configure the mapping inside the EDS? it sounds like I have to modify the dictionary directly but, there is a way to do it with the API? like using canopen_master package functions? Thanks

af.villamil231 gravatar image af.villamil231  ( 2019-05-03 11:50:19 -0600 )edit

please don't post new, unrelated questions as a comment in a 3 years old question, which was already resolved.

Mathias Lüdtke gravatar image Mathias Lüdtke  ( 2019-05-03 17:53:02 -0600 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools



Asked: 2016-04-12 03:54:01 -0600

Seen: 411 times

Last updated: Apr 12 '16