ros-industrial / ros_canopen

CANopen driver framework for ROS (http://wiki.ros.org/ros_canopen)
GNU Lesser General Public License v3.0
336 stars 271 forks source link

port socketcan_interface to ROS2 #364

Open mathias-luedtke opened 4 years ago

mathias-luedtke commented 4 years ago

mostly based on #359

ToDo:

JWhitleyWork commented 4 years ago

Are you intending this to be a "complete" port for Dashing? If so, we should consider using composable nodes.

mathias-luedtke commented 4 years ago

This is only the non-ROS part, I might add canopen_master and canopen_402 as well. For the ROS-based packages, composable (and managed) nodes seem to be a very good option.

samiamlabs commented 4 years ago

What type of testing do we need to do here? Just manually make sure everything works (with hardware?) or automated tests of some kind?

mathias-luedtke commented 4 years ago

What type of testing do we need to do here?

Hardware tests (or just with vcan) are fine for now :)

mathias-luedtke commented 3 years ago

@Rayman: Did this version work for you?

Rayman commented 3 years ago

Yes, I've just re-verified this. It compiles. There are still some tests that fail (uncrustify), but that could also be fixed later.

mathias-luedtke commented 3 years ago

There are still some tests that fail (uncrustify), but that could also be fixed later.

ROS crystal seems to have a different uncrustify version.. I will will rebase this PR and disable the tests for crystal later.

JWhitleyWork commented 3 years ago

Crystal is EOL so I don't see any reason to have the Crystal builds included.

hellantos commented 3 years ago

There seems to be a problem with the install command in CMakeLists.txt:

55 install(FILES socketcan_interface_plugin.xml DESTINATION share/${PROJECT_NAME}/socketcan_interface_plugin.xml)

At least for me it throws the following error:

Starting >>> socketcan_interface
[Processing: socketcan_interface]                             
--- stderr: socketcan_interface                                
CMake Error at cmake_install.cmake:41 (file):
  file INSTALL destination:
  /home/christoph/ws_ros2/install/socketcan_interface/share/socketcan_interface/socketcan_interface_plugin.xml
  is not a directory.

---
Failed   <<< socketcan_interface [54.9s, exited with code 1]

Summary: 0 packages finished [55.5s]
  1 package failed: socketcan_interface
  1 package had stderr output: socketcan_interface

Not sure if this is only throws an error for me. Simple fix is:

55 install(FILES socketcan_interface_plugin.xml DESTINATION share/${PROJECT_NAME}/)

Tested on Ubuntu 20.04, foxy. Everything else works fine.

Rayman commented 3 years ago

Not sure if this is only throws an error for me. Simple fix is:

55 install(FILES socketcan_interface_plugin.xml DESTINATION share/${PROJECT_NAME}/)

You could also use pluginlib_export_plugin_description_file (see this link

JWhitleyWork commented 3 years ago

@ipa-mdl Please see https://github.com/ipa-mdl/ros_canopen/pull/6. Testing with vcan now.

Rayman commented 3 years ago

Last month I've run this branch on a robot that has a socketcan interface and it works quite well. It's now driving with with navigation2 stack on top.

I think this branch is ready to be merged.

JWhitleyWork commented 3 years ago

As an alternative for anyone who just needs basic SocketCan functionality on ROS2, check out https://github.com/autowarefoundation/ros2_socketcan.

Rayman commented 3 years ago

I think this branch is now ready for merge. Only the crystal CI is failing because the linter behaves differently. But crystal is not supported so it doesn't matter.

joe28965 commented 2 years ago

What's the status of this PR? I also ran this on an actual robot (in Foxy even) and it worked perfectly. It would be great if this could be merged and give some functionality to ros_canopen in ROS 2

amilcarlucas commented 2 years ago

ping. Can someone merge this?

hellantos commented 2 years ago

Just wanted to mention, we have started an effort to create ros2_canopen. An alpha with service interface (no ros2_control) is planned in the next weeks. ros2_control integration will come soon.

Architecture has been restructured and lely_core's canopen stack was integrated. There is no direct can/ros bridge any more, only canopen.

Code is here: https://github.com/ros-industrial/ros2_canopen Documentation is here: https://ros-industrial.github.io/ros2_canopen Example is here: https://github.com/ipa-cmh/trinamic_pd42_can