ROS 1 平台

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

搭建 ROS 1 开发环境

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

  • Ubuntu16.04:ROS Kinetic

  • Ubuntu18.04:ROS Melodic

  • Ubuntu20.04:ROS Noetic

下载 Camport ROS 1 SDK

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

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

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

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

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

Camport ROS 1 SDK 的目录包含 src (源码)与多个 package (包)。

其中 src 包含如下两个文件夹:

  1. percipio_camera: 包括源文件和配置文件。

    Camport ros1 SDK 文件夹

    Camport ROS 1 SDK src 文件夹

  2. percipio_launch:launch 包。

    该包通过 XML 配置文件实现 ROS 节点的启动与配置,支持定义节点名称、类型、参数等属性。同时,其 launch 文件支持服务节点的声明,便于订阅服务的功能集成。包内提供四个图像显示脚本 depth.pycolor.pydepthcloud.pycloud.py,具体使用方法请参见 订阅相机节点

Camport ros1 SDK launch 包

Camport ROS 1 SDK launch 包

编译

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

catkin_make

小技巧

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

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

配置环境变量

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

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

修改相机参数

ROS 1支持通过以下两种方式修改相机参数。

方法一

percipio.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 设置为相机 SN 时,表示通过指定序列号打开相机。

  • default 设置为相机 IP 时,表示通过指定 IP 打开相机。

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

<arg name="depth_registration" default="true" />
Launch 可配置参数表

属性名

描述

取值范围

device_id

相机 SN /相机 IP

device_reconnection

相机重连开关

true/false

rgb_resolution

彩色分辨率

彩色图像的长x宽

depth_resolution

深度分辨率

深度图像的长x宽

rgb_format

彩色图像格式

mono/bayer/bgr/yuv/jpeg

bayer:包含 CSI_BAYER10GRBG、BAYER8GB、BAYER8BG、CSI BAYER12GBRG

mono:包含 MONO10

yuv:包含 YUYV、YCbCr

depth_format

深度图像格式

depth16/xyz48

depth_registration

深度对齐开关

true/false

color_undistortion

彩色图畸变校正开关

true/false

depth_speckle_filter

深度图斑点滤波器开关

true/false

max_speckle_size

斑点滤波器面积阈值

默认值:150,取值范围:10-3000

max_speckle_diff

斑点滤波器聚类

默认值:64,取值范围:5-1500

depth_time_domain_filter

时域滤波开关

true/false

depth_time_domain_num

时域滤波数量

默认值:3,范围:2-10

use_device_time

控制时间戳来源。

true 表示使用设备硬件时间,false 表示使用 ROS 主机系统时间。

true/false

备注

  • TL460-S1-E1 相机支持两种 bayer 格式的彩色图像输出:CSI_BAYER8RGGB 和 CSI_BAYER12RGGB。如通过修改 percipio.launch 文件指定相机出 bayer 格式的彩色图像,默认输出为 CSI_BAYER8RGGB,且无法通过修改该文件切换至 CSI_BAYER12RGGB。

  • 当通过 percipio.launch 文件配置了相机不支持的图像格式或分辨率时,相机将输出默认配置的图像。

方法二

通过 Percipio Viewer 软件或 SDK 设置相机参数。

  • GigE2.0 相机(除 PMD 系列与 GM 系列以外的相机)

    通过 Percipio Viewer 或 Camport SDK 3.X.X 将参数保存至相机 Storage 区,ROS 启动时将自动加载 storage 区的参数配置并开始采集图像。

  • GigE2.1 相机(PMD 系列与 GM 系列相机)

    通过 Camport SDK 4.X.X 或新版 Percipio Viewer 设置相机默认加载目标 User Set 属性组,相机上电后将自动加载该 User Set 属性组的参数配置。

启动相机节点

在开发包根目录下执行以下命令,启动相机节点:

roslaunch percipio_launch percipio.launch

若相机节点正常启动,终端会打印相机 IP、SN、深度图及彩色图格式与分辨率等信息。

备注

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

订阅话题

“src/percipio_launch” 包含以下相机节点订阅的 Python 示例脚本:

  • depth.py:使能指定相机采集指定图像格式和分辨率的深度图像。

    启动相机节点后,另开一个终端,切换到 “src/percipio_launch” 路径下。输入 python3 depth.py 并运行,弹出的窗口将实时显示指定相机的深度图像。

    depth.py 运行结果

    depth.py 运行结果

  • color.py:使能指定相机采集到指定图像格式和分辨率的彩色图像。

    启动相机节点后,另开一个终端,切换到 “src/percipio_launch” 路径下。输入 python3 color.py 并运行,弹出的窗口将实时显示指定相机的 color 图像。

    color.py 运行结果

    color.py 运行结果

  • cloud.py:使能指定相机采集到指定图像格式和分辨率的点云并保存。

    启动相机节点后,另开一个终端,切换到 “src/percipio_launch” 路径下。输入 python3 cloud.py 并运行,弹出的窗口将实时显示指定相机的原始点云。同时,该终端将打印点云保存路径与点云点数。

    cloud.py 运行结果

    cloud.py 运行结果

  • depthcloud.py:使能指定相机采集指定图像格式和分辨率的彩色点云并保存。

    percipio.launch 文件中,将 depth_registration 置为 true 并保存,启动相机节点。然后另开一个终端,切换到 “src/percipio_launch” 路径下。运行 python3 depthcloud.py,弹出的窗口将实时显示指定相机的彩色点云。同时,该终端将打印点云保存路径与点云点数。

    depthcloud.py 运行结果

    depthcloud.py 运行结果

多设备同时接入方案

  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 的设备。