Astra相机的ROS环境

Astra结构光相机

该深度相机是乐视与奥比中光orbbec合作的体感相机,对标微软Kinect,可用于三维重建,SLAM学习,也可以作为免驱UVC摄像头体感摄像头使用。

官网链接:https://orbbec3d.com/develop/,其中提供了Windows、Android、Linux、Unity的相关开发SDK。

Astra/astra.jpg

Astra/astra_arg.png

搭建ROS环境

我们也可以直接使用官网提供的ros驱动进行开发,目前支持ROS Kinetic 和 Melodic

Astra相机的ros驱动源码地址:https://github.com/orbbec/ros_astra_camera,我们当前以 Melodic 为例(即Ubuntu18.04下的ROS环境),推荐到Github代下服务高速下载源码。

  1. 安装ROS
  2. 安装依赖

    这里要确保通过 echo $ROS_DISTRO 可以输出 melodic

    sudo apt install ros-$ROS_DISTRO-rgbd-launch \
    ros-$ROS_DISTRO-libuvc \
    ros-$ROS_DISTRO-libuvc-camera \
    ros-$ROS_DISTRO-libuvc-ros
    
  3. 创建工作空间

    mkdir -p ~/catkin_ws/src
    cd ~/catkin_ws/
    catkin_make
    source devel/setup.bash
    
  4. 在ROS工作空间释放源码(可以直接下载此链接解压到src目录)

    cd ~/catkin_ws/src
    git clone https://github.com/orbbec/ros_astra_camera
    
  5. 执行脚本,添加相机设备rule

    roscd astra_camera
    ./scripts/create_udev_rules
    
  6. 编译astra_camera

    cd ~/catkin_ws
    catkin_make --pkg astra_camera
    

启动节点

在启动节点前,首先要根据设备的id,修改一下启动参数。我们打开launch文件 launch/astrapro.launch 其中有一部分配置如下:

<!-- Push down all topics/nodelets into "camera" namespace -->
<group ns="$(arg camera)">
<node pkg="astra_camera" type="camera_node" name="$(arg camera)_rgb">
    <!-- Parameters used to find the camera -->
    <param name="vendor" value="0x2bc5"/>
    <param name="product" value="0x0501"/>
        ....
</node>

这里是通过 vendor (贴牌)和 product (产品id) 来启动设备的,所以我们要使用 lsusb 命令,来查看相机的这两个信息:

ty@ty-PC:~/Workspace/ROS/catkin_ws$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 5986:066d Acer, Inc 
Bus 001 Device 002: ID 8087:0a2a Intel Corp. 
Bus 001 Device 007: ID 1532:0037 Razer USA, Ltd 
Bus 001 Device 006: ID 2bc5:0502  
Bus 001 Device 005: ID 2bc5:0403  
Bus 001 Device 004: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

我们通过对比插上设备前和插上设备后可以发现这里多出两行设备及对应总线:

Bus 001 Device 006: ID 2bc5:0502  
Bus 001 Device 005: ID 2bc5:0403 

此时,这里 2bc5:0502 代表彩色摄像头,2bc5:0403 代表深度摄像头,我们修改文件 launch/astrapro.launch 的以下内容:

<param name="product" value="0x0501"/>

替换为:

<param name="product" value="0x0502"/>

保存后,执行以下命令启动:

roslaunch astra_camera astrapro.launch

此时还暂时不能看到图像,需要通过订阅话题查看图像

预览图像及点云图

使用rqt_image_view

rosrun rqt_image_view rqt_image_view

选择彩色RGB原始图话题/camera/rgb/image_raw

Untitled.png

选择深度Depth原始图话题/camera/depth/image_raw

Astra/Untitled%201.png

配置相机内参文件

由于相机本身需要一些畸变配置文件来进行去畸变,所以可以通过设置如下配置,设置彩色相机和深度相机的配置文件:

1、拷贝 camera.yaml 文件和 depth.yaml 文件到cfg目录

camera.yaml

depth.yaml

2、修改 launch/astrapro.launch 文件

<arg name="rgb_camera_info_url"   default="" />
<arg name="depth_camera_info_url" default="" />
<!-- 修改为 -->
<arg name="rgb_camera_info_url"   default="file://$(find astra_camera)/cfg/camera.yaml" />
<arg name="depth_camera_info_url" default="file://$(find astra_camera)/cfg/depth.yaml" />
<param name="camera_info_url" value="" />
修改为
<param name="camera_info_url" type="string" value="$(arg rgb_camera_info_url)" />

关于以上文件如何生成,在讲相机标定的章节中有详细原理及步骤。

使用rviz

拷贝 astra_camera.rviz 文件到项目的rviz目录

astra_camera.rviz

在工作空间中执行如下命令:

rviz -d src/ros_astra_camera/rviz/astra_camera.rviz

显示如下:

astra_rviz

如果之前没有配置相机内参,则这里不会显示点云图。

保存点云

由于点云图像发布的话题为,我们可以通过订阅此话题来保存点云数据。

即使用pcl_ros包下的pointcloud_to_pcd节点实时捕获,详见此链接

rosrun pcl_ros pointcloud_to_pcd input:=/camera/depth_registered/points

此命令会实时将指定话题的点云保存到当前目录,所以要注意使用Ctrl+C停止

pcl_ros

如上,可见该命令执行过之后,很快就保存了3个pcd文件到当前目录,我们可以通过pcl_viewer工具预览点云。