rosbag 转TUM
时间: 2025-03-09 16:01:32 浏览: 99
### 将 ROS Bag 文件转换为 TUM 格式
为了将 ROS bag 文件转换为 TUM 格式,可以采用多种方法。一种常见的方式是通过 `evo` 工具来实现这一目标。
#### 使用 evo 转换 ROS Bag 至 TUM 格式
进入存储有 `evo` 的文件夹位置,在命令行输入如下指令可完成转换:
```bash
cd ~/home/evo/test/data/
evo_traj rosbag input.bag -r tum > output.txt
```
上述命令会读取名为 `input.bag` 的 ROS bag 文件并将其轨迹信息按照 TUM 格式导出到 `output.txt` 中[^1]。
对于更复杂的场景或者特定传感器的数据处理需求,则可能涉及到调整参数设置以确保数据同步性和准确性。例如当使用 RealSense D435 摄像头时,需先安装对应的 `realsense-ros` 包,并修改配置使深度图与彩色图像对齐[^2]。
#### 编写自定义脚本进行转换
如果希望拥有更多控制权或遇到不支持的情况,编写 Python 或 C++ 程序也是一种解决方案。下面是一个简单的 Python 示例用于提取时间戳、位姿估计等必要字段并保存至 TUM 文档格式中:
```python
import rospy
from sensor_msgs.msg import Image, CameraInfo
from cv_bridge import CvBridge
import numpy as np
import tf
import os
def callback(data):
br = tf.TransformBroadcaster()
(trans, rot) = listener.lookupTransform('/map', '/base_link', rospy.Time(0))
timestamp = data.header.stamp.to_sec()
line = f"{timestamp} {trans[0]} {trans[1]} {trans[2]}" \
f" {rot[0]} {rot[1]} {rot[2]} {rot[3]}"
with open('trajectory_tum_format.txt', 'a') as file:
file.write(line + '\n')
if __name__ == '__main__':
rospy.init_node('convert_rosbag_to_tum')
bridge = CvBridge()
# 订阅话题名称取决于实际使用的设备和发布者设定
sub_info = rospy.Subscriber("/camera/color/camera_info", CameraInfo, callback)
rate = rospy.Rate(10)
while not rospy.is_shutdown():
try:
pass
except KeyboardInterrupt:
break
```
此代码片段订阅了相机的信息流,利用 TF 库获取机器人相对于地图坐标系的姿态变化情况,并按 TUM 规范记录下来。
阅读全文
相关推荐


















