基于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
Figure 1-1
2.放置CANopen包
把下载的源码包放在your_working/ros/canopen的路径下解压
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)
特别注意:驱动不要加载两次,不难理解吧
Figure 3-1
特别提醒:
- 安装Viewtool socketCAN驱动ginkgo.ko后,接上CAN 适配器,dmesg就能看到CAN适配器的信息。
- Ifconfig –a的信息:
(如果不能显示网络信息,安装一下net-tools)
Figure 3-2
4. 添加socketcan_vt.cpp/vt.h 及其编译
4.1添加文件
socketcan_vt.cpp、vt.h的对应目录:
Figure 4-1-1
Figure 4-1-2
4.2 修改CMakeLists.txt
Figure 4-2-1
Figure 4-2-2
4.3编译:
(在路径ros/canopen下)
Figure 4-3-1
过程中可能出现的问题及其解决方法:
Figure 4-3-2
4.4 编译完成
(编译期间可以看到我们的目标文件被编译):
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
Figure 5-1
5.2 通过socketcan_bridge socketcan_to_topic_node连接canX通道
Rosrun socketcan_bridge socketcan_to_topic_node
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进行发数:
代码的发送部分:
Figure 5-4-1
发送一波:
Figure 5-4-2
由于代码里面写了数据,终端输入的数据就可以不计了。
接收端的数据(就是另一个CAN适配器B 使用windows端的app来进行控制):
Figure 5-4-3
5.5通过socketcan_interface使用socketcan_dump进行接收数据:
Rosrun socketcan_interface socketcan_dump can1
Figure 5-5-1
发送端(CAN适配器B)的发送图:
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