ROS2 CANopen 使用教程(一)

简介: ROS2 CANopen 使用教程

系列文章目录


前言


一、快速入门

1.1 安装

       将 ros2_canopen 克隆到 ROS2 工作区的源文件夹中,安装依赖项并使用 colcon 构建,就大功告成了。

git clone https://github.com/ros-industrial/ros2_canopen.git
cd ..
rosdep install --from-paths src/ros2_canopen --ignore-src -r -y
colcon build

1.2 设置 CAN 控制器

       选项 1:虚拟 CANController

sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set vcan0 txqueuelen 1000
sudo ip link set up vcan0

       选项 2:Peak CANController

sudo modprobe peak_usb
sudo ip link set can0 up type can bitrate 1000000
sudo ip link set can0 txqueuelen 1000
sudo ip link set up can0

       比特率取决于总线和设备的能力。

       选项 3:candleLight USB-CAN 适配器

sudo modprobe gs_usb
sudo ip link set can0 up type can bitrate 500000
sudo ip link set can0 txqueuelen 1000
sudo ip link set up can0

       比特率取决于总线和设备的性能。

       选项 4:将这些步骤适用于其他 socketcan 设备

1.3 运行示例

       为了试用该库,我们在 canopen_tests 目录中提供了一些示例。如果您已启动 vcan0 接口,则可以运行这些示例。

1.3.1 服务接口

ros2 launch canopen_tests cia402_setup.launch.py

1.3.2 托管服务接口

ros2 launch canopen_tests cia402_lifecycle_setup.launch.py

1.3.3 ROS2 控制

       Proxy 设置

ros2 launch canopen_tests canopen_system.launch.py

       CiA402 设置

ros2 launch canopen_tests cia402_system.launch.py

       机器人设置

ros2 launch canopen_tests robot_control_setup.launch.py

二、用户指南

2.1 操作

       ros2_canopen 堆栈有三种不同的使用方式:

  • - 标准节点容器
  • - 托管节点容器
  • - 标准节点的 ros2_control 系统接口

2.1.1 简单节点容器

       标准节点容器模式将主节点和所有从属驱动节点捆绑在一个称为设备容器的专用容器中。所有节点都是简单的 ROS 2 节点,并提供发布、订阅和服务接口。一旦设备容器启动,所有节点都会被调出并准备就绪。

       目的:简单节点容器适用于用户需要简单易用的启动界面,且不需要 ros2_control 提供任何实时控制功能的应用。

2.1.2 托管节点容器

       托管节点容器的属性与标准节点容器相同。不同的是,所有节点都是生命周期节点,并且有一个名为生命周期管理器的特殊节点。用户可以使用生命周期管理器来控制容器中所有节点的生命周期。

       目的:受管节点容器适用于用户希望拥有比杀死和重启容器更多运行时恢复选项的应用程序。

2.1.3 ROS 2 控制系统接口

       ros2_control 接口目前建立在简单节点容器之上。除了标准节点容器之外,ros2_control 系统接口还提供了一个硬件接口,可用于控制总线上的设备。目前,我们提供了三种不同的系统接口:

  • - canopen_ros2_control/CANopenSystem
  • - canopen_ros2_control/CIA402System
  • - canopen_ros2_control/RobotSystem

       目的:ROS 2 控制系统接口适用于需要低延迟的控制应用程序。

2.2 配置包

       配置包包含 CANopen 协议栈的一个或多个配置。配置包需要包含每个设备的 EDS/DCF 文件、总线配置以及不同配置的启动文件。

       因此,配置包的结构应如下所示:

{package_name}
├── config
│   ├── {bus_config_name_1}
│   |   ├── bus.yml
│   |   ├── {device1}.eds
│   |   ├── {device...}.eds
│   |   └── {slave_n}.eds
│   └── {bus_config_name_2}
│       ├── bus.yml
│       ├── {device1}.eds
│       ├── {device...}.eds
│       └── {slave_n}.eds
├── launch
│   ├── {bus_config_name_1}.launch.py
|   └── {bus_config_name_1}.launch.py
├── CMakeLists.txt
└── package.xml

2.3 总线配置文件

       ros2_canopen 堆栈依赖于一个 YAML 配置文件,该文件用于配置总线拓扑和指定每个设备的配置。该文件详细说明了哪些设备连接到总线、哪些 EDS/DCF 文件适用于这些设备、哪些 EDS/DCF 文件的参数应被覆盖以及哪些驱动程序应被用于控制这些设备。

2.3.1 结构

       YAML 配置文件包含以下部分:

options: # General options especially dcf_path
  [configuration item]: [value]
master: # The configuration of the master
  [configuration item]: [value]
  [...]
defaults: # Defaults that apply to all slave nodes
  [configuration item]: [value]
  []
nodes: # Configurations for all slave nodes
  - [device_name]:
      [configuration item]: [value]
      [...]

2.3.2 选项部分

       选项部分包含一般选项。目前只有以下选项。

选项配置

配置项 描述

dcf_path

运行时生成的 .bin 文件所在的目录。您可以将其设置为"@BUS_CONFIG_PATH@",这样 cmake 就会自动生成该文件。

2.2.4 Master 部分

       Master 部分有许多配置选项。这些选项并非 ros2_canopen 独有,而是来自 lely 核心库。下面是可能的配置项列表。

Master Configuration

配置项目 描述

node_id(节点 ID)

节点 ID(默认值:255)

driver(驱动程序)

The fully qualified class name of the master to use.

(要使用的主控程序的全限定类名。)

package(软件包)

The ros2 package name in which the master class can be found.

(主站类所在的 ros2 软件包名称。)

baudrate(波特率)

The baudrate in kbit/s (default: 1000)

(以 kbit/s 为单位的波特率(默认值:1000))

vendor_id

The vendor-ID (default: 0x00000000)

(供应商标识(默认值:0x00000000))

product_code

The product code (default: 0x00000000)

(产品编码(默认值:0x00000000))

revision_number

The revision number (default: 0x00000000).

(版本号(默认值:0x00000000)。)

serial_number

The serial number (default: 0x00000000).

(序列号(默认值:0x00000000)。)

heartbeat_multiplier

(心跳倍增器)

The multiplication factor used to obtain the slave heartbeat consumer time from the master heartbeat producer time (default: see options section).

(用于从主心跳生产者时间获取从心跳消费者时间的乘法系数(默认值:参见选项部分)。)

heartbeat_consumer

(心跳消费者)

Specifies whether the master should monitor the heartbeats of the slaves (default: true).

(指定主站是否应监控从站的心跳(默认值:true)。)

heartbeat_producer

(心跳生产者)

The heartbeat producer time in ms (default: 0).

(以毫秒为单位的心跳产生器时间(默认值:0)。)

emcy_inhibit_time

The EMCY inhibit time in multiples of 100 μs (default: 0, see object 1015).

(以 100 μs 的倍数表示的 EMCY 抑制时间(默认值:0,参见对象 1015)。)

sync_period

(同步周期)

The SYNC interval in μs (default: 0).

(同步时间间隔,单位为 μs(默认值:0)。)

sync_window

(同步窗口)

The SYNC window length in μs (default: 0, see object 1007).

(同步窗口长度,单位为 μs(默认值:0,参见对象 1007)。)

sync_overflow

The SYNC counter overflow value (default: 0, see object 1019).

(SYNC 计数溢出值(默认值:0,参见对象 1019)。)

error_behavior

A dictionary of error behaviors for different classes or errors (default: {1: 0x00}, see object 1029).

(不同类别或错误的错误行为字典(默认值:{1: 0x00},请参见对象 1029)。)

nmt_inhibit_time

The NMT inhibit time in multiples of 100 μs (default: 0, see object 102A).

(以 100 μs 的倍数表示的 NMT 抑制时间(默认值:0,参见对象 102A)。)

start

Specifies whether the master shall switch into the NMT operational state by itself (default: true, see bit 2 in object 1F80).

(指定主站是否应自行切换到 NMT 运行状态(默认值:true,参见对象 1F80 中的第 2 位)。)

start_nodes

Specifies whether the master shall start the slaves (default: true, see bit 3 in object 1F80).

(指定主站是否应启动从站(默认值:true,参见对象 1F80 中的第 3 位)。)

start_all_nodes

Specifies whether the master shall start all nodes simultaneously (default: false, see bit 1 in object 1F80).

(指定主站是否同时启动所有节点(默认值:false,参见对象 1F80 中的第 1 位)。)

reset_all_nodes

Specifies whether all slaves shall be reset in case of an error event on a mandatory slave (default: false, see bit 4 in object 1F80).

(指定在强制从节点发生错误事件时是否重置所有从节点(默认值:false,参见对象 1F80 中的第 4 位)。)

stop_all_nodes

Specifies whether all slaves shall be stopped in case of an error event on a mandatory slave (default: false, see bit 6 in object 1F80).

(指定在强制从属设备发生错误事件时是否停止所有从属设备(默认值:false,参见对象 1F80 中的第 6 位)。)

boot_time

The timeout for booting mandatory slaves in ms (default: 0, see object 1F89).

(启动强制从属设备的超时时间,以毫秒为单位(默认值:0,参见对象 1F89)。)

boot_timeout

The timeout for booting all slaves in ms (default: 2000ms).

(启动所有从属设备的超时时间,以毫秒为单位(默认值:2000ms)。)

ROS2 CANopen 使用教程(二)+https://developer.aliyun.com/article/1585396

目录
相关文章
|
2月前
|
存储 自然语言处理 机器人
ROS2教程06 ROS2行动
这篇文章是关于ROS2(Robot Operating System 2)行动(Action)通信机制的教程,包括行动的概念、特点、命令行工具的使用,以及如何编写行动的客户端和服务器代码,并介绍了如何测试行动通信。
76 4
ROS2教程06 ROS2行动
|
2月前
|
机器人 Shell Python
ROS2教程05 ROS2服务
这篇文章是关于ROS2(Robot Operating System 2)服务的教程,涵盖了服务的概念、特性、命令行工具的使用,以及如何编写服务的服务器和客户端代码,并提供了测试服务通信机制的示例。
46 4
ROS2教程05 ROS2服务
|
2月前
|
传感器 算法 数据可视化
ROS2教程04 ROS2话题
这篇文章是关于ROS2(Robot Operating System 2)的教程,主要介绍了ROS2中话题的概念、特性、使用方式,以及如何编写发布者和订阅者的代码。
49 3
ROS2教程04 ROS2话题
|
2月前
|
存储 Ubuntu 安全
ROS2教程02 ROS2的安装、配置和测试
本文是关于ROS2(机器人操作系统2)的安装、配置和测试的教程。内容包括使用一键安装脚本快速安装ROS2 Humble版,手动安装步骤,设置语言环境、添加软件源、更新软件包、安装ROS2桌面版和开发工具,配置ROS2环境,创建工作空间,配置ROS2领域以避免网络冲突,以及如何删除ROS2。此外,还包括了测试ROS2是否安装成功的两个案例:基本的Topic通信测试和使用Turtlesim演示程序。适用于Ubuntu 22.04操作系统。
86 1
ROS2教程02 ROS2的安装、配置和测试
|
2月前
|
传感器 存储 Ubuntu
Azure Kinect DK + ROS1 Noetic使用教程
本文是Azure Kinect DK在Ubuntu20.04下配合ROS1 Noetic使用的教程,内容包括一键安装脚本、硬件介绍、安装SDK相关软件包、设置Udev规则、SDK基本测试、DK ROS基本测试,以及存在的一些重要缺陷和相关参考文献。教程详细指导了如何配置和使用Azure Kinect DK,提供了安装步骤和解决常见问题的方法。
45 1
Azure Kinect DK + ROS1 Noetic使用教程
|
2月前
|
传感器 自然语言处理 机器人
ROS2教程03 ROS2节点
本文是关于ROS2(机器人操作系统2)节点的教程,涵盖了节点的概念、特性、使用方法,以及如何编写、测试和使用ROS2节点相关的命令行工具。文章介绍了节点的独立性、任务执行、跨硬件分布和多语言编写能力。详细解释了如何启动节点、查看节点信息、编写节点代码(包括面向过程和面向对象的方法),以及如何为功能包添加依赖和入口点。此外,还探讨了重映射节点名称和使用节点命令行工具的方法,如 `ros2 node info` 和 `ros2 node list`。适合已安装ROS2 Humble和Ubuntu 22.04操作系统,并具有Shell基础知识的读者学习。
31 1
|
2月前
|
算法 数据可视化 机器人
ROS2教程01 ROS2介绍
本文是ROS2(机器人操作系统的下一代)的介绍教程,内容包括ROS2的诞生背景、核心功能、特点、框架以及与ROS1的比较。文章涵盖了ROS2的通信系统、框架和工具、生态系统、全球性社区支持、完全开源、跨平台特性、多机协同能力、实时系统支持和更强的稳定性。此外,还提供了ROS2架构的详细介绍资源链接,适合对ROS2感兴趣的读者学习和了解。
70 1
|
2月前
|
机器人 Shell 开发者
ROS2教程08 ROS2的功能包、依赖管理、工作空间配置与编译
这篇文章是关于ROS2(Robot Operating System 2)中功能包、依赖管理、工作空间配置和编译的教程,涵盖了ROS2工作空间的概念、如何获取和安装功能包的依赖、构建工作空间的步骤,以及如何创建和管理ROS2功能包,包括使用命令行工具对功能包进行操作的方法。
123 0
ROS2教程08 ROS2的功能包、依赖管理、工作空间配置与编译
|
2月前
|
编解码 机器人 C++
ROS2教程07 ROS2自定义消息接口
这篇文章是关于如何在ROS2(Robot Operating System 2)中创建和使用自定义消息类型的教程,包括消息类型的定义、特点、命令行工具的使用,以及如何编写和测试自定义消息类型接口的步骤。
24 0
ROS2教程07 ROS2自定义消息接口
|
2月前
|
传感器 NoSQL 算法
ROS Moveit 配置全网最详细教程
本文是关于ROS Moveit配置的全网最详细教程,提供了一键安装脚本,以及如何使用Moveit进行机器人运动规划的详细步骤和说明。文中还深入解析了Moveit的配置包文件、Moveit的源码,以及如何使用不同的运动规划算法(如CHOMP、LERP、STOMP)进行路径规划。
69 0
ROS Moveit 配置全网最详细教程

推荐镜像

更多
下一篇
无影云桌面