前言:由于在使用TX2的过程中,需要使用CAN通讯的方式使我的机器人底盘与TX2进行命令收发,而我的其他传感器都建立在ROS框架下,为了以后能使数据交互我希望把底盘数据也放到我的ROS框架里面。
1.ros_canopen
ros_canopen是ROS系统专门为在ROS框架内启动CAN节点所做的一个软件包,在ROS节点中使用CAN时,需要首先将CAN口挂载到ROS中,具体可以参考链接:
https://blog.csdn.net/YiYeZhiNian/article/details/100296371
后面的echo命令也是很有效的,可以帮助我们确认节点是否连接,因为你在通过终端发送CAN命令的时候rostopic echo 同样是可以监控到的。
2.socketcan
在ROS中发布CAN命令主要采用的是套接字的方式进行发送的,这里主要的思想就是我需要建立一个节点,将我的套接字放到这个节点中,当我启动这个节点的时候节点中的套接字自动运行并将CAN数据发送出去,具体的套接字的结构可以参考下面的链接:
https://blog.csdn.net/lybhit/article/details/78663347
或者
https://blog.csdn.net/yuanlulu/article/details/7220060
这些对于socketcan的用法来说讲的很详细了,但是需要注意的是这些都是讲socketcan本身的用法的,如果要放在ROS里面去用的话写cpp文件的时候要记得外层的ROS框架是不可少的。
3.实现流程:
在编写好自己的ROS节点并且通过编译的情况下:
(1)启动roscore
(2)新建终端,挂载can0:
rosrun socketcan_bridge socketcan_to_topic_node
(3)启动can0监控:
rostopic echo /received_messages
(4)启动带socketcan的节点文件,这里我是在amin文件夹下的hello.cpp文件内修改的:
rosrun amin hello
正常情况下如果socketcan没有写错的话在rostopic echo里面可以有数据反馈的,包括了can0发送出去的数据以及can0接收到的数据。
附上一段关于socketcan的程序以及监测结果:
由于挺多人问我要源码的,最近有空上传了一份在下载中心,这个代码比较简单,是实现最基本的通讯的,如果想实现更复杂的功能的可以适当更改一下:
https://download.csdn.net/download/YiYeZhiNian/34447274
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)