以下是针对铲运机现场测试的数据录制操作备忘录,兼顾ROS解析数据和原始CAN数据,确保全面捕捉机器特性相关信息:
📋 测试前准备工作
-
设备检查
- 确认Orin主机与铲运机CAN总线连接稳定(两个CAN口分别标记为
can0
、can1
,对应设备手册中的CAN通道定义)。 - 启动Orin主机,检查ROS节点是否正常启动:
rosnode list
应包含/can_sensor_publisher
(发布/can_sensor
话题的节点)。 - 验证数据输出:
rostopic echo /can_sensor
确认所有字段有正常数值(无持续NaN
或异常跳变)。
- 确认Orin主机与铲运机CAN总线连接稳定(两个CAN口分别标记为
-
工具准备
- 确保安装
can-utils
(CAN工具):sudo apt install can-utils
。 - 准备足够存储空间(建议≥100GB,按每小时10-20GB估算),挂载外部硬盘:
sudo mount /dev/sdb1 /mnt/test_data
(根据实际设备调整)。
- 确保安装
📝 核心数据录制操作
1. 原始CAN数据录制(底层备份,关键步骤)
-
打开新终端1 ,执行以下命令(同时录制两个CAN口,输出到硬盘):
bash# 录制can0到文件(包含时间戳、ID、数据) candump -tz can0 > /nvidia/home/catkin_ws/src/can_data_record/can0_$(date +%Y%m%d_%H%M%S).log & # 录制can1到文件 candump -tz can1 > /nvidia/home/catkin_ws/src/can_data_record/can1_$(date +%Y%m%d_%H%M%S).log &
- 参数说明:
-t
记录时间戳,-z
时间戳精确到微秒,-l
按帧格式输出(已经舍弃,因为会造成录制空文件的情况。),$(date...)
自动生成带时间的文件名(避免覆盖)。 - 确认录制状态:
ps -ef | grep candump
查看进程是否存在。 - 在终端1执行
killall candump
,确认进程终止,则录制结束。
- 参数说明:
2. ROS解析数据录制(核心分析数据)
-
打开新终端2 ,录制
/can_sensor
话题(带时间戳,支持离线回放):bashrosbag record -O /mnt/test_data/ros_can_sensor_$(date +%Y%m%d_%H%M%S) /can_sensor
- 参数说明:
-O
指定输出路径和前缀,文件名自动带时间戳;确保只录制/can_sensor
(避免冗余数据占用空间)。 - 录制过程中观察终端输出的"Bagging..."提示,确认数据帧率稳定(无"dropped messages")。
- 参数说明:
3. 人工操作日志记录(关键补充)
- 准备纸质笔记本或手机备忘录,同步记录以下信息(与数据文件时间对应):
- 时间点 :如
10:30
开始铲装作业,11:15
进行空载行驶。 - 操作场景 :
- 铲装阶段(满载/半载/空载)、行驶阶段(低速/高速/爬坡/下坡)。
- 特殊操作(如急停、转向、液压系统满载运行)。
- 异常现象:如发动机异响、液压油温度骤升、ROS数据卡顿等(注明发生时间)。
- 时间点 :如
⏹️ 测试结束操作
- 停止ROS数据录制 :在终端2按
Ctrl+C
,等待终端显示"done"确认保存完成。 - 停止CAN数据录制 :在终端1执行
killall candump
,确认进程终止(ps -ef | grep candump
无结果)。 - 数据校验 :
- 检查硬盘文件:
ls /mnt/test_data
确认生成can0_*.log
、can1_*.log
、ros_can_sensor_*.bag
文件。 - 简单验证:用
head /mnt/test_data/can0_*.log
查看CAN数据前几行,用rosbag info *.bag
确认ROS数据时长和消息数。
- 检查硬盘文件:
- 数据备份 :将
/mnt/test_data
文件夹复制到备用存储(如移动硬盘),避免单设备故障丢失数据。
⚠️ 注意事项
- 录制过程中保持Orin主机供电稳定(建议接铲运机蓄电池或UPS),避免突然断电导致文件损坏。
- 若测试时长超过4小时,建议每4小时手动停止并重新启动录制(生成多个文件,方便后续分片分析)。
- 人工日志务必精确到分钟,便于后续将"操作场景"与"数据曲线"对应(如定位"满载时发动机转速变化")。
按此流程操作,既能通过ROS数据快速分析机器特性,又能保留原始CAN数据作为备份,确保测试数据的完整性和可追溯性。

在Ubuntu上可以使用can-utils
工具集中的candump
命令来录制CAN数据。具体步骤如下:
安装can-utils
工具集
如果系统尚未安装can-utils
,可以使用以下命令进行安装:
bash
sudo apt install can-utils
录制CAN数据
使用candump
命令录制CAN数据,基本语法为:(注意:优先使用直接录制,重命名会出现录制空文件情况。)
bash
candump -l <can_interface>
其中<can_interface>
是要录制数据的CAN接口名称,如can0
或can1
等。例如,要录制can0
接口上的CAN数据,可执行以下命令:
bash
candump -l can0
该命令会将通过can0
接口的所有CAN数据记录到文件中,默认文件名格式为candump-日期.log
。
如果想指定录制文件的名称,可以使用重定向符号>
,例如:
bash
candump can0 > my_can_data.log
这样所有捕获到的CAN消息都会被保存到my_can_data.log
文件中。
另外,candump
还支持过滤特定ID的CAN帧进行录制,命令格式为:
bash
candump -l <can_interface>,<id_range>
例如,只录制can0
接口上ID为123的CAN帧,可以执行:
bash
candump -l can0,123:7FF
ROS话题数据查看

.bag
文件是ROS系统的日志文件(ROS Bag),查看它可以使用ROS自带的rqt工具。以下是具体的操作步骤,从环境准备到数据查看、分析,按流程执行即可:
第一步:确认ROS环境(关键前提)
-
打开Ubuntu终端,先激活你的ROS环境(以ROS Noetic为例,其他版本命令类似):
bashsource /opt/ros/noetic/setup.bash
-
若你的
.bag
文件是在工作空间(如catkin_ws
)中录制的,还需激活工作空间的环境:bashsource ~/catkin_ws/devel/setup.bash
- 执行后无报错,说明ROS环境已就绪。
注:也可使用rqt实时查看话题中的数据,那么就不用繁琐的进行数据播包的过程了。
第二步:查看ROS Bag的基础信息(先了解文件内容)
在查看具体数据前,可先通过命令查看 .bag
文件的基本信息(如包含的话题、录制时长、消息数量),避免直接回放时信息混乱。
在终端中执行(将文件名替换为你的 .bag
文件,可直接拖入终端自动补全路径):
bash
rosbag info ros_can_sensor_20251016_144631.bag
预期输出示例:
path: ros_can_sensor_20251016_144631.bag
version: 2.0
duration: 1min 20s
start: Oct 16 2025 14:46:31.123 (1740000391.123)
end: Oct 16 2025 14:47:51.456 (1740000471.456)
size: 1.2 MB
messages: 4800
compression: none [1/1 chunks]
types: can_msgs/Frame [3066dcd76a6cfaefc71ec40a57800800b]
sensor_msgs/Imu [6a62c6daae103f4ff57a132d6f95cec2f]
topics: /can_sensor 2400 msgs : can_msgs/Frame
/imu 2400 msgs : sensor_msgs/Imu
- 重点关注
topics
字段:这是.bag
文件中记录的ROS话题(比如你关心的/can_sensor
话题),后续查看数据需基于这些话题。
第三步:查看ROS Bag中的具体数据(两种常用方式)
根据你的需求,可选择「实时回放查看」或「提取数据到文件查看」,前者适合快速验证,后者适合详细分析。
方式1:实时回放+终端打印数据(快速查看)
通过 rosbag play
回放 .bag
文件,同时用 rostopic echo
打印指定话题的数据(比如你关心的 /can_sensor
话题)。
-
打开第一个终端 ,执行回放命令(
-l
表示循环回放,可去掉):bashrosbag play -l ros_can_sensor_20251016_144631.bag
- 终端会显示回放进度(如
[RUNNING] Bag Time: 1740000392.123
)。
- 终端会显示回放进度(如
-
打开第二个终端 ,先激活ROS环境(同第一步),再执行打印命令:
bashrostopic echo /can_sensor
- 此时终端会实时打印
/can_sensor
话题的每一条数据(如CAN ID、数据内容、时间戳等),按Ctrl+C
可停止。
- 此时终端会实时打印
方式2:用可视化工具(rqt)查看(更直观,支持图形化)
注:也可使用rqt实时查看话题中的数据,那么就不用繁琐的进行数据播包的过程了。
ROS的 rqt
工具集提供了可视化界面,可更清晰地查看、筛选 .bag
数据,甚至绘制曲线(适合统计图形需求)。
-
打开
rqt
主界面:bashrqt
-
加载ROS Bag文件:
- 在
rqt
顶部菜单栏,点击「Plugins」→「Logging」→「Bag Player」。 - 在弹出的「Bag Player」面板中,点击「Open」,选择你的
.bag
文件(如ros_can_sensor_20251016_144631.bag
)。 - 点击「Play」按钮开始回放(可调节回放速度)。
- 在
-
查看指定话题数据:
- 继续在顶部菜单栏,点击「Plugins」→「Topics」→「Topic Monitor」。
- 在「Topic Monitor」面板中,找到
/can_sensor
话题,勾选后即可看到该话题的实时数据(包含字段解释,比终端打印更清晰)。
-
用图形化展示数据(统计曲线):
- 若想查看
/can_sensor
中某个字段(如燃油量、车速)的变化曲线,点击「Plugins」→「Visualization」→「Plot」。 - 在「Plot」面板中,点击「Add」,输入
/can_sensor/xxx
(xxx
替换为具体字段名,如/can_sensor/data[0]
代表CAN数据的第一个字节),点击「OK」。 - 回放
.bag
文件时,面板会自动绘制该字段随时间变化的曲线(支持多字段对比),可缩放、保存图片。
- 若想查看
第四步:(可选)提取数据到文本文件(便于后续分析)
若需要将 .bag
中的 /can_sensor
数据提取到文本文件(如 .txt
),方便用Excel、Python进一步分析,可执行以下命令:
bash
rostopic echo -b ros_can_sensor_20251016_144631.bag -p /can_sensor > can_sensor_data.txt
- 解释:
-b
指定.bag
文件,-p
表示输出为CSV格式(用逗号分隔,可直接用Excel打开),> can_sensor_data.txt
表示将结果保存到文本文件。 - 生成的
can_sensor_data.txt
会保存在当前目录,打开后可看到每一条数据的时间戳、字段值,便于统计分析。
关键补充说明
- 若回放时提示「话题不存在」:
需重新确认rosbag info
输出的话题名称是否正确(比如是否是/can_sensor
而非/can0
),且ROS环境已正确激活。 - 若
rqt
无法打开:
可能是rqt
未安装,执行sudo apt install ros-noetic-rqt ros-noetic-rqt-common-plugins
(Noetic版本)安装即可。
通过以上步骤,你可以完整查看 .bag
文件中的CAN数据,从终端打印到图形化分析都能覆盖,后续若需要进一步处理数据(如筛选异常帧、计算平均值),也可基于提取的文本文件操作。
问题与解决方案:
录制CAN文件为空的情况:

从文件列表来看,CAN日志文件中只有candump-xxx.log
有数据,而手动指定的can0_xxx.log
和can1_xxx.log
为空,这是由candump
命令的参数特性导致的,具体原因和解决方法如下:
核心原因:candump -l
参数强制生成默认文件名
你在录制CAN数据时使用了-l
参数(日志模式),该参数的特性是:
- 会忽略用户手动指定的输出文件名 ,强制生成格式为
candump-YYYY-MM-DD_HH:MM:SS.log
的默认日志文件。 - 同时,由于你在命令中加了重定向符号
> /mnt/test_data/can0_xxx.log
,但-l
参数已接管输出,导致手动指定的文件被创建但始终为空(没有数据写入)。
验证:candump-xxx.log
确实对应CAN0和CAN1的数据
虽然文件名没有明确标记can0
或can1
,但这两个文件分别对应你启动的两个candump
进程:
- 先启动的
candump -tz -l can0 ...
生成的candump-2025-10-16_144037.log
→ 包含can0
的数据。 - 后启动的
candump -tz -l can1 ...
生成的candump-2025-10-16_144043.log
→ 包含can1
的数据。
可以通过查看文件内容确认:
bash
# 在Linux中查看can0对应文件的前几行(含CAN帧信息)
head candump-2025-10-16_144037.log
# 查看can1对应文件的前几行
head candump-2025-10-16_144043.log
文件中会包含can0
或can1
的标识(如can0 123 [8] 11 22 ...
),证明数据正确对应。
后续解决:如何让CAN日志文件名明确区分can0和can1
如果希望文件名直接包含can0
/can1
以便区分,去掉-l
参数 即可(-l
是自动日志模式,会强制默认文件名),改用手动指定文件名的方式:
bash
# 录制can0,文件名含can0标识(无-l参数)
candump -tz can0 > /mnt/test_data/can0_$(date +%Y%m%d_%H%M%S).log &
# 录制can1,文件名含can1标识(无-l参数)
candump -tz can1 > /mnt/test_data/can1_$(date +%Y%m%d_%H%M%S).log &
- 这样生成的
can0_xxx.log
和can1_xxx.log
会正常写入数据,且文件名清晰区分通道。 -tz
参数保留(时间戳+微秒级精度),不影响数据完整性。
总结
目前已有数据的candump-xxx.log
是有效的CAN0和CAN1原始数据,无需担心缺失。若后续测试需要更清晰的文件名,按上述方法去掉-l
参数即可。这些数据可正常用于与ROS解析数据的交叉验证(通过时间戳对齐)。
如果需要解析这些candump
日志文件(如提取CAN帧ID和数据),可以告诉我,我会提供对应的Python解析脚本。