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

本文介绍了如何使用C++实现SocketCan功能,包括SocketCan类的设计、构造函数、初始化函数、报文接收与发送函数。通过SocketCan在Linux环境下接收和发送CAN报文,并结合相机与毫米波雷达数据融合的上下文,讨论了CAN接口的激活以及Canutils工具的使用。文章提供了一个CanVehicleClass类的头文件和源文件示例,用于接收和发送CAN报文。

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

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

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

参考文章

linux下的SocketCan编写
Linux socket CAN编程示例

工控机Can接口激活

工控机的can卡需要激活,一般厂家会有执行文件,你每次开机然后执行这个文件就好了。也可以把这个文件设置成开机自动执行,这样就不要每次都运行了。

在这里插入图片描述
里面的内容没有太大借鉴意义,不同厂家写的不一样。运行成功之后可以通过ifconfig命令查看是否出现了相应的can口注意这里面的can口命名(can0,can1)很重要,后面的SocketCan代码中的名字和这里的一致

算了还是看看这个**.sh**文件里写了什么吧。

在这里插入图片描述
重点就是设置的语句“set up”等等,你会看到参考文章链接中的代码前面会有类似的设置语句,这时你就知道我的**Can_Init()**里面为什么注释掉这几行设置代码了。总结就是别重复激活,一个位置激活了,另外就没必要再次激活了。

在这里插入图片描述
Canutils,这是linux下一个查看can报文的软件,你可以在你的linux里下一个,网上教程很多。用candump命令可以很好地查看指定can口传输的报文。

项目SocketCan编写

本人对c++基础不好,在编写的时候对相应类的编写可能不合适,希望大家一起交流,指导。
在这里插入图片描述
里面的错误可以忽略,因为这是linux下的代码,但是为了方便写文章我在windows下打开了。
箭头所指的两个文件用来实现SocketCan功能。

头文件 can_vehicle_class.h

#ifndef CAN_VEHICLE_CLASS_H
#define CAN_VEHICLE_CLASS_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <linux/can.h>
#include <linux/can/raw.h>
#include <vector>

using namespace std;

class CanVehicleClass
{
   
   
private:
    int Can_Init();


public:
    CanVehicleClass(char* name);
    char* can_name;//绑定的can口
    int s;//socketcan套接字

    unsigned char CAN_Receive_Msg(can_frame& receive_msg,vector<unsigned int> &receive_id);
    int Can_Send_Msg(vector<can_frame>& send_msg_vec);

    vector<can_frame> send_msg_vec;//打算发送的报文
    vector<unsigned int><
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值