小淼博客

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、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 查看相关相机也是可以的

image

🚀 Error:

Question1:
  1. 问题现象:

  2. 问题原因:
    由于当前JetsonNano平台安装的 Opencv 的版本为 Opencv4 所以出现了不兼容无法找到 /usr/include/opencv 目录的情况,实际的目录为 /usr/include/opencv4

  3. 解决方法:

    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编译支持文件
    

    image

Question2:
  1. 问题现象:
    image
  2. 问题原因:
    由于当前JetsonNano平台未安装 Google 的日志管理库。
  3. 解决方法:
    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:
  1. 问题现象:
  2. 问题原因:
    由于当前JetsonNano平台虽然有4核心但可能系统限制不能同时调用到。
  3. 解决方法:
    catkin_make -j1 --pkg astra_camera
    
Question4:
  1. 问题现象:
    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!
    
  2. 问题原因:
    ros_astra_camera 工程中的 CMakeLists.txt 配置的 Opencv 的需求版本与本机安装的 Opencv 版本不兼容。
  3. 解决方法: 修改 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:
  1. 问题现象:
    在软件中无法打开普通摄像头数据,Topic中无数据存在
  2. 问题原因:
    原因是astrapro.launch设备的ID号与自己电脑的不同造成的,astrapro.launch文件中设备的ID号为0x501。
  3. 解决方法: 修改 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此类问题解决
  1. 问题现象:
    当我们使用rviz时,比如运行雷达后没有点云数据,即使我们能看到发布了/scan话题
  2. 问题原因:
    看Global Options 当中的Fixed Frame ,是map。这是因为世界坐标定义成map,单独运行sensor 节点不会生成世界坐标,而传感器坐标laser找不到世界坐标,就定位不了自身的位置,从而报错。
  3. 解决方法: Reference
    只需要将世界坐标改成sensor的坐标laser就可以了。如下图:就可以看到扫描数据了。
Tips 🌻 终极解决方案

JetsonNano 部署 Opencv3.2.0

其他 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

二、标定彩色相机

  1. 启动相机节点:
    roslaunch astra_camera astrapro.launch

  2. 打开相机标定节点并指定话题:
    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。
  3. 在弹出的窗口相机视野中手持标定板,不断分别进行左右(X),上下(Y),远近(Size),倾斜(Skew)运动,尽量让这四个维度的进度条都为绿色。此过程要保证标定板上有彩色的条纹才为有效。这个过程中控制台也会打印出标定个数的日志。此过程也可以将标定板固定,然后移动相机。

    • X: 标定靶在摄像头视野中的左右移动;
    • Y: 标定靶在摄像头视野中的上下移动;
    • Size: 标定靶在摄像头视野中的前后移动;
    • Skew: 标定靶在摄像头视野中的倾斜转动
  4. 当右侧的CALIBRATE圆形按钮由灰色转为绿色时,说明数据采集完毕,此时点击CALIBRATE按钮,才开始读取之前保存的图片并真正执行标定计算。

  5. 有标定结果出来后,点击标定界面的SAVE按钮,再点commit按钮,标定结果保存在/tmp/calibrationdata.tar.gz这个压缩包中,到这里彩色相机的标定就结束了,关闭标定程序。

  6. 找到 /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. 开始标定

Reference

posted on 2023-09-21 17:47  小淼博客  阅读(95)  评论(0)    收藏  举报

大家转载请注明出处!谢谢! 在这里要感谢GISPALAB实验室的各位老师和学长学姐的帮助!谢谢~