Astra相机的ROS环境¶
Astra结构光相机¶
该深度相机是乐视与奥比中光orbbec合作的体感相机,对标微软Kinect,可用于三维重建,SLAM学习,也可以作为免驱UVC摄像头体感摄像头使用。
官网链接:https://orbbec3d.com/develop/,其中提供了Windows、Android、Linux、Unity的相关开发SDK。
搭建ROS环境¶
我们也可以直接使用官网提供的ros驱动进行开发,目前支持ROS Kinetic 和 Melodic
Astra相机的ros驱动源码地址:https://github.com/orbbec/ros_astra_camera,我们当前以 Melodic 为例(即Ubuntu18.04下的ROS环境),推荐到Github代下服务高速下载源码。
- 安装ROS
-
安装依赖
这里要确保通过
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
-
创建工作空间
mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make source devel/setup.bash
-
在ROS工作空间释放源码(可以直接下载此链接解压到src目录)
cd ~/catkin_ws/src git clone https://github.com/orbbec/ros_astra_camera
-
执行脚本,添加相机设备rule
roscd astra_camera ./scripts/create_udev_rules
-
编译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
:
选择深度Depth原始图话题/camera/depth/image_raw
:
配置相机内参文件¶
由于相机本身需要一些畸变配置文件来进行去畸变,所以可以通过设置如下配置,设置彩色相机和深度相机的配置文件:
1、拷贝 camera.yaml 文件和 depth.yaml 文件到cfg目录
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目录
在工作空间中执行如下命令:
rviz -d src/ros_astra_camera/rviz/astra_camera.rviz
显示如下:
如果之前没有配置相机内参,则这里不会显示点云图。
保存点云¶
由于点云图像发布的话题为,我们可以通过订阅此话题来保存点云数据。
即使用pcl_ros
包下的pointcloud_to_pcd
节点实时捕获,详见此链接
rosrun pcl_ros pointcloud_to_pcd input:=/camera/depth_registered/points
此命令会实时将指定话题的点云保存到当前目录,所以要注意使用Ctrl+C停止
如上,可见该命令执行过之后,很快就保存了3个pcd文件到当前目录,我们可以通过pcl_viewer工具预览点云。