ros订阅图片python_ROS进行CAN FD的采集

本文介绍了如何使用ROS订阅图片并结合python处理CAN FD数据。通过PCAN设备接入CAN总线,利用socketcan_bridge将CAN FD数据转换为ROS topic。面对CAN_FD帧的配置和接收,以及Ros的canopen_can_fd节点的编译问题,文章提供了详细步骤,并推荐使用cantools进行Python解析。
摘要由CSDN通过智能技术生成

8d5c4a2e28149ab600c40f7815232865.png

最近为了采集P7的can数据,研究了一下can fd的采集方式。传统的自动驾驶数据采集会将所有传感器的数据都接入ROS中进行时间同步和统一的录制管理,canbus一般的处理方式是使用pcan设备从OBD或者其他位置的总线接口引入工控机,通过socketcan作为底层驱动(linux kernel自带),然后使用ros的canopen工具包中的socketcan_bridge包将can数据变成ros中的一个topic发布出去,这样就可以方便的进行订阅了。

ros采集普通can相关的资料比较多,can_fd还算比较新的一种can格式,网上资源不是很多。

首先要解决的是pcan设备的问题,支持fd的版本一般要贵一些,国产can设备比如周立功对linux下fd的支持度有限,所以直接上了pcan的mini PCI-E接口的4路canbus采集卡,通过工控机上的m2接口就可以直接对接can总线出来的db9接口。socketcan是支持fd的,但是要买到可以在linux下正常使用socketcan驱动的canfd设备,国内市场还是不好买。

其次是socketcan的配置问题。其实用udev规则直接配置就可以了,开机自启动非常的方便。对于canfd来说,配置可以是这样的。

SUBSYSTEM=="net", ACTION=="add", KERNEL=="can{{ loop.index0 }}", RUN+="/sbin/ip link set can{{ loop.index0 }} up type can bitrate {{ can.br }} sample-point {{ can.br_sp }} dbitrate {{ can.dbr }} sample-point {{ can.dbr_sp }} fd on listen-only on restart-ms 100"

因为用了ansible自动化部署,上面的代码里有{},直接就是变量替换的意思,我就懒得去掉了。一般canfd的扩展段的波特率都是2000kbps,普通段是500kbps,再把sample point写上就完事了,记得结尾fd on。这种写完似乎同时支持fd和非fd的can,也是怼错了之后发现的,后面可以再试一下真假。

这一步做完了之后可以ifconfig一下,如果看到can而且can底下rx是有收到数据的,就证明成功了,这一步做完candump就可以用了。

最后是,ros的canopen问题,目前master上的canopencan_fd还不支持canfd。本来以为需要自己port了,后面发现fork里头有小伙已经实现了,编译后发现也还算好使(虽然编译过程有点bug

simontegelid/ros_canopen​github.com
f00e6409b3c1f4e250ab3207143556a1.png

主要是要用gcc-7来编译,如果用ubuntu1604的话要自己装一下,不然会报错。然后还有就是有个CAN_FD_FRAME的常量需要定义一下,值是0x0800。

总之git clone上面的repo,编译过之后source一下就可以了,用法和不是canfd用法是一致的。节点起来之后,如果要rostopic echo,记得也要source一下之前编译的包,不然会报message的md5验证失败,因为本质上Frame.msg已经被修改了,data段由原来的8byte改成了不定长的数组。

Header header
uint32 id
bool is_rtr
bool is_extended
bool is_error
uint8 dlc
uint8[] data

uint8 DLC_FD_BRS_FLAG = 128

这一步完了之后就做完啦,可以开始录数据了。

推荐使用python下的cantools来解析,非常方便,python2.7下的版本安装的时候会有点报错,但是鼓捣一下依赖版本就可以搞定,python3.x就可以随便用,缺点是如果用的ros还是老的,比如kinetic,python3.x支持贼差,就可能满足不了你的需求。不过ros noetic用到现在大概几个月了还是挺好用的,如果没有特别的需求可以升级noetic了。

完结撒花。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值