ROS的ros_canopen调试

Ros_canopen是ros支持can通信的package

链接:

http://wiki.ros.org/ros_canopen?distro=indigo

Ros_canopen包结构如下

SocketCAN是一组开源的CAN驱动程序和网络堆栈,由Volkswagen Research提供给Linux内核。以前称为低级别CAN框架(LLCF)

1. can_msgs

就是一个数据类型

2. canopen_402

CiA402是基于CANOPEN的电机控制驱动代码和通信层的接口。这个程序包包含了CiA 402 DSP协议的实现。它只是通过对象进行通信(canopen_master,不需要直接的CAN通信)。

该包支持所有标准的驱动模式,以下是通过状态机控制的不同的控制模式

通过状态机的切换,可以调节不同的控制模式。

以上说的其实是通过can对于机械臂的控制的模式的选择,以上模式并不一定适用于所有的机械臂控制器或者马达。

 

我的理解是canopen_402就是一个模式管理的状态机包,用来配置can的工作模式。

 

3. canopen_chain_node

该package包含与socketcan_interface的接口,与canopen_master的接口。可以认为是一个独立的节点。该包的功能是管理一个具有单个或者多个节点的can bus总线。

配置可以分为不同的部分。首先设置总线,所有节点共享这些设置。然后必须配置它们的CANopen和ROS接口。所有参数都必须加载到节点的私有名称空间中。

CANopen Bus layer 总线设置包含can接口(socketcan_interface)以及共享总线的设置(canopen_master)

Node layer所有的节点都会在list在节点参数表中

 

我理解的是,此节点会对can做基础的配置工作。

 

4. canopen_master

该包是CANopen DS 301 协议的master实现,它提供相关的库与canopen设备进行连接,并且通过高优先级访问其他设备的数据对象。

该功能实现可以支持大部分的canopen的接口与服务。

SDO,client/server 接口读写

PDO,publisher/subscriber 接口读写

 

我理解的这部分就是直接对接can总线设备的模块。

 

5. canopen_motor_node

该包为canopen 402提供ros_controller接口。它基于canopen_chain_node并集成了它的所有接口。

该节点包含一个controller_manager实例,可用于派生与controller_interface兼容的控制器。根据电机设备不同,支持不同的接口。

每个节点的驱动的位置、速度、力会被记录在hardware_interface::JointStateHandle 数据类型内,实际的值由转换函数决定。

Joint limits是从URDF文件或者其他途径读取,然后通过joint_limits_interface控制完成

https://github.com/ros-controls/ros_control/wiki/joint_limits_interface.

为了让canopen_motor_node工作,每个节点都有一个联合参数,该参数默认为CANopen节点名,并在ros_control接口中用作联合名

6. socketcan_bridge

这个模块的包提供从socketcan到ros tospic的发布can 帧信息的功能。内部使用ros_canopen的socketcan_interface,可以支持处理基本帧与扩展帧两种形式。

功能的实现靠socketcan bridge node, socketcan to topic node 和topic to socketcan node三个节点实现。

socketcan bridge node 从SocketCAN 设备接收frames并将之publishes到topic上,同时监听can的信息并将之送给SocketCAN;发送与接收的信息格式在can_msgs文件夹。

socketcan_to_topic_node也是从SocketCAN 设备接收frames并将之publishes到topic上,但是没有监听功能。

topic_to_socketcan_node 接收topic信息发送给SocketCAN设备。

 

7. socketcan_interface

该包提供一个通用的can接口类型,并提供一个基于SocketCAN的驱动应用的实现。

StateInterface: Listener interface for the state of the driver,监测驱动的状态

CommInterface: Listener interface for receiving messages and send functionality,检测收发功能

DriverInterface: inherits from both and adds management interfaces,继承并添加管理接口

 

我理解,这个包是涉及硬件信息的,也就是该包是一个硬件接口。

 

注:ros canopen模块弄起来太费劲,所以最后我放弃了,可以尝试lbpcan驱动,不过libpcan的硬件比较贵,国外需要3000,国内仿造的也要700-800的样子,还有一种方式就是采用最常见的can模块,但是driver需要自己编写,与canopen有点相同,如果只是采用can的简单读写功能的话,我认为自己编写反而比用ros canopen更容易一些;

你可能感兴趣的:(CanOpen通讯专栏)