一、Astra pro设备接入
1. 在 JetsonNano 终端查看插入的 USB 设备
nvidia@nvidia-desktop:~/WorkSpace$ lsusb
⭐ 结果如下:
Bus 002 Device 002: ID 0bda:0411 Realtek Semiconductor Corp.
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 8087:0a2b Intel Corp.
Bus 001 Device 038: ID 24ae:2013
BUS 001 DEVICE 041: ID 2BC5:0502 # 2BC5:0502是RGB模块
BUS 001 DEVICE 040: ID 2BC5:0403 # 2BC5:0403是深度模块
BUS 001 DEVICE 039: ID 05E3:0610 GENESYS LOGIC, INC. 4-PORT HUB # USB HUB 芯片用于连接多个摄像头与主机
Bus 001 Device 002: ID 0bda:5411 Realtek Semiconductor Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
2. 在 ROS 下查看

查看当前ROS的版本 rosversion -d
I. ROS 基础相机支持包安装
# Assuming you have sourced the ros environment, same below
export ROS_DISTRO=melodic
sudo apt install libgflags-dev ros-$ROS_DISTRO-image-geometry ros-$ROS_DISTRO-camera-info-manager ros-$ROS_DISTRO-image-transport ros-$ROS_DISTRO-image-publisher libgoogle-glog-dev libusb-1.0-0-dev libeigen3-dev
sudo apt install libuvc-dev
sudo apt install ros-melodic-rgbd-launch ros-melodic-libuvc ros-melodic-libuvc-camera ros-melodic-libuvc-ros
II. 创建 ROS 工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
source devel/setup.bash
III. 在 ROS 工作空间中下载 astra 源代码
cd ~/catkin_ws/src
git clone https://github.com/orbbec/ros_astra_camera.git
IV. 配置 astra camera 的编号方式
cd ~/catkin_ws/src/ros_astra_camera/scripts/
./create_udev_rules
sudo udevadm control --reload && sudo udevadm trigger
V. 编译 astra_camera 源代码
cd ~/catkin_ws
catkin_make -j1 --pkg astra_camera # 由于是在 JetsonNano 上进行开发部署,出现了 "Invoking make -j4 -l4 Failed" 的错误,所以强制限制使用 -j1 编译
⭐ Tips: 在实际ROS开发过程中,在用catkin_make编译的时候,速度可能会有点慢,因此可以设置catkin_make的-j和-l的参数
- -j 其实对应的是 --jobs,表示可以同步进行的任务
- -l 其实对应的是 --load-average, 表示系统加载的任务数
一般系统会默认的设置为catkin_make -j2 -l2或者catkin_make -j4 -l4,但是当电脑足够支撑8个任务数的时候,需要自己手动设置。在使用catkin_make编译之前,在终端中输入以下指令设置就ok了。
VI. astra pro获取深度图像
# roslaunch astra_launch astra_pro.launch
roslaunch astra_camera astra.launch
VII. 打开rqt_image_view查看图像话题
rqt_image_view # rviz 查看相关相机也是可以的

🚀 Error:
Question1:
-
问题现象:
-
问题原因:
由于当前JetsonNano平台安装的 Opencv 的版本为 Opencv4 所以出现了不兼容无法找到/usr/include/opencv
目录的情况,实际的目录为/usr/include/opencv4
-
解决方法:
opencv_version # 查看当前 Opencv 的版本 4.1.1 ls -al /usr/include/opencv4 # 查看是否有 Opencv sudo vim /opt/ros/melodic/share/cv_bridge/cmake/cv_bridgeConfig.cmake # 修改 ROS melodic 版本的 Opencv编译支持文件 sudo vim /opt/ros/melodic/share/image_geometry/cmake/image_geometryConfig.cmake # 修改 ROS melodic 版本的 Opencv编译支持文件
Question2:
- 问题现象:
- 问题原因:
由于当前JetsonNano平台未安装 Google 的日志管理库。 - 解决方法:
sudo apt-get install libgoogle-glog-dev# glog是google提供的一个轻量级C/C++日志库 如果无法安装请使用源码编译的方式完成 git clone https://github.com/google/glog.git cd glog mkdir build cmake .. make sudo make install
Question3:
- 问题现象:
- 问题原因:
由于当前JetsonNano平台虽然有4核心但可能系统限制不能同时调用到。 - 解决方法:
catkin_make -j1 --pkg astra_camera
Question4:
- 问题现象:
The following configuration files were considered but not accepted: /usr/lib/aarch64-linux-gnu/cmake/opencv4/OpenCVConfig.cmake, version: 4.2.0 -- Configuring incomplete, errors occurred!
- 问题原因:
ros_astra_camera 工程中的 CMakeLists.txt 配置的 Opencv 的需求版本与本机安装的 Opencv 版本不兼容。 - 解决方法: 修改 CMakeLists.txt
opencv_version # 查看当前系统的 Opencv 的版本 # find_package(<PackageName> [version] [EXACT] [QUIET] [REQUIRED]) version: 版本合适(大版本号相同) EXACT: 版本必须一致 QUIET: 没找到包也不会报 REQUIRED: 必须找到该包,否则停止 find_package(OpenCV 4.1.1 EXACT REQUIRED) # 精确的查找 Opencv4.1.1
Question5:
- 问题现象:
在软件中无法打开普通摄像头数据,Topic中无数据存在 - 问题原因:
原因是astrapro.launch设备的ID号与自己电脑的不同造成的,astrapro.launch文件中设备的ID号为0x501。
- 解决方法: 修改 astra_pro.launch
lsusb # 查看设备的 Vender ID 和 Product ID 查看自己设备的RGB相机号输入命令:看到是0x502,因此把astra_pro.launch文件中改为0x502,再次启动launch即可。 source devel/setup.bash roscd astra_camera/launch/ vim astra_pro.launch # 修改并保存 重启相机
Question6:For frame [laser]: Fixed Frame [map] does not exist此类问题解决
- 问题现象:
当我们使用rviz时,比如运行雷达后没有点云数据,即使我们能看到发布了/scan话题
- 问题原因:
看Global Options 当中的Fixed Frame ,是map。这是因为世界坐标定义成map,单独运行sensor 节点不会生成世界坐标,而传感器坐标laser找不到世界坐标,就定位不了自身的位置,从而报错。 - 解决方法: Reference
只需要将世界坐标改成sensor的坐标laser就可以了。如下图:就可以看到扫描数据了。
Tips 🌻 终极解决方案
其他 ROS kinetic 版本安装
sudo apt-get install ros-kinetic-astra-camera
sudo apt-get install ros-kinetic-astra-launch
sudo apt-get install ros-kinetic-libuvc-*
sudo apt-get install ros-kinetic-rgbd-launch
二、标定彩色相机
-
启动相机节点:
roslaunch astra_camera astrapro.launch
-
打开相机标定节点并指定话题:
rosrun camera_calibration cameracalibrator.py --size 6x9 --square 0.014 image:=/camera/rgb/image_raw
上述命令中的参数含义,需根据实际测试情况重新设置- size 指的是:棋盘格内部的角点的行列数;(⭐ 注意:不是棋盘格的行列数,如下图棋盘格的行列数分别为12、14,而内部角点的行列数分别是11、13)
- square 是棋盘格每个格子的边长(可以自己用尺子量一下);
- image 是图像话题名称,通常为/camera/rgb/image_raw。
-
在弹出的窗口相机视野中手持标定板,不断分别进行左右(X),上下(Y),远近(Size),倾斜(Skew)运动,尽量让这四个维度的进度条都为绿色。此过程要保证标定板上有彩色的条纹才为有效。这个过程中控制台也会打印出标定个数的日志。此过程也可以将标定板固定,然后移动相机。
- X: 标定靶在摄像头视野中的左右移动;
- Y: 标定靶在摄像头视野中的上下移动;
- Size: 标定靶在摄像头视野中的前后移动;
- Skew: 标定靶在摄像头视野中的倾斜转动
-
当右侧的CALIBRATE圆形按钮由灰色转为绿色时,说明数据采集完毕,此时点击CALIBRATE按钮,才开始读取之前保存的图片并真正执行标定计算。
-
有标定结果出来后,点击标定界面的SAVE按钮,再点commit按钮,标定结果保存在/tmp/calibrationdata.tar.gz这个压缩包中,到这里彩色相机的标定就结束了,关闭标定程序。
-
找到 /tmp/calibrationdata.tar.gz 压缩包,将之解压,其中的 ost.yaml就是我们想要的标定结果。
- camera_matrix: 相机内参矩阵 (固有参数)
- distortion_coefficients: 相机畸变系数 (固有参数)
- rectification_matrix: 矫正矩阵(一般为单位阵 )
- projection_matrix: 投影矩阵(世界坐标系到图像坐标系)
🌻 Reference:
三、标定红外相机
标定ir红外相机与标定rgb彩色相机相比,除了第一步的image参数不同,其他都一样。
由于其深度数据的成像即为红外相机的投影光斑分析得到的,ir红外的相机标定结果即是深度相机的标定结果。
1. 运行相机标定节点
rosrun camera_calibration cameracalibrator.py --size 9x6 --square 0.02 image:=/camera/ir/image
目前测试,在Ubuntu18.04下melodic预览图像内容是黑色的,如下图。但是在rviz下却可以正常查看。
原因是由于默认的IR图像数据是16-bit的,如果想清晰的显示出来,我们需要将之归一化成一个数值范围为0-255范围的8-bit图片。而rviz已经帮我们做了这样的归一化操作,参考此 issues.
cv::normalize(image,image,0.,255.,cv::NORM_MINMAX, cv::CV_8U);
2. 红外相机节点数据转换
根据这个思想,我们实现一个图像类型转换节点,即订阅 /camera/ir/image
话题,将得到的16-bit的图片转换成8-bit,然后输出到 /camera/ir/image_mono8
.
⭐ 转换节点代码: https://gitee.com/tangyang/image_transformer
处理好数据归一化问题后,还会出现的问题,由于RGBD相机,以结构光为深度成像原理的相机,其投射的红外光线为特殊的无序光斑,导致红外接收设备无法收到清晰完整的画面内容。

🚀 此时我们可以有几种特殊的处理方法:
- 强行找各种角度,尽可能的让相机找到角点(精度较差);
- 通过在红发发射器前贴一些磨砂的半透明纸,将红外光斑晕开(精度适中,较方便);
- 将红外投影摄像头遮挡,使用外置的红外相机进行补光(精度高,需要额外设备);
3. 开始标定
