Astra相机的ROS开发环境配置与使用


一、Astra相机简介

在这里插入图片描述
Astra相机(售价150)是由乐视与奥比中光合作生产的一款体感相机,其对标微软Kinect相机(售价800+),可用于机器视觉、3D点云、opencv、SLAM学习,支持ROS框架能够在ubuntu、windows、Android等系统下进行开发。其官方(https://orbbec3d.com/develop/)提供了相应的SDK供开发者使用。
在这里插入图片描述
相机的具体参数如下所示,本文主要讲解如何在Ubuntu端搭建基于ROS的开发环境。
在这里插入图片描述

二、搭建ROS工作空间

1.下载ROS驱动功能包

Astra相机官方提供了ROS驱动进行开发,该驱动目前仅支持ROS Kinetic 和 Melodic版本。

该项目的官方地址为https://github.com/orbbec/ros_astra_camera,由于处于外网原因,建议将其搬运至国内码云后进行下载,此处提供我搬运的码云地址:https://gitee.com/jasonli0012/ros_astra_camera
在这里插入图片描述

2.安装依赖

下载完项目源码后,需要先进行安装依赖文件。此处安装命令中的**$ROS_DISTRO**将根据你的ROS版本不同而不同,此处我选择Melodic版本进行开发,Astra相机同样支持ROS Kinetic版本的开发。

sudo apt install ros-$ROS_DISTRO-rgbd-launch ros-$ROS_DISTRO-libuvc ros-$ROS_DISTRO-libuvc-camera ros-$ROS_DISTRO-libuvc-ros

在这里插入图片描述

3.配置工作空间

完成安装依赖文件后,需要新建一个工作空间用于对Astra相机的ROS开发。

# 新建工作空间
mkdir -p astra/src
cd astra
catkin_make
source devel/setup.bash
# 将下载的源码移动至src目录下
cd src
mv ~/ros_astra_camera ~/ws/astra/src/
# 编译
cd ..
catkin_make

编译成功后如图所示:
在这里插入图片描述
此处建议大家将source devel/setup.bash写入 .bashrc文件中,以防止之后重复操作。此处我用的命令行为zsh所以修改的文件为 .zshrc,加载的文件为 setup.zsh

# bash
sudo vi ~/.bashrc
# 填写你自己的工作空间目录
source ~/ws/astra/devel/setup.bash


# zsh
sudo vi ~/.zshrc
# 填写你自己的工作空间目录
source ~/ws/astra/devel/setup.zsh

在这里插入图片描述

三、配置设备节点

1.固定设备串口号

为了方便之后进行开发,需要将Astra相机的串口号固定表示。其官方功能包中就自带脚本,只需要直接运行即可。

roscd astra_camera
# 运行脚本
./scripts/create_udev_rules

出现如下图所示内容即表明成功。
在这里插入图片描述
随后再次编译工作空间即可。

# 到达工作空间下
roscd astra_camera
cd ../..
# 编译
catkin_make -j7

上述命令中编译命令catkin_make后带的参数表示使用几核(CPU核心)进行编译,此处表明使用7核心进行编译以达到快速编译。

2.获取设备信息

由于官方提供的launch文件是通过设备的 vendor (设备贴牌)和 product (设备ID)进行启动节点的,所以首先我们需要确定设备的贴牌和ID 。

在命令行输入命令lsusb分别查看Astra相机插拔前后的设备信息,可以发现设备信息。
在这里插入图片描述
通过对比,排除多出的USB驱动外,剩余的两项即为设备信息

Bus 001 Device 019: ID 2bc5:0502  
Bus 001 Device 018: ID 2bc5:0403 

其中设备的贴牌为 2bc5 ,而0502 代表彩色摄像头,0403代表深度摄像头。

3.修改launch文件

在获取设备信息后,我们需要修改官方提供的launch文件。

# 找到launch文件所在目录
roscd astra_camera/launch
# 编辑launch文件
sudo gedit astra_pro。launch

打开launch文件后,找到第71行,将设备的属性修改为彩色相机的设备ID。
在这里插入图片描述

四、启动相机节点

启动launch文件,运行节点。出现如下图所示内容即表示运行成功。此处黄色报警内容可暂时忽略。

roslaunch astra_carma astrapro.launch

在这里插入图片描述
另开命令行运行rqt节点

 rosrun rqt_image_view rqt_image_view 

在rqt工具上方选择所需订阅的话题即可调出不同的图片,此处展示为彩色图片(rgb)中的原图(image_raw),此外也可以选择深度、红外等所需图像。
在这里插入图片描述
在这里插入图片描述

五、配置相机内参

1.下载内参文件

由于相机本身存在畸变,所以需要使用一些配置文件来完成去畸变工作。此处给出Astra相机中彩色相机和深度相机的内参配置文件。

camera.yaml文件

image_width: 640
image_height: 480
camera_name: camera
camera_matrix:
  rows: 3
  cols: 3
  data: [577.54679,   0.     , 310.24326,
           0.     , 578.63325, 253.65539,
           0.     ,   0.     ,   1.     ]
camera_model: plumb_bob
distortion_model: plumb_bob
distortion_coefficients:
  rows: 1
  cols: 5
  data: [0.125197, -0.196591, 0.006816, -0.006225, 0.000000]
rectification_matrix:
  rows: 3
  cols: 3
  data: [1., 0., 0.,
         0., 1., 0.,
         0., 0., 1.]
projection_matrix:
  rows: 3
  cols: 4
  data: [590.55457,   0.     , 306.57339,   0.     ,
           0.     , 592.83978, 256.43008,   0.     ,
           0.     ,   0.     ,   1.     ,   0.     ]

depth.yaml 文件

image_width: 640
image_height: 480
camera_name: depth_Astra_Orbbec
camera_matrix:
  rows: 3
  cols: 3
  data: [582.795354, 0.000000, 326.415982, 0.000000, 584.395006, 249.989410, 0.000000, 0.000000, 1.000000]
distortion_model: plumb_bob
distortion_coefficients:
  rows: 1
  cols: 5
  data: [-0.068613, 0.174404, 0.001015, 0.006240, 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: [586.186035, 0.000000, 329.702427, 0.000000, 0.000000, 590.631409, 250.167765, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000]

复制上述文件并放置到cfg文件夹中即可。

#路径
roscd astra_camera/cfg

在这里插入图片描述

2.使用内参文件

为了在启动launch文件时调用内参文件,需要对其进行修改。

roscd astra_camera/launch
sudo gedit astrapro.launch

在这里插入图片描述
此处使用gedit编辑器打开launch文件并修改其25、26行内容,将内参文件的地址填写入内。

# 原内容:
<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" />

随后向下,找到第84行修改为如下内容:

# 原内容:
<param name="camera_info_url" value="" />
# 替换为:
<param name="camera_info_url" type="string" value="$(arg rgb_camera_info_url)" />

在这里插入图片描述

3.启动launch

配置完成后可以再次启动节点,查看校准后的图像内容。

原始的深度图:
在这里插入图片描述
校准后的深度图:
在这里插入图片描述

六、RVIZ查看点云

1.启动rviz

除了使用rqt工具进行查看图像外,还可以使用rviz工具进行查看图像。命令行中直接启动rviz工具。

rviz

在这里插入图片描述
此时的rviz内尚未订阅任何节点,此时可以订阅查看图像信息。点击左下方Add按钮选择image类型,添加图像节点。

在这里插入图片描述
随后在左侧打开选项卡image,在image Topic中选择自己订阅的节点即可。
在这里插入图片描述
上述步骤可重复进行,从而达到订阅多个摄像头节点。如下图即为同时打开三个摄像头。
在这里插入图片描述

2.查看点云

同样再次点击左下方Add按钮,选择PointCloud2类型新建内容。
在这里插入图片描述
随后,在左侧PointCloud2选项下订阅 /camera/depth_registered/points话题,并将Global OptionsFixed Frame选为camera_depth_optical_frame。完成上述操作后,即可在中央查看到点云选项。

在这里插入图片描述

3.快捷启动rviz

为了方便之后减少重复打开rviz添加上述内容的工作,此处提供了rviz的参数文件以方便再次打开。

Panels:
  - Class: rviz/Displays
    Help Height: 0
    Name: Displays
    Property Tree Widget:
      Expanded:
        - /Global Options1
        - /Status1
        - /PointCloud21
        - /Depth1
        - /ir1
        - /RGB1
      Splitter Ratio: 0.5
    Tree Height: 361
  - Class: rviz/Selection
    Name: Selection
  - Class: rviz/Tool Properties
    Expanded:
      - /2D Pose Estimate1
      - /2D Nav Goal1
      - /Publish Point1
    Name: Tool Properties
    Splitter Ratio: 0.5886790156364441
  - Class: rviz/Views
    Expanded:
      - /Current View1
    Name: Views
    Splitter Ratio: 0.5
  - Class: rviz/Time
    Experimental: false
    Name: Time
    SyncMode: 0
    SyncSource: PointCloud2
Preferences:
  PromptSaveOnExit: true
Toolbars:
  toolButtonStyle: 2
Visualization Manager:
  Class: ""
  Displays:
    - Alpha: 0.5
      Cell Size: 1
      Class: rviz/Grid
      Color: 159; 147; 147
      Enabled: true
      Line Style:
        Line Width: 0.029999999329447746
        Value: Lines
      Name: Grid
      Normal Cell Count: 0
      Offset:
        X: 0
        Y: 0
        Z: 0
      Plane: XZ
      Plane Cell Count: 10
      Reference Frame: camera_depth_optical_frame
      Value: true
    - Alpha: 1
      Autocompute Intensity Bounds: true
      Autocompute Value Bounds:
        Max Value: 9.859000205993652
        Min Value: 0.5799999833106995
        Value: true
      Axis: X
      Channel Name: intensity
      Class: rviz/PointCloud2
      Color: 255; 255; 255
      Color Transformer: RGB8
      Decay Time: 0
      Enabled: true
      Invert Rainbow: false
      Max Color: 255; 255; 255
      Max Intensity: 4096
      Min Color: 0; 0; 0
      Min Intensity: 0
      Name: PointCloud2
      Position Transformer: XYZ
      Queue Size: 10
      Selectable: true
      Size (Pixels): 3
      Size (m): 0.009999999776482582
      Style: Squares
      Topic: /camera/depth_registered/points
      Unreliable: false
      Use Fixed Frame: true
      Use rainbow: true
      Value: true
    - Class: rviz/Image
      Enabled: true
      Image Topic: /camera/depth/image_rect
      Max Value: 1
      Median window: 5
      Min Value: 0
      Name: Depth
      Normalize Range: true
      Queue Size: 2
      Transport Hint: raw
      Unreliable: false
      Value: true
    - Class: rviz/Image
      Enabled: true
      Image Topic: /camera/ir/image
      Max Value: 1
      Median window: 5
      Min Value: 0
      Name: ir
      Normalize Range: true
      Queue Size: 2
      Transport Hint: raw
      Unreliable: false
      Value: true
    - Class: rviz/Image
      Enabled: true
      Image Topic: /camera/rgb/image_raw
      Max Value: 1
      Median window: 5
      Min Value: 0
      Name: RGB
      Normalize Range: true
      Queue Size: 2
      Transport Hint: raw
      Unreliable: false
      Value: true
  Enabled: true
  Global Options:
    Background Color: 48; 48; 48
    Default Light: true
    Fixed Frame: camera_depth_frame
    Frame Rate: 30
  Name: root
  Tools:
    - Class: rviz/Interact
      Hide Inactive Objects: true
    - Class: rviz/MoveCamera
    - Class: rviz/Select
    - Class: rviz/FocusCamera
    - Class: rviz/Measure
    - Class: rviz/SetInitialPose
      Theta std deviation: 0.2617993950843811
      Topic: /initialpose
      X std deviation: 0.5
      Y std deviation: 0.5
    - Class: rviz/SetGoal
      Topic: /move_base_simple/goal
    - Class: rviz/PublishPoint
      Single click: true
      Topic: /clicked_point
  Value: true
  Views:
    Current:
      Class: rviz/Orbit
      Distance: 3.863161325454712
      Enable Stereo Rendering:
        Stereo Eye Separation: 0.05999999865889549
        Stereo Focal Distance: 1
        Swap Stereo Eyes: false
        Value: false
      Focal Point:
        X: 2.0370023250579834
        Y: -1.0987344980239868
        Z: -0.031386714428663254
      Focal Shape Fixed Size: true
      Focal Shape Size: 0.05000000074505806
      Invert Z Axis: false
      Name: Current View
      Near Clip Distance: 0.009999999776482582
      Pitch: 0.004796733148396015
      Target Frame: <Fixed Frame>
      Value: Orbit (rviz)
      Yaw: 2.4886555671691895
    Saved: ~
Window Geometry:
  Depth:
    collapsed: false
  Displays:
    collapsed: false
  Height: 961
  Hide Left Dock: false
  Hide Right Dock: false
  QMainWindow State: 000000ff00000000fd0000000400000000000001fa00000323fc020000000afb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f0070006500720074006900650073020000019b000001b500000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d000001a6000000c900fffffffb0000000a0044006500700074006801000001e9000000ae0000001600fffffffb00000006005200470042010000029d000000c30000001600fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000019200000323fc0200000005fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000003d00000211000000a400fffffffb000000040069007201000002540000010c0000001600fffffffb0000000a0049006d00610067006501000002fb000000c00000000000000000fb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000007800000003efc0100000002fb0000000800540069006d0065010000000000000780000002eb00fffffffb0000000800540069006d00650100000000000004500000000000000000000003e80000032300000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
  RGB:
    collapsed: false
  Selection:
    collapsed: false
  Time:
    collapsed: false
  Tool Properties:
    collapsed: false
  Views:
    collapsed: false
  Width: 1920
  X: 0
  Y: 27
  ir:
    collapsed: false

新建文件astra_camera.rviz并将上述文件保存其内,最后将文件反正如下目录即可。

# 打开功能包根目录
roscd astra_camera
# 新建文件夹
mkdir rviz
cd rviz
# 复制上述文件至astra_camera.rviz
sudo vi astra_camera.rviz

在这里插入图片描述
最后,即可快捷启动rviz环境了!

roscd astra_camera/
rviz -d rviz/astra_camera.rviz

在这里插入图片描述
在这里插入图片描述

4.保存点云信息

如果需要实时保存当前点云信息,可以直接运行如下节点。该节点将把当前点云信息保存至当前目录下。

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

在这里插入图片描述
保存点云信息时,要注意及时停止(Ctrl+C)否则会生产大量的pcd文件。
在这里插入图片描述

5.查看pcd文件

查看pcd文件需要使用特定工具,此处介绍工具pcl_viewer

# 安装
sudo apt-get install  pcl-tools

查看文件的方式如下,其中xxxx替换为所需查看的文件名。

pcl_viewer xxxx.pcd

在这里插入图片描述
打开后,可以使用鼠标进行放大、缩小、移动,操作同rviz一样。同时可以点击键盘上的数字键1~5切换不同的颜色。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45929038/article/details/114124142
今日推荐