Loading

ROS操作系统-Rosbag数据采集

毫米波雷达+相机实现多模态数据采集+时空对齐

检查rosbag安装

  • rosbag -h

录制雷达相机数据

timeout 22s rosbag record -O indoor_data.bag -j --lz4 --buffsize=1024 /tf /tf_static /usb_cam/image_raw /usb_cam/camera_info /ti_mmwave/radar_scan_pcl_0 /ti_mmwave/radar_scan /ti_mmwave/radar_occupancy

查看bag文件中的话题

  • rosbag info test.bag

检查bag类型冲突

  • rosbag check input.bag

处理冲突

# 生成迁移规则模板
rosbag check 2024-12-20-15-14-35.bag -g myrules.bmr

# 修改规则
1. 当出现`Please enter the type to migrate it to:`提示时,输入sensor_msgs/PointCloud2
2. 打开bmr文件,修改一:将 new_type = “ti_mmwave_rospkg/RadarScan” 修改为 new_type = “sensor_msgs/PointCloud2”;修改二:将valid的False修改为True`valid = True`;修改三:修改update函数代码如下:
def update(self, msg, migrated):
    import sensor_msgs.point_cloud2 as pc2
    import struct

    # 1. 定义PointCloud2的字段
    fields = [
        pc2.PointField('x', 0, pc2.PointField.FLOAT32, 1),
        pc2.PointField('y', 4, pc2.PointField.FLOAT32, 1),
        pc2.PointField('z', 8, pc2.PointField.FLOAT32, 1),
        pc2.PointField('intensity', 12, pc2.PointField.FLOAT32, 1),
        pc2.PointField('range', 16, pc2.PointField.FLOAT32, 1),
        pc2.PointField('velocity', 20, pc2.PointField.FLOAT32, 1),
        pc2.PointField('bearing', 24, pc2.PointField.FLOAT32, 1),
        pc2.PointField('point_id', 28, pc2.PointField.UINT16, 1),
        pc2.PointField('doppler_bin', 30, pc2.PointField.UINT16, 1),
    ]

    # 2. 按照字段顺序打包数据:7个float + 2个uint16
    point_data = struct.pack('<fffffffHH',
                             msg.x, msg.y, msg.z,
                             msg.intensity,
                             msg.range,
                             msg.velocity,
                             msg.bearing,
                             msg.point_id,
                             msg.doppler_bin)

    # 3. 赋值给迁移后的PointCloud2消息
    migrated.header = msg.header
    migrated.height = 1
    migrated.width = 1
    migrated.fields = fields
    migrated.is_bigendian = False  # 小端序
    migrated.point_step = 32       # 7*4 + 2*2 = 32字节
    migrated.row_step = 32
    migrated.data = point_data
    migrated.is_dense = True

    return True

# 修复数据包
rosbag fix 2024-12-20-15-14-35.bag repaired.bag myrules.bmr

播放录制的rosbag

  • rosrun rviz rviz -d rospack find ti_mmwave_rospkg/launch/rviz/ti_mmwave_camera_overlay.rviz # 开启rviz
  • rosbag play input.bag # 播放bag

采集数据播放

  • rosbag play --loop -r 2 my_data.bag # 2倍速循环播放
  • rosbag play my_data.bag -s 1234567890.123456789 # 从特定时间开始播放

rqt_bag查看bag时间戳

  • rqt_bag
posted @ 2026-01-13 16:03  ADDED  阅读(2)  评论(0)    收藏  举报