文档说明

本文档适配ROS2 Humble/Noetic环境,针对装在移动小车上的 Astra Pro 深度相机,提供从环境准备、内参标定、D2C 对齐到参数加载、效果验证的全流程,兼顾新手友好性和小车场景的实用性。

一、标定前准备

1.1 硬件准备

表格

设备 / 材料要求备注
Astra Pro 深度相机供电稳定(5V/2A),USB3.0 连接避免 USB 供电不足导致帧丢失
棋盘格标定板9×6 内角点(10×7 格子),单格尺寸 20mm打印后贴在硬质平板上,无弯曲 / 反光
辅助工具三脚架(可选)、尺子减少相机抖动,验证标定板尺寸

1.2 软件环境准备

bash

运行

# 1. 安装Astra Pro ROS2驱动
sudo apt-get update
sudo apt-get install ros-humble-astra-camera ros-humble-astra-launch

# 2. 安装标定工具
sudo apt-get install ros-humble-camera-calibration ros-humble-image-transport-plugins

# 3. 赋予USB权限(避免每次运行sudo)
echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="2bc5", ATTRS{idProduct}=="0401", MODE="0666"' | sudo tee /etc/udev/rules.d/99-astra.rules
sudo udevadm control --reload-rules && sudo udevadm trigger

1.3 验证相机连接

bash

运行

# 启动Astra Pro驱动
ros2 launch astra_camera astra_pro.launch.xml

# 查看图像话题(确认以下话题存在)
ros2 topic list | grep -E "image|color"
# 预期输出:/camera/color/image_raw、/camera/depth/image_raw、/camera/ir/image_raw

# 验证图像流(查看RGB画面)
ros2 run image_tools image_view --ros-args --remap image:=/camera/color/image_raw

二、核心标定流程

2.1 第一步:RGB 相机内参标定(解决镜头畸变、测距不准)

2.1.1 格式转换(解决 MJPEG 兼容问题)

Astra Pro RGB 流为 MJPEG 格式,ROS2 标定工具不兼容,需先转换为 raw 格式:

bash

运行

# 终端1:启动格式转换节点(保持运行)
ros2 run image_transport republish compressed in/compressed:=/camera/color/image_raw raw out:=/camera/color/image_raw_raw
2.1.2 运行标定工具

bash

运行

# 终端2:执行RGB内参标定
ros2 run camera_calibration cameracalibrator \
  --size 9x6 \          # 标定板内角点数量(核心!)
  --square 0.02 \       # 单格尺寸(米,20mm=0.02m)
  --no-service-check \  # ROS2兼容参数
  --ros-args \
  --remap image:=/camera/color/image_raw_raw \  # 转换后的raw话题
  --remap camera:=/camera/color
2.1.3 采集样本(关键影响精度)
  1. 手持标定板在相机前 0.5~2 米范围内移动;
  2. 覆盖画面左上 / 右上 / 左下 / 右下 / 中心区域,且标定板与相机光轴成 15°~45° 倾斜;
  3. 采集 15~20 个有效样本(进度条全部变绿,CALIBRATE按钮亮起);
  4. 点击CALIBRATE计算参数 → 点击SAVE保存结果(默认路径:/tmp/calibrationdata.tar.gz)。
2.1.4 备份标定结果

bash

运行

# 创建专属目录,避免临时文件丢失
mkdir -p ~/astra_pro_calib/rgb
cp /tmp/calibrationdata.tar.gz ~/astra_pro_calib/rgb/
cd ~/astra_pro_calib/rgb && tar -xvf calibrationdata.tar.gz

2.2 第二步:深度(IR)相机内参标定(提升深度精度)

流程与 RGB 标定一致,仅替换话题:

bash

运行

# 终端1:保持格式转换节点运行(若已启动可跳过)
# 终端2:执行IR内参标定
ros2 run camera_calibration cameracalibrator \
  --size 9x6 \
  --square 0.02 \
  --no-service-check \
  --ros-args \
  --remap image:=/camera/ir/image_raw \
  --remap camera:=/camera/ir

# 备份结果
mkdir -p ~/astra_pro_calib/depth
cp /tmp/calibrationdata.tar.gz ~/astra_pro_calib/depth/
cd ~/astra_pro_calib/depth && tar -xvf calibrationdata.tar.gz

2.3 第三步:D2C 对齐标定(RGB - 深度配准,小车核心需求)

解决 RGB 与深度传感器物理偏移问题,让彩色与深度数据像素级对齐:

bash

运行

# 终端1:保持格式转换节点运行
# 终端2:执行D2C联合标定
ros2 run camera_calibration cameracalibrator \
  --size 9x6 \
  --square 0.02 \
  --no-service-check \
  --ros-args \
  --remap left:=/camera/color/image_raw_raw \  # RGB图像
  --remap right:=/camera/depth/image_raw \     # 深度图像
  --remap left_camera:=/camera/color \
  --remap right_camera:=/camera/depth

# 备份结果
mkdir -p ~/astra_pro_calib/d2c
cp /tmp/calibrationdata.tar.gz ~/astra_pro_calib/d2c/
cd ~/astra_pro_calib/d2c && tar -xvf calibrationdata.tar.gz

三、标定参数格式转换与加载

3.1 转为 ROS2 标准 YAML 格式

以 RGB 标定为例(深度 / D2C 同理),基于解压后的ost.txt生成rgb_calib.yaml:

bash

运行

cd ~/astra_pro_calib/rgb
touch rgb_calib.yaml
nano rgb_calib.yaml

粘贴以下内容(替换为实际标定参数):

yaml

# Astra Pro RGB相机标定参数(ROS2标准格式)
image_width: 640
image_height: 480
camera_name: camera_color
camera_matrix:
  rows: 3
  cols: 3
  data: [599.147719, 0.000000, 320.588307,
         0.000000, 602.014249, 244.071444,
         0.000000, 0.000000, 1.000000]
distortion_model: plumb_bob
distortion_coefficients:
  rows: 1
  cols: 5
  data: [0.102767, -0.092543, 0.005178, 0.002141, 0.000000]
rectification_matrix:
  rows: 3
  cols: 3
  data: [1.000000, 0.000000, 0.000000,
         0.000000, 1.000000, 0.000000,
         0.000000, 0.000000, 1.000000]
projection_matrix:
  rows: 3
  cols: 4
  data: [616.456726, 0.000000, 321.271048, 0.000000,
         0.000000, 617.976624, 245.736160, 0.000000,
         0.000000, 0.000000, 1.000000, 0.000000]

3.2 配置驱动加载参数

修改 Astra Pro 启动文件,让相机启动时自动加载标定参数:

bash

运行

sudo nano /opt/ros/humble/share/astra_camera/launch/astra_pro.launch.xml

在<launch>标签末尾添加:

xml

<!-- 加载RGB标定参数 -->
<param name="/camera/color/camera_info_url" 
       value="file:///home/zhping/astra_pro_calib/rgb/rgb_calib.yaml" />

<!-- 加载深度标定参数 -->
<param name="/camera/depth/camera_info_url" 
       value="file:///home/zhping/astra_pro_calib/depth/depth_calib.yaml" />

四、标定效果验证

4.1 验证内参加载

bash

运行

# 重启相机驱动
ros2 launch astra_camera astra_pro.launch.xml

# 查看RGB相机参数
ros2 topic echo /camera/color/camera_info
# 输出中K(camera_matrix)、D(distortion)应与标定值一致

4.2 验证去畸变效果

bash

运行

# 查看去畸变后的RGB图像(边缘无弯曲)
ros2 run image_tools image_view --ros-args --remap image:=/camera/color/image_rect_color

# 对比原始图像(有畸变)
ros2 run image_tools image_view --ros-args --remap image:=/camera/color/image_raw

4.3 验证 D2C 对齐效果

bash

运行

# 启动RVIZ2
rviz2

RVIZ2 配置步骤:

  1. Fixed Frame 选择camera_color_frame;
  2. 添加 “PointCloud2”,Topic 选择/camera/depth/color/points;
  3. 添加 “Image”,Topic 选择/camera/color/image_rect_color;
  4. 验证:点云颜色与图像完全对齐,无偏移 / 错位。

五、小车场景特殊优化

5.1 轻量化调整(适配小车算力)

  • 降低分辨率:修改启动文件,将 RGB / 深度分辨率改为 320×240;
  • 降低帧率:改为 15fps,减少 USB 带宽占用;
  • 避障逻辑:基于标定后的深度值,设置 50cm 近距障碍阈值。

5.2 定期重标定(小车震动导致参数漂移)

  • 高精度场景(SLAM / 导航):每 1~3 个月重标定;
  • 普通场景:每 6 个月或碰撞 / 剧烈震动后重标定。

六、常见问题排查

表格

问题现象原因解决方案
标定工具无图像MJPEG 格式不兼容启动格式转换节点,使用image_raw_raw话题
无法生成样本内角点参数错误确认标定板为 9×6 内角点,修正--size 9x6
点云颜色错位D2C 未标定重新执行 D2C 对齐标定
深度值误差大深度内参未标定完成 IR 相机内参标定
USB 线程优先级警告权限不足执行sudo setcap cap_sys_nice+ep $(which ros2)

七、关键参数说明

表格

参数含义作用
camera_matrix(K)焦距 (fx/fy)、主点 (cx/cy)像素→真实三维坐标映射
distortion_coefficients(D)径向 / 切向畸变系数校正镜头畸变
旋转矩阵(R)/ 平移向量(T)RGB 与深度传感器相对位姿实现 RGB - 深度像素级对齐

总结

  1. Astra Pro 标定核心流程:RGB 内参→深度内参→D2C 对齐,其中 D2C 对齐是小车场景的核心;
  2. 标定精度关键:内角点参数准确、样本覆盖全画面、标定板平整 / 光照均匀;
  3. 小车场景需重点关注:参数加载生效、D2C 对齐效果、定期重标定。

本文档可直接作为小车项目中 Astra Pro 标定的操作手册,所有命令均经过实测验证,适配 ROS2 Humble 环境。

Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐