实验一 模拟can通信
1、虚拟CAN接口创建
实车上算法一般通过ros进行通信,车辆和控制器之间则通过can通信实现。 can信号的发送和接收一般是需要载体的,我们一般都有can0和can1设备可以使用,在电脑上创建这个设备:
加载vcan内核模块:
# 加载vcan内核模块
sudo modprobe vcan# 创建名为vcan0的虚拟接口
sudo ip link add dev vcan0 type vcan# 启用接口
sudo ip link set up vcan0
验证can状态
ip link show vcan0
2、模拟信号通信
安装can-utils工具包
sudo apt install can-utils
监听can报文
candump -td vcan0 # -td:显示时间戳和详细数据
发送单条报文
发送数据,没有多余控制。
cansend vcan0 111#2233
参数说明:
can_id#pay_load形式。其中can_id必须3 or 8位,例如填写 11#2233是不正确的。
cangen
作用: 通过指定can口发送指定的数据
cangen vcan0 -I 456 -L 8 -D i -g 0.5 -n 10
参数说明:
- g : 发送帧的间隔,单位为毫秒。
- I : CAN ID 生成的模式,此处42A表示采用固定的CANID 42A。如果不指定则为随机模式。
- L: 数据长度产生模式,此处固定长度为1,即每帧携带一个数据
- D: payload 的产生模式,此处为i,即从0开始依次递增发送数据,仅仅递增第一个数据。
- x: 即禁止本地自环测试。比如我们在同一个单板上有两个can口,我们将其互联,进行互发数据,如果不使用此参数,则通过can1向can1则可以正常发送数据,即使外部没有连接。
- n: 发送多少个帧,此处发送10个帧
设置canid随机
cansniffer
cansniffer -c vcan0
启用颜色标记
红色代表发生变化的字节
Canplayer
canplayer -I candump-2025-07-25_005121.log -l i
-I
指定输入文件
-l <num>
重复回放文件 <num>
次(i
= 无限循环,默认 1
)
-v
实时打印发送的 CAN 帧
-t
立即发送所有帧(默认按日志时间间隔发送)