相机和毫米波雷达数据融合3--Simulink解析Can信号

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

相机和毫米波雷达数据融合1–流程框架

相机和毫米波雷达数据融合2–SocketCan编写

相机和毫米波雷达数据融合3–Simulink解析Can信号

参考文章

从DBC和Simulink模型生成CAN报文C++解析代码

simulink中CAN PACK和CAN UNPACK模块的使用

Simulink CAN PACK Message总线解包及处理

这些参考文章都写的很好很详细。如果我在这篇文章中没讲清楚的可以参考这几篇。但是最好先看我的之后看他们的,因为他们的不会完美契合这个项目,如果跟着搞到后面发现出了问题就是在浪费时间。

pack和unpack模块认识

高版本的matlab和低版本的matlab有明显不同,最明显的就是高版本需要将CAN_MESSAGE_BUS创建在工作空间中,而低版本不需要。我也是在写文章的时候才摸索出来两个版本的成功操作。

低版本以2016a为例

pack模块

在这里插入图片描述
这是一个pack模块,里面有一个Gear_A1_param,在simulink里这是一个bus信号,生成c++代码之后他就是一个类了。首先你需要在matlab工作空间里创建这个bus信号。如下:

在这里插入图片描述
matlab窗口输入buseditor,在弹出串口中点击2,3可以添加bus和该bus的element。比如这个Gear_A1_param类:

在这里插入图片描述
bus element需要在右边设置名称和类型,一般都是double型。如果你想创建那种复合类,注意要先创建出里面的类,再创建外面的类,像下面这种can0_Input_Param里还包含很多控制参数类:

在这里插入图片描述
创建好bus之后,我们创建一个In1输入模块设置他的Data type,选择你需要的bus。如果找不到点击Refresh data type就好了。

在这里插入图片描述

然后利用一个busSelector模块,选择出需要的信号,然后输入到pack模块中。pack模块设置如下:

在这里插入图片描述
输入信号的方式,第一个和另外两个有明显区别,第一个你得输入和can信号每一位的数值,一般来说can信号有8位,所以你得提供八个数据。raw data原始数据的意思,这个方式这里用不上。
第二个和第三个输入方式,都是输入参数物理值,不同的是第二个你可以自己定义,当你选择了第二个后,你会发现signals那一行的add signal和delete signal可以进行选择了,也就是可以自己操作这个can的解析方式了。在pack中不常用,因为改变了解析方式,最后pack出来的can信号是要发送给硬件设备的,硬件是理解不了这种can信号的。一般pack的话就选择第三种

然后继续选择dbc文件的路径,还有你需要pack的那个can信号,然后ok就好了

最后连接一个Out1输出模块,由于是低版本matlab不用设置成canmessage的类型,他会自动识别。记住输入输出的名字很重要,这个就是生产代码里的类的名字。

unpack模块

在这里插入图片描述
这时输入是canMessage,不需要设置输入数据类型,然后连接unpack模块,unpack模块如下:

在这里插入图片描述
unpack模块与pack模块类似,不同点在于:

  1. 你可以选第二种输入方式,这样可以选择你需要的信号进行解析,使得模型和代码看起来更简洁,或者输出之后连接到terminator。
  2. 可以勾选下面的Output ports,选择canmessage的一些状态信息。
    之后连接一个busCreator模块,让输出的参数合成一个类输入到Out1模块,Out1模块需要设置bus数据类型,和pack模块那部分类似。

高版本以2021a为例

想要完成和上文一样的内容,需要你提前创建一个canMessage的bus,你可以在matlab窗口输入“canMessageBusType”即可创建。
在搭建模块时,所有Out1和In1模块(不管是子系统还是外面的)如果和can_Msg连接,数据类型都要选择你创建的CAN_MESSAGE_BUS。而且要勾选output as a non-virtual bus signal。

在这里插入图片描述

所有的pack模块都要勾选output as bus ,如下:

在这里插入图片描述

生成代码

搭建好解析模型后就可以生成代码,注意你的输入输出模块,还有子系统的命名,这都将在后面生成的代码中得到体现。
生成代码的步骤可以参考这个,写的很好:
生成代码
如果你高版本没有找到生成代码口在哪?

在这里插入图片描述
点击1,然后在2中搜code,然后选择Embedded Coder,会看到出现4,在4里你就会看到Quick start了。如果生成代码不成功,看他的报错,一般是这几个问题:

  1. dbc文件路径改变了
  2. 数据格式没设置好
  3. bus没有设置好,output as bus啥的没勾上
    按照报错去修改就好了。生成代码后按照链接文章里去好好看看怎么理解生成的代码,这会帮助后面的编程。

融合项目的can解析

下面我将介绍我的解析框架,我的工控机一共有三个can口接入了硬件设备,分别是can0接车辆底盘,can1接摄像头,can2接毫米波雷达ESR

在这里插入图片描述
你可以把需要交互的信息在模型里连上,比如相机需要本车的制动信号,那我直接把底盘can解析之后的档位反馈信息,直接输入到相机解析模块里。意思就是只要我这个模型收到了底盘的档位can信号就可以自动解析车的档位状态,然后输入到相机pack模块中,最后生成一条表示档位状态的,相机需要的can信号给相机。
图中你还可以继续优化,再用busCreator把同一个can输出的param做成一个类,这样会更简洁方便一些。

can0模块

在这里插入图片描述

can0中C_Msg是车辆的状态反馈信号,解析之后有C_param,我们可以得到车辆当前的前轮转角,转矩,档位状态等等。A_param是控制参数,我们可传入档位,转向,驱动,制动,驻车等参数,来控制车辆。

can1模块

在这里插入图片描述

can1接入的摄像头,我们不需要控制摄像头,关注输出就好了,738主要输出摄像头探测到的所有目标数量。要知道这个数量是在不停变化的,摄像头的报文数量也在不停变化,摄像头最多可以同时探测到10个目标,难道我们要设置好所有目标的解析吗???

输出的参数A1_739,B1_73A是摄像头探测到的一个目标的信息。还有A2,B2;A3,B3;目标多的时候还有A9,B9。但其实他们的解析方式是一样的,所以我们这里只选择一个作为代表。在后面代码编写中,我们只要含有目标总数的738can信号,还有和739一类的A信号,73A一类的B信号,A信号10个,B信号10个,加一个738,一共21个信号。

在这里插入图片描述
也就是我们只获取这些id的can信号,之后我们在解析代码中进行处理,解析代码后面会详细讲,我们提前来看看:

在这里插入图片描述
通过判断对3取余之后的结果来选择将receive_msg输入到解析模型的哪个输入口,至于为啥对3取余,这是这个相机can信号的规律,其实每个目标的信息由三条can组成,ABC,但C没啥有用的信息所以我就不解析C信号了。

can2模块

在这里插入图片描述

can2接入的是毫米波雷达ESR,需要输入一些本车状态量(后文会介绍到)。重点看输出,有500和540两个param。ESR每个周期会发送64个目标的信息,不管是否有这么多目标被探测到,都会发送64条can信号,和上文摄像头一样,只需要选择一个can,然后进行取余判断。从500-53f一共64个目标,然后我们还需要从540里获得一些信息(虽然这些信息后面发现并没有啥用)。

在这里插入图片描述
这是540的can解析的数据,这一条can中包含了64个目标的某些信息,信息太多,而且有相似性。我们在设置的时候不要把输出设置成bus了,auto就好了,这样在代码中就是数组了,我们可以通过索引去获取相关目标的信息,由于这部分后面也没用到,就不细讲了,有兴趣可以自己去试。

总结

终于把这部分讲完了,看的时候把这篇文章和参考文章结合着看,有些东西我也没有试,比如高版本生成的代码在ROS中是什么样的,所以欢迎大家在评论区交流。

  • 6
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用和引用的内容,可以得知毫米波雷达通过CAN口进行数据传输,可以利用SocketCAN接口进行CAN总线数据的收发。而引用提到,毫米波雷达ESR每个周期会发送64个目标的信息,并且会发送64条CAN信号。因此,对于毫米波雷达CAN报文的解析,可以按照以下步骤进行: 1. 首先,需要通过SocketCAN接口获取CAN总线的数据。 2. 接下来,根据CAN报文的ID来判断该报文属于哪个硬件设备。根据引用,毫米波雷达通常使用CAN2接口,因此可以筛选出CAN2接口接收到的报文。 3. 针对CAN2接口接收到的毫米波雷达报文,需要进一步解析其中的目标信息。根据引用的描述,每个周期发送的报文中包含了64个目标的信息,可以根据报文的数据段进行解析。 4. 解析目标信息时,可以根据报文中的不同参数进行判断和提取。根据引用的描述,可以使用参数500-53f提取64个目标的信息,同时还可以从参数540中获取一些额外的信息。 综上所述,对于毫米波雷达的CAN报文解析,可以通过SocketCAN接口获取CAN总线数据,筛选出CAN2接口接收到的报文,然后根据报文的数据段和参数进行目标信息的解析。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ARS_408毫米波雷达数据解析学习记录-SocketCan部分](https://blog.csdn.net/weixin_49401384/article/details/118700658)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [相机毫米波雷达数据融合3--Simulink解析Can信号](https://blog.csdn.net/zyf_to_utopia/article/details/123522748)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值