系列文章目录
前言
一、快速入门
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