基于ROS+CANopen的SocketCAN驱动在Ubuntu下的应用说明

基于ROS+CANopen的SocketCAN驱动在Ubuntu20.04 / 18.04上的应用说明

 

摘要(Abstract、keywords)

在Ubuntu 20.04或者18.04里,运用ROS下的CANopen消息机制,Viewtool USB-CAN适配器使用SocketCAN驱动对CAN网络的控制说明.

关键词:ROS,CANopen,SocketCAN,驱动Ginkgo.ko,CAN.

 

介绍(Introduction)

  • 下载CANopen包.
  • 配置CANopen包.
  • 加载Viewtool SocketCAN驱动及其使用CAN-utils测试.
  • 添加socketcan_vt.cpp/vt.h 及其编译.
  • 测试canopen_interface socketcan_vt及socketcan_dump.

 

正文(Text):

1.下载CANopen包

下载canopen源码包(http://wiki.ros.org/ros_canopen)

 

https://github.com/ros-industrial/ros_canopen.git

基于ROS+CANopen的SocketCAN驱动在Ubuntu下的应用说明

Figure 1-1

2.放置CANopen包

把下载的源码包放在your_working/ros/canopen的路径下解压

基于ROS+CANopen的SocketCAN驱动在Ubuntu下的应用说明

 

Figure 2-1

 

3.加载Viewtool socketCAN驱动及其使用CAN-utils测试

根据自己的系统选择不同版本的驱动(Viewtool socketCAN驱动下载:

http://www.viewtool.com/index.php/22-2016-07-29-02-11-32/308-ginkgo-socketcan-software-download)

 

这一步主要是交叉验证socketCAN的驱动是工作的,本篇主要是介绍ROS CANopen下的工作机制,略过具体验证步骤。

(具体验证参阅: http://www.viewtool.com/wiki/index.php/SocketCAN_Application_Note)

特别注意:驱动不要加载两次,不难理解吧

基于ROS+CANopen的SocketCAN驱动在Ubuntu下的应用说明

Figure 3-1

特别提醒:

  1. 安装Viewtool socketCAN驱动ginkgo.ko后,接上CAN 适配器,dmesg就能看到CAN适配器的信息。
  2. Ifconfig  –a的信息:

(如果不能显示网络信息,安装一下net-tools)

基于ROS+CANopen的SocketCAN驱动在Ubuntu下的应用说明

Figure 3-2

 

 

4. 添加socketcan_vt.cpp/vt.h 及其编译

4.1添加文件

socketcan_vt.cpp、vt.h的对应目录:

基于ROS+CANopen的SocketCAN驱动在Ubuntu下的应用说明

Figure 4-1-1

基于ROS+CANopen的SocketCAN驱动在Ubuntu下的应用说明

 Figure 4-1-2

 

4.2 修改CMakeLists.txt

基于ROS+CANopen的SocketCAN驱动在Ubuntu下的应用说明

 

Figure 4-2-1

基于ROS+CANopen的SocketCAN驱动在Ubuntu下的应用说明

Figure 4-2-2

 

4.3编译:

(在路径ros/canopen下)

基于ROS+CANopen的SocketCAN驱动在Ubuntu下的应用说明

Figure 4-3-1

 

过程中可能出现的问题及其解决方法:

基于ROS+CANopen的SocketCAN驱动在Ubuntu下的应用说明

Figure 4-3-2

 

4.4 编译完成

(编译期间可以看到我们的目标文件被编译):

基于ROS+CANopen的SocketCAN驱动在Ubuntu下的应用说明

Figure4-4-1

 

(如果没有编译我们的文件,可以把CMakeLists.txt里面的内容更新一下,重新编译就可以)。

 

5.测试canopen_interface socketcan_vt

CAN网络硬件连接方式:

两台viewtool 的USB-CAN适配器(A, B), 构建成一个最简化的CAN网络,模拟实际CAN网络,以实现通过CAN总线实现控制网络节点的目的。

 

CAN网络软件控制:

一端(CAN适配器A)采用ROS来控制收发,另一端(CAN适配器B)采用windows的App来控制收发.

 

5.1 启动 ROSCORE

sudo roscore

基于ROS+CANopen的SocketCAN驱动在Ubuntu下的应用说明

Figure 5-1

 

5.2 通过socketcan_bridge socketcan_to_topic_node连接canX通道

Rosrun socketcan_bridge socketcan_to_topic_node

基于ROS+CANopen的SocketCAN驱动在Ubuntu下的应用说明

Figure 5-2

PS:

每一步都请看一下,知道连上一个通道。

确定编译过,就是source一下的事情。

 

5.3 初始化配置:

 设置两个通道波特率 channel 0, channel 1:

sudo ip link set can0 type can bitrate 500000

sudo ip link set can1 type can bitrate 500000

 

激活两个通道channel 0, channel 1:

sudo ip link set can0 up

sudo ip link set can1 up

 

5.4 通过socketcan_interface使用socketcan_vt进行发数:

代码的发送部分:

 

基于ROS+CANopen的SocketCAN驱动在Ubuntu下的应用说明

Figure 5-4-1

发送一波:

基于ROS+CANopen的SocketCAN驱动在Ubuntu下的应用说明

Figure 5-4-2

 

由于代码里面写了数据,终端输入的数据就可以不计了。

接收端的数据(就是另一个CAN适配器B 使用windows端的app来进行控制):

基于ROS+CANopen的SocketCAN驱动在Ubuntu下的应用说明

Figure 5-4-3

 

5.5通过socketcan_interface使用socketcan_dump进行接收数据:

Rosrun socketcan_interface socketcan_dump can1

基于ROS+CANopen的SocketCAN驱动在Ubuntu下的应用说明

Figure 5-5-1

发送端(CAN适配器B)的发送图:

基于ROS+CANopen的SocketCAN驱动在Ubuntu下的应用说明

Figure 5-5-2

 

结论

按照这样的步骤就可以顺利完成:

在ROS下,使用CANopen消息机制,通过viewtool的socketcan对CAN设备在CAN网络中的控制。

(如果不愿意自己去下载,安装等繁琐的操作,可以直接下载VMware workstation版本的虚拟机或者通过虚拟机备份出来的iso自己还原系统进行实践,

其中包含: Can-utils,socketCAN的驱动-ginkgo.ko,ROS, CANopen包, 还缺什么?请留言)

(链接:https://pan.baidu.com/s/1bBCakQi0PT6BVKR_bLm0kQ 提取码:1234)

 

参考文献:

http://wiki.ros.org/ros_canopen

 

特别鸣谢以下朋友的建议及其博客:

 

  • 北京理工大学 王仕豪
  • 特斯联北京科技有限公司 赵树立
  • 浙江工业大学 一叶执念的博客

       https://blog.csdn.net/YiYeZhiNian/article/details/102730879

  • 程序员大本营的博客:

       https://www.pianshen.com/article/7613822784/

  • xyzxyz576的博客:

https://blog.csdn.net/u011304078/article/details/102986429?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-11.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-11.control

  • blinkroad的博客:

       https://blog.csdn.net/ost_csdn/article/details/104009843

上一篇:【力扣】589. N 叉树的前序遍历


下一篇:《程序员英语词汇1700词》筛选不熟悉词汇整理【5/14】