ROS1 平台

ROS(Robot Operating System,下文简称 ROS)是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。

搭建 ROS1 开发环境

根据 Ubuntu 版本,安装对应的 ROS1 开发平台。

  • Ubuntu16.04:ROS Kinetic

  • Ubuntu18.04:ROS Melodic

  • Ubuntu20.04:ROS Noetic

下载 Camport ROS1 SDK

ROS1 SDK 支持 ROS Kinetic、ROS Melodic 和 ROS Noetic 平台。

选择以下任意方式,下载 Camport ROS1 SDK:

  • 使用浏览器下载:https://gitee.com/percipioxyz/camport_ros.git

  • 使用 git 指令获取本地副本:打开终端,切换到需存放 SDK 的工作目录下,输入 git clone 命令克隆远程仓库。

    git clone https://gitee.com/percipioxyz/camport_ros.git
    

Camport ROS1 SDK 的目录如下图所示:

Camport ROS1 SDK目录

Camport ROS1 SDK 目录

  • percipio_camera:包括源文件和配置文件。

  • percipio_launch:launch 包。

编译

在开发包根目录下执行以下命令,进行编译:

catkin_make

小技巧

如果未安装 catkin 命令,需先安装 catkin。

编译后会生成 build 文件夹(包含中间文件)和 devel 文件夹(包含头文件、动/静态库、可执行文件)。

配置环境变量

在开发包根目录下执行以下命令,配置环境变量:

echo "source <开发包存放路径>/camport_ros/devel/setup.bash" >> ~/.bashrc

修改 Launch 配置

按照以下步骤,在 percipio.launch 文件中配置相机启动时加载的参数:

  1. 执行以下命令,打开 percipio.launch 文件:

cd src/percipio_launch/launch/
gedit percipio.launch
  1. 根据需要修改配置。

  • 在 default 中指定 相机 SN:

<arg name="device_id" default="207000106930" />

小技巧

device_id 默认值为 #1,表示默认打开找到的第一个相机。

  • 在 default 中设置左右灰度图像曝光完全同步开关:

<arg name="cmos-sync" default="true" />
  • 在 default 中设置深度图和彩色图对齐开关:

<arg name="depth_registration" default="true" />

注解

只有同时打开彩色图和深度图后,此项使能开关才会生效。对于没有 RGB 组件的相机此设置无效。

Launch 可配置参数表

组件

参数名

描述

Device组件

device_id

相机序列号/相机IP

gvsp_resend

网络重传

cmos-sync

数据同步

packet-delay

帧间延迟

packet-size

传输包大小

time-sync

对时功能

NTP server IP

服务器IP

device_reconnection

相机重连

Depth组件

depth_resolution

深度分辨率

scale_unit

像素值的单位

ToF特性

tof_channel

调制频率

tof_depth_quality

深度质量

tof_filter_threshold

飞点滤波

tof_modulation_threshold

激光调制光强

tof_jitter_threshold

抖动过滤

tof_hdr_ratio

高动态范围比

tof_anti_sunlight_index

抗阳光参数

tof_anti_interference

多机抗干扰

SGBM参数

sgbm_match_window_height

视差匹配窗口的高

sgbm_match_window_width

视差匹配窗口的宽

sgbm_disparity_num

视差搜索范围

sgbm_disparity_offset

开始搜索的视差值

sgbm_image_channel_number

用于深度计算的 IR 图像数量

sgbm_semi_global_param_p1

相邻像素 (+/-1) 约束惩罚参数 P1

sgbm_semi_global_param_p1_scale

相邻像素 (+/-1) 约束惩罚参数 P1_scale

sgbm_semi_global_param_p2

周围像素约束惩罚参数 P2

sgbm_enable_half_window_size

搜索滤波开关

sgbm_uniqueness_factor_param

最优匹配点与次优匹配点的百分比

uniqueness_min_absolute_diff

最优匹配点与次优匹配点差值的绝对值

sgbm_enable_lrc_check

左右一致性检查开关

sgbm_lrc_max_diff

左右一致性检查参数

sgbm_enable_median_filter

中值滤波开关

sgbm_median_filter_thresh

中值滤波值

Color组件

color_resolution

彩色分辨率

修改 Percipio.cfg 配置

Percipio.cfg 文件中的参数支持动态调节,修改 Percipio.cfg 参数最大值和最小值后,参见 运行 调出 rqt_reconfigure_Param 页面并进行调节。

  1. 在软件包根目录下执行以下命令,打开 Percipio.cfg 文件。

    cd src/percipio_camera/cfg/
    gedit Percipio.cfg
    
    Percipio.cfg
  2. 在 gen.add() 中设置参数的最小值和最大值。

    小技巧

    1. gen.add(name, type, level, description, default, min, max) 表示属性名称、类型、优先级、描述、默认值、最小值、最大值。

    2. 布尔类型的值必须写成 True 或 False (首字母大写)。

    注解

    1. 若不知道相机属性的最小值和最大值,可通过以下方式查看相机支持的组件和属性:

      • 可运行 SDK 示例程序 DumpAllFeatures,在列出的信息中查看相机支持的组件和属性。

      • 可运行 SDK 示例程序 DumpAllFeatures -d,在生成 fetch_config.xml 文件中查看相机支持的组件和属性。

    2. 以下参数的设置范围可自定义:

      • depth_speckle_filter:斑点滤波开关。斑点滤波用于过滤深度图中的小块斑点噪声。

      • max_speckle_size:斑点噪声的最大尺寸。尺寸大于该设定值的斑点被认为不是噪声。建议设置范围为 [10,3000]。

      • max_speckle_diff:同块斑点中相邻像素的最大深度差值。若相邻像素的深度差值大于该设定值,则认为该相邻像素属于两块斑点。建议设置范围为 [10,1500]。

      • data_skip:跳帧。例如,图漾发布节点实际是 30fps,ROS 接收节点只想接收 10fps,此时可将 data_skip 设置为 3。建议设置范围为 [0,20]。

      • z_scaling:深度图中像素值的单位。建议设置范围为 [0,8]。

      • use_device_time:默认设置为 True,表示使用相机内部时间戳;设置为 False 时,表示使用 ROS 的时间戳。

  3. 执行以下命令,重新编译。编译后,Percipio.cfg 修改生效。

    catkin_make
    
Percipio.cfg 可配置参数表

参数名

类型

描述

laser_power

int

激光亮度

auto_exposure

bool

自动曝光时间控制

auto_exposure_p1_x

double

ROI起点x坐标

auto_exposure_p1_y

double

ROI起点y坐标

auto_exposure_p2_x

double

ROI终点x坐标

auto_exposure_p2_y

double

ROI终点y坐标

auto_white_balance

bool

自动白平衡

rgb_exposure_time

int

Color的曝光时间

rgb_analog_gain

int

Color的模拟增益

rgb_r_gain

int

Color数字增益R

rgb_g_gain

int

Color数字增益G

rgb_b_gain

int

Color数字增益B

rgb_aec_target_v

int

自动曝光目标亮度值

ir_exposure_time

int

IR的曝光时间

ir_analog_gain

int

IR的模拟增益

ir_gain

int

IR的增益

tof_hw_speckle_size

int

TM260硬件斑点噪声最大尺寸

tof_hw_speckle_diff

int

TM260-E1硬件同块斑点中相邻像素的最大深度差值

depth_speckle_filter

bool

降噪滤波开关

max_speckle_size

int

斑点噪声最大尺寸

max_speckle_diff

int

同块斑点中相邻噪声最大深度差值

data_skip

int

跳帧

z_scaling

double

Z值的缩放

use_device_time

bool

是否使用相机的时间戳

订阅

在开发包根目录下执行以下命令,订阅服务:

roslaunch percipio_launch percipio.launch

注解

运行过程中,请勿关闭该服务终端。

运行

  1. 重新开一个终端,执行以下命令,运行 RViz:

    rosrun rviz rviz
    
  2. 添加图像显示。

    1. 在页面左侧 Global Options 设置项中设置 “Fixed Frame” 为 “camera_depth_frame”。

      Global Options 设置项
    2. 添加深度图显示。

      1. 点击 add, 添加 “Camera”,命名为 Depth Camera。

        添加 Depth Camera
      2. 在页面左侧新增的 Depth Camera 设置项中设置“Image Topic”为“/camera/depth/image”。

        添加 Depth Camera
    3. 添加彩色图显示。

      1. 点击 add, 添加 “Camera”,命名为 Color Camera。

      2. 勾选在页面左侧新增的 Color Camera,并在设置项中设置“Image Topic”为“/camera/rgb/image”。

    4. 添加 IR 图显示。

      1. 点击 add, 添加 “Image”,命名为 IR Camera。

      2. 勾选在页面左侧新增的 IR Camera,并在设置项中设置“Image Topic”为“/camera/ir/image”。

    5. 添加点云图显示。

      注解

      DepthCloud 是输入深度图和内参给 ROS,ROS 内部通过 rgbd_launch 转换出来的点云。

      1. 点击 add, 添加 “DepthCloud”,命名为 Depth Cloud。

      2. 勾选在页面左侧新增的 Depth Cloud,并在设置项中设置“Depth Map Topic”为“/camera/depth/image”。

      注解

      PointCloud2 是输入点云数值给 ROS,ROS 显示出来的点云。

      1. 点击 add, 添加 “PointCloud2”,命名为 Point Cloud 2。

      2. 勾选在页面左侧新增的 Point Cloud 2,并在设置项中设置“Topic”为“/camera/PointCloud2”。

  3. 根据成像情况,动态调试相机参数。

    执行以下命令,调出 rqt_reconfigure_Param 页面。选择 driver,并在页面中调节参数。

    rosrun rqt_reconfigure  rqt_reconfigure
    
    调节参数

多设备同时接入方案

  1. 编辑 .launch 文件。

    参考 percipio.launch 文件,创建多个 .launch。每个 .launch 文件中 “camera” 和 “device_id” 配置成不同值。例如,要同时运行两个设备,创建两个 .launch 文件 percipio_camera1.launchpercipio_camera2.launch

    percipio_camera1.launch 内容如下:

    <arg name="camera" default="camera1">
    ......
    <arg name="device_id" default="207000010443">
    ......
    

    percipio_camera2.launch 内容如下:

    <arg name="camera" default="camera2">
    ......
    <arg name="device_id" default="207000010113">
    ......
    
  2. 在开发包根目录下执行以下命令,重新配置环境变量:

    source ./devel/setup.bash
    
  3. 通过运行命令 roslaunch percipio_launch percipio_camera1.launch 打开序列号为 207000010443 的设备。

    通过运行命令 roslaunch percipio_launch percipio_camera2.launch 打开序列号为 207000010113 的设备。