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

1 篇文章 0 订阅
1 篇文章 0 订阅

基于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

特别提醒:

  1. 安装Viewtool socketCAN驱动ginkgo.ko后,接上CAN 适配器,dmesg就能看到CAN适配器的信息。
  2. 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)

socketCAN_vt code: https://github.com/szzhangfq/Viewtool-socketCAN

 

参考文献:

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

  • 13
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
ROS中使用SocketCAN实现CAN通信需要经过以下步骤: 1. 确认你的计算机已经装好了SocketCAN的驱动程序。你可以通过终端输入以下命令来检查: ``` lsmod | grep can ``` 如果你的系统中已经安装了can驱动,那么你应该会看到一些输出。 2. 确认你的CAN适配器已经连接到计算机并且被正确识别。你可以通过终端输入以下命令来检查: ``` dmesg | grep can ``` 如果你的CAN适配器被成功识别,你应该可以看到一些输出。 3. 创建一个CAN接口。可以通过以下命令创建: ``` sudo ip link set can0 up type can bitrate 500000 ``` 其中,can0是你想要创建的CAN接口的名称,500000是CAN的位速率。 4. 确认CAN接口已经创建成功。你可以通过以下命令检查: ``` ip link show can0 ``` 如果CAN接口已经创建成功,你应该可以看到一些输出。 5. 在ROS中使用SocketCAN实现CAN通信。可以使用can_msgs中的ros节点来发送和接收CAN消息。首先,你需要安装can_msgs: ``` sudo apt-get install ros-<distro>-can-msgs ``` 注意,<distro>应该替换为你正在使用的ROS发行版的名称,例如,melodic。 然后,你可以使用candump命令来监听CAN接口的消息: ``` candump can0 ``` 或者,你可以使用cansend命令来发送CAN消息: ``` cansend can0 123#1122334455667788 ``` 其中,123是CAN ID,1122334455667788是数据。 最后,你可以使用ros节点来发送和接收CAN消息。可以参考can_msgs中的例子来编写ROS节点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值