Astra Pro 深度相机完整标定文档(ROS2 版)
·
文档说明
本文档适配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 采集样本(关键影响精度)
- 手持标定板在相机前 0.5~2 米范围内移动;
- 覆盖画面左上 / 右上 / 左下 / 右下 / 中心区域,且标定板与相机光轴成 15°~45° 倾斜;
- 采集 15~20 个有效样本(进度条全部变绿,
CALIBRATE按钮亮起); - 点击
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 配置步骤:
- Fixed Frame 选择
camera_color_frame; - 添加 “PointCloud2”,Topic 选择
/camera/depth/color/points; - 添加 “Image”,Topic 选择
/camera/color/image_rect_color; - 验证:点云颜色与图像完全对齐,无偏移 / 错位。
五、小车场景特殊优化
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 - 深度像素级对齐 |
总结
- Astra Pro 标定核心流程:RGB 内参→深度内参→D2C 对齐,其中 D2C 对齐是小车场景的核心;
- 标定精度关键:内角点参数准确、样本覆盖全画面、标定板平整 / 光照均匀;
- 小车场景需重点关注:参数加载生效、D2C 对齐效果、定期重标定。
本文档可直接作为小车项目中 Astra Pro 标定的操作手册,所有命令均经过实测验证,适配 ROS2 Humble 环境。
更多推荐



所有评论(0)