{"id":21082461,"url":"https://github.com/ros-industrial/ros2_canopen","last_synced_at":"2025-04-12T15:38:02.447Z","repository":{"id":37341770,"uuid":"474912556","full_name":"ros-industrial/ros2_canopen","owner":"ros-industrial","description":"CANopen driver framework for ROS2","archived":false,"fork":false,"pushed_at":"2025-03-31T19:25:54.000Z","size":42603,"stargazers_count":179,"open_issues_count":70,"forks_count":76,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-04-03T17:12:45.660Z","etag":null,"topics":["canopen","robotics","ros2"],"latest_commit_sha":null,"homepage":"https://ros-industrial.github.io/ros2_canopen/manual/rolling/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ros-industrial.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-03-28T08:30:05.000Z","updated_at":"2025-03-31T19:25:01.000Z","dependencies_parsed_at":"2023-10-14T19:25:32.248Z","dependency_job_id":"8545cf20-aa8b-4dbe-86d3-3a1aa5c6e053","html_url":"https://github.com/ros-industrial/ros2_canopen","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ros-industrial%2Fros2_canopen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ros-industrial%2Fros2_canopen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ros-industrial%2Fros2_canopen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ros-industrial%2Fros2_canopen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ros-industrial","download_url":"https://codeload.github.com/ros-industrial/ros2_canopen/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248590558,"owners_count":21129846,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["canopen","robotics","ros2"],"created_at":"2024-11-19T20:14:10.526Z","updated_at":"2025-04-12T15:38:02.416Z","avatar_url":"https://github.com/ros-industrial.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ROS2 CANopen\n\n## Status\n\n| Build Process | Status |\n|---------------|--------|\n| Industrial CI Build | [![CI Build Status](https://github.com/ros-industrial/ros2_canopen/workflows/rolling/badge.svg?branch=master)](https://github.com/ros-industrial/ros2_canopen/actions) |\n| Documentation Build | [![CI Documentation Status](https://github.com/ros-industrial/ros2_canopen/workflows/Documentation/badge.svg?branch=master)](https://github.com/ros-industrial/ros2_canopen/actions) |\n| Buildfarm Build (rolling) | [![Buildfarm Status](https://build.ros2.org/job/Rdev__ros2_canopen__ubuntu_noble_amd64/badge/icon)](https://build.ros2.org/job/Rdev__ros2_canopen__ubuntu_noble_amd64/) |\n\nThe stack is currently under development and not yet ready for production use.\n\n### Rolling Distribution (Noble \u0026 RHEL9)\n\n| Package                  | Noble (Ubuntu)                                                                                                                  | RHEL9                                                                                                                            |\n|--------------------------|---------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------|\n| canopen_interfaces       | [![Build Status](https://build.ros2.org/job/Rbin_uN64__canopen_interfaces__ubuntu_noble_amd64__binary/badge/icon)](https://build.ros2.org/job/Rbin_uN64__canopen_interfaces__ubuntu_noble_amd64__binary/) | [![Build Status](https://build.ros2.org/job/Rbin_rhel_el964__canopen_interfaces__rhel_9_x86_64__binary/badge/icon)](https://build.ros2.org/job/Rbin_rhel_el964__canopen_interfaces__rhel_9_x86_64__binary/) |\n| lely_core_libraries      | [![Build Status](https://build.ros2.org/job/Rbin_uN64__lely_core_libraries__ubuntu_noble_amd64__binary/badge/icon)](https://build.ros2.org/job/Rbin_uN64__lely_core_libraries__ubuntu_noble_amd64__binary/) | [![Build Status](https://build.ros2.org/job/Rbin_rhel_el964__lely_core_libraries__rhel_9_x86_64__binary/badge/icon)](https://build.ros2.org/job/Rbin_rhel_el964__lely_core_libraries__rhel_9_x86_64__binary/) |\n| canopen_core             | [![Build Status](https://build.ros2.org/job/Rbin_uN64__canopen_core__ubuntu_noble_amd64__binary/badge/icon)](https://build.ros2.org/job/Rbin_uN64__canopen_core__ubuntu_noble_amd64__binary/) | [![Build Status](https://build.ros2.org/job/Rbin_rhel_el964__canopen_core__rhel_9_x86_64__binary/badge/icon)](https://build.ros2.org/job/Rbin_rhel_el964__canopen_core__rhel_9_x86_64__binary/) |\n| canopen_master_driver    | [![Build Status](https://build.ros2.org/job/Rbin_uN64__canopen_master_driver__ubuntu_noble_amd64__binary/badge/icon)](https://build.ros2.org/job/Rbin_uN64__canopen_master_driver__ubuntu_noble_amd64__binary/) | [![Build Status](https://build.ros2.org/job/Rbin_rhel_el964__canopen_master_driver__rhel_9_x86_64__binary/badge/icon)](https://build.ros2.org/job/Rbin_rhel_el964__canopen_master_driver__rhel_9_x86_64__binary/) |\n| canopen_base_driver      | [![Build Status](https://build.ros2.org/job/Rbin_uN64__canopen_base_driver__ubuntu_noble_amd64__binary/badge/icon)](https://build.ros2.org/job/Rbin_uN64__canopen_base_driver__ubuntu_noble_amd64__binary/) | [![Build Status](https://build.ros2.org/job/Rbin_rhel_el964__canopen_base_driver__rhel_9_x86_64__binary/badge/icon)](https://build.ros2.org/job/Rbin_rhel_el964__canopen_base_driver__rhel_9_x86_64__binary/) |\n| canopen_proxy_driver     | [![Build Status](https://build.ros2.org/job/Rbin_uN64__canopen_proxy_driver__ubuntu_noble_amd64__binary/badge/icon)](https://build.ros2.org/job/Rbin_uN64__canopen_proxy_driver__ubuntu_noble_amd64__binary/) | [![Build Status](https://build.ros2.org/job/Rbin_rhel_el964__canopen_proxy_driver__rhel_9_x86_64__binary/badge/icon)](https://build.ros2.org/job/Rbin_rhel_el964__canopen_proxy_driver__rhel_9_x86_64__binary/) |\n| canopen_402_driver       | [![Build Status](https://build.ros2.org/job/Rbin_uN64__canopen_402_driver__ubuntu_noble_amd64__binary/badge/icon)](https://build.ros2.org/job/Rbin_uN64__canopen_402_driver__ubuntu_noble_amd64__binary/) | [![Build Status](https://build.ros2.org/job/Rbin_rhel_el964__canopen_402_driver__rhel_9_x86_64__binary/badge/icon)](https://build.ros2.org/job/Rbin_rhel_el964__canopen_402_driver__rhel_9_x86_64__binary/) |\n| canopen_ros2_control     | [![Build Status](https://build.ros2.org/job/Rbin_uN64__canopen_ros2_control__ubuntu_noble_amd64__binary/badge/icon)](https://build.ros2.org/job/Rbin_uN64__canopen_ros2_control__ubuntu_noble_amd64__binary/) | [![Build Status](https://build.ros2.org/job/Rbin_rhel_el964__canopen_ros2_control__rhel_9_x86_64__binary/badge/icon)](https://build.ros2.org/job/Rbin_rhel_el964__canopen_ros2_control__rhel_9_x86_64__binary/) |\n| canopen_ros2_controllers | [![Build Status](https://build.ros2.org/job/Rbin_uN64__canopen_ros2_controllers__ubuntu_noble_amd64__binary/badge/icon)](https://build.ros2.org/job/Rbin_uN64__canopen_ros2_controllers__ubuntu_noble_amd64__binary/) | [![Build Status](https://build.ros2.org/job/Rbin_rhel_el964__canopen_ros2_controllers__rhel_9_x86_64__binary/badge/icon)](https://build.ros2.org/job/Rbin_rhel_el964__canopen_ros2_controllers__rhel_9_x86_64__binary/) |\n| canopen_tests            | [![Build Status](https://build.ros2.org/job/Rbin_uN64__canopen_tests__ubuntu_noble_amd64__binary/badge/icon)](https://build.ros2.org/job/Rbin_uN64__canopen_tests__ubuntu_noble_amd64__binary/) | [![Build Status](https://build.ros2.org/job/Rbin_rhel_el964__canopen_tests__rhel_9_x86_64__binary/badge/icon)](https://build.ros2.org/job/Rbin_rhel_el964__canopen_tests__rhel_9_x86_64__binary/) |\n| canopen_utils            | [![Build Status](https://build.ros2.org/job/Rbin_uN64__canopen_utils__ubuntu_noble_amd64__binary/badge/icon)](https://build.ros2.org/job/Rbin_uN64__canopen_utils__ubuntu_noble_amd64__binary/) | [![Build Status](https://build.ros2.org/job/Rbin_rhel_el964__canopen_utils__rhel_9_x86_64__binary/badge/icon)](https://build.ros2.org/job/Rbin_rhel_el964__canopen_utils__rhel_9_x86_64__binary/) |\n\n## Documentation\nThe documentation consists of two parts: a manual and an api reference.\nThe documentation is built for rolling (master), iron and humble and hosted on github pages.\nOlder ROS 2 releases are EOL and are not supported anymore.\n\n### Rolling\n* Manual: https://ros-industrial.github.io/ros2_canopen/manual/rolling/\n* API reference: https://ros-industrial.github.io/ros2_canopen/api/rolling/\n\n### Iron\n* Manual: https://ros-industrial.github.io/ros2_canopen/manual/iron/\n* API reference: https://ros-industrial.github.io/ros2_canopen/api/iron/\n\n### Humble\n* Manual: https://ros-industrial.github.io/ros2_canopen/manual/humble/\n* API reference: https://ros-industrial.github.io/ros2_canopen/api/humble/\n\n## Features\nThese are some of the features this stack implements. For further information please refer to the documentation.\n\n* **YAML-Bus configuration**\n  This canopen stack enables you to configure the bus using a YAML file. In this file you define the nodes that are connected to the bus by specifying their node id, the corresponding EDS file and the driver to run for the node. You can also specify further parameters that overwrite EDS parameters or are inputs to the driver.\n* **Service based operation**\n  The stack can be operated using standard ROS2 nodes. In this case the device container will load the drivers for master and slave nodes. Each driver will be visible as a\n  node and expose a ROS 2 interface. All drivers are brought up when the device manager is launched.\n* **Managed service based operation**\n  The stack can be opeprated using managed ROS2 nodes. In\n  this case the device container will load the drivers for master and slave nodes based on the bus configuration. Each driver will be a lifecycle node and expose a ROS 2 interface. The lifecycle manager can be used to bring all\n  device up and down in the correct sequence.\n* **ROS2 control based operation**\n  Currently, multiple ros2_control interfaces are available. These can be used for controlling CANopen devices. The interfaces are:\n  * canopen_ros2_control/CANopenSystem\n  * canopen_ros2_control/CIA402System\n  * canopen_ros2_control/RobotSystem\n* **CANopen drivers**\n  Currently, the following drivers are available:\n    * ProxyDriver\n    * Cia402Driver\n\n\n## Post testing\nTo test stack after it was built from source you should first setup a virtual can network.\n```bash\nsudo modprobe vcan\nsudo ip link add dev vcan0 type vcan\nsudo ip link set vcan0 txqueuelen 1000\nsudo ip link set up vcan0\n```\nThen you can launch a managed example\n```bash\nros2 launch canopen_tests cia402_lifecycle_setup.launch.py\nros2 lifecycle set /lifecycle_manager configure\nros2 lifecycle set /lifecycle_manager activate\n```\n\nOr you can launch a standard example\n```bash\nros2 launch canopen_tests cia402_setup.launch.py\n```\n\nOr you can launch a ros2_control example\n```bash\nros2 launch canopen_tests robot_control_setup.launch.py\n```\n\n## Contributing\nThis repository uses `pre-commit` for code formatting.\nThis program has to be setup locally and installed inside the repository.\nFor this execute in the repository folder following commands:\n```\nsudo apt install -y pre-commit\npre-commit install\n```\nThe checks are automatically executed before each commit.\nThis helps you to always commit well formatted code.\nTo run all the checks manually use `pre-commit run -a` command.\nFor the other options check `pre-commit --help`.\n\nIn a case of an \"emergency\" you can avoid execution of pre-commit hooks by adding `-n` flag to `git commit` command - this is NOT recommended to do if you don't know what are you doing!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fros-industrial%2Fros2_canopen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fros-industrial%2Fros2_canopen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fros-industrial%2Fros2_canopen/lists"}