> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mrdvs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Linux 示例使用手册

> 配置 MRDVS 相机 SDK 的 Linux 开发环境，并编译和运行 C/C++、Java、ROS 和 ROS2 示例。

> [!NOTE]
>
> 文档版本：V1.0；修订日期：2024-10-12。

## 概述

MRDVS 相机 SDK Linux 开发包提供 C/C++、Java（HTTP 服务）、ROS 和 ROS2 示例。示例用于说明 SDK 的基础用法；请基于实际项目补充业务逻辑和异常处理。

建议先完成环境准备、安装脚本和示例目录确认，再按目标语言阅读对应的编译与运行章节。附录提供常用依赖与测试包的安装方法。

## 系统与环境

### 兼容的系统与依赖版本

推荐使用以下几种 linux 系统，默认的程序版本见下表：

| 系统版本 | CMake / GCC | OpenCV | PCL | ROS | ROS2 |
| - | - | - | - | - | - |
| Ubuntu16.04 | 3.5/Gcc-5 | 3.2.0 | 1.7.2 | Kinetic | Ardent、Bouncy |
| Ubuntu18.04 | 3.18/Gcc-7 | 4.5.1 | 1.9.1 | Melodic | Dashing、Eloquent、Crystal |
| Ubuntu20.04 | 3.22/9.3.0 | 4.5.1 | 1.12.1 | Noetic | Foxy、Galactic |
| Ubuntu22.04 | 3.22/11.3.0 | 4.6.0 | 1.12.1 | Ninjemys | Humble、Iron |

### 查看系统与依赖版本

#### 查看系统版本

```bash theme={null}
uname -a
```

结果：

![查看系统版本相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-view-system-version.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=0a2d7ebced1cf826f3da19810dac5da4)

操作系统发行版本号：5.15.0

* \*\*主版本号：\*\*5
* \*\*次版本号：\*\*15【奇数为开发版本，偶数为稳定版本】
* \*\*修订版本号：\*\*0【修改的次数】
* \*\*此版本的第 N 次修改：\*\*97
* **内核版本：**#107\~20.0.4.1，通常所说的系统版本就是内核版本

#### 查看 CMake 版本

```bash theme={null}
cmake --version
```

结果：

![查看 Cmake 版本相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-view-cmake-version.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=3d2d56bc96c4f48a5463e6b87f110727)

示例中的 CMake 版本为 `3.16.3`。

#### 查看 GCC 版本

```bash theme={null}
gcc -v
```

结果：

![查看 Gcc 版本相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-view-gcc-version.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=c7dc9544803fe203ba6f86a6a76eac35)

版本号在左下角的蓝色框内，此处版本为：9.4.0

#### 查看 OpenCV 版本

```bash theme={null}
pkg-config --modversion opencv
```

结果：

![查看 Opencv 版本相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-view-opencv-version.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=56afdccc910f0c4d53f26f0a0df52790)

此处版本为 3.2.0

#### 查看 PCL 版本

```bash theme={null}
dpkg -l libpcl-dev
```

结果：

![查看 Pcl 版本相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-view-pcl-version.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=867643627fb01a29add40c1d2e1c9079)

此处版本为 1.8.1

#### 查看 ROS 版本

```bash theme={null}
rosversion -d
```

结果：

![查看 ROS 版本相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-view-ros-version.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=5cd15be531bc3c1afd14e9d2014dffec)

此处版本为 eloquent（Ubuntu18.04 对应的 ros2 版本）

![查看 ROS 版本相关图示 2](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-view-ros-version-2.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=862f0edcf73c5419186b8bebb96e4455)

此处版本为 noetic（Ubuntu20 对应的 ros1 版本）

### 安装基础开发环境

```bash theme={null}
sudo apt update
```

结果如下：

![搭建基础开发环境相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-building-a-basic-development-environment.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=9abf280ac9f406db42455df2dcd08c77)

#### 安装 CMake

```bash theme={null}
sudo apt install cmake
```

![安装 Cmake相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-installation-cmake.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=343a176e647d14754c4ec939a1c2e2a2)

#### 安装 GCC

```bash theme={null}
sudo apt install build-essential
```

![安装 Gcc相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-install-gcc.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=0de0a95d6c2d266c5ee62362ea36ac4f)

### 安装可选开发依赖

#### 安装 OpenCV（用于显示相机图像）

```bash theme={null}
sudo apt-get install libopencv-dev
```

![安装 Opencv【可显示相机图像】相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-install-opencv-can-display-camera-images.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=2d198482de6242a7b996cf46e67a11e5)

#### 安装 PCL（用于显示点云）

```bash theme={null}
sudo apt-get install libpcl-dev
```

![安装 Pcl【可显示点云】相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-install-pcl-can-display-point-cloud.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=d3a7769cccce429095b1c579bfee93b1)

## 准备示例代码

### 执行安装脚本

1. 解压 `Lanxin-MRDVS` 文件并进入该目录。

![执行安装脚本相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-executing-the-installation-script.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=e0e75e667c0742cc03b63f0f3943cad5)

2. 在该目录打开终端。
3. 执行 `install.sh`。

![执行安装脚本相关图示 2](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-executing-the-installation-script-2.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=84d8f316dc8fe5dd06b324aac9cb9ab0)

4. 检查 `/opt/` 目录中是否存在安装目录。

![执行安装脚本相关图示 3](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-executing-the-installation-script-3.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=49268a468bc08b9588e84cd8b82d02ca)

5. 若目录存在，表示安装成功。
6. 若安装失败，请手动将文件添加至 `/opt/` 目录。
7. 执行 `set_socket_buffer_size.sh`。

![执行安装脚本相关图示 4](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-executing-the-installation-script-4.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=e65b729b296e7e02f127f06c665956e3)

8. 安装完成。

### 示例目录

进入到 Sample 目录下，目录内容如下：

![示例代码介绍相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-sample-code-introduction.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=03f4b1fc22bc61f2b9dc0698f7aace40)

* `C`：C 与 C++ 示例。
* `Java`：HTTP 服务示例，用于间接调用 SDK。
* `Ros`：ROS 示例。
* `Ros2`：ROS2 示例。

#### C 与 C++ 示例

进入 C 目录，目录内容如下：

![C 与 C++示例代码相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-c-and-c-sample-code.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=b867d07505df9d21c68807c3035147b1)

目录包含 9 个文件夹和 1 个 `CMakeLists.txt` 文件；每个示例文件夹包含一个 C++ 源文件。

每个 cpp 大致实现的功能如下：

* application\_obstacle：获取相机流数据并开启避障算法，输出算法结果
* application\_pallet：获取相机流数据并开启托盘算法，输出算法结果
* arm\_local\_camera：在相机 ARM 端调用 SDK 并获取流数据
* frame\_callback：使用回调方式获取相机流数据
* multi\_cameras：打开多个相机并获取流数据
* single\_camera：打开单个相机并获取流数据
* single\_camera2：通过结构体方式获取帧数据

根据目标功能选择对应示例进行测试和修改。

#### Java 示例

进入 java 目录，目录内容如下：

![Java 示例代码相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-java-sample-code.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=4afb399de54488c59575cc8246f7569a)

目录中包含 2 个文件夹以及一个 postman.json 文件和 README

* `Config`：服务器配置。
* `Middleware`：服务器主体。
* `LxCamera.postman_collection.json`：Postman 集合文件。
* `README`：Java 虚拟服务器说明。

#### ROS 示例

进入 ros 目录中，目录内容如下：

![ROS 示例代码相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-ros-sample-code.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=6d7644e050ae1621e445baa4bb086960)

* `lx_camera_node_ws`：标准 ROS 驱动。
* `README.EN`：节点编译与创建说明。

#### ROS2 示例

进入 ros2 目录中，目录内容如下：

![ROS2 示例代码相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-ros2-sample-code.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=7a632738b3ac8ca1541f73c89fe69e95)

* `lx_camera_node_ws`：标准 ROS2 驱动。
* `README.EN`：节点编译与创建说明。

#### ROS V1 Pro 示例

进入 ros-v1pro 目录中，目录内容如下：

![ros-v1pro 示例代码相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-ros-v1pro-sample-code.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=241b79e776b64f38d11608814dd635c0)

* `src`：标准 ROS 驱动。
* `README`：节点使用说明。
* `README.pdf`：节点使用说明。

## 编译并运行示例

### C 与 C++ 示例

进入示例中的 C 文件夹：

![C 与 C++示例代码的编译与运行相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-compiling-and-running-c-and-c-sample-code.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=61d96b6781d8e98e5761e10419ecdcbf)

在 `C` 目录中执行：

```bash theme={null}
mkdir build
cd build
cmake ..
make
```

成功执行后进入 build 文件夹中，应当如下：

![C 与 C++示例代码的编译与运行相关图示 2](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-compiling-and-running-c-and-c-sample-code-2.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=e4874b01a0ce3b5e4a464cb2dcb7e1f7)

可执行文件就在 bin 目录中，进入 bin 目录应当如下：

![C 与 C++示例代码的编译与运行相关图示 3](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-compiling-and-running-c-and-c-sample-code-3.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=346bfeb2aff786c0ca17247349ede456)

除 arm 示例外，其余示例都会编译，可执行文件名与示例文件夹名相同，直接运行即可

### Java 示例

Java 示例提供 HTTP 服务与 Postman 集合，不直接提供业务源码。若需通过 HTTP 间接控制相机，可使用该示例。

![java 示例运行流程相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-the-java-sample-running-process.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=3a8a6187b48568ab241052deab892038)

运行流程如下：

* 在 `config` 目录中修改 `Configs.json` 的 `http_sever_host` 与 `http_sever_port` 字段。

![java 示例运行流程相关图示 2](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-java-sample-running-process-2.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=8b54e07708db737058ee4b1759dbee4e)

* 在 `middleware` 目录中执行 `start.sh`，启动中转服务器。

![java 示例运行流程相关图示 3](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-the-java-sample-running-process-3.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=29f2ecda420e10e3b9e65d04ed5fa495)

* 使用 Postman 打开 `LxCamera.postman_collection.json`，向示例端口发送请求。

### ROS 示例

在 `ROS` 目录打开终端并启动 ROS master：

```bash theme={null}
roscore
```

![ROS 示例代码的编译与运行相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-compiling-and-running-ros-sample-code.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=2abf9ae09b79cf98851a184eabc43891)

![ROS 示例代码的编译与运行相关图示 2](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-compiling-and-running-ros-sample-code-2.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=ff6e4da87522624277272d25eaf6d7cf)

在新的终端中进入 `lx_camera_node_ws` 目录并编译：

```bash theme={null}
catkin_make
```

![ROS 示例代码的编译与运行相关图示 3](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-compiling-and-running-ros-sample-code-3.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=92179cad9a06112ae547a3de7f7d102a)

成功执行后会显示如下：

![ROS 示例代码的编译与运行相关图示 4](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-compiling-and-running-ros-sample-code-4.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=4e1725768d2140c2e89944214364ccac)

此时文件夹内 devel 和 build 是编译生成的：

![ROS 示例代码的编译与运行相关图示 5](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-compiling-and-running-ros-sample-code-5.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=dc522370cfbe1b4043a3292e06a85689)

加载环境：

```bash theme={null}
source devel/setup.bash
```

按需运行一个节点：

| 节点 | 启动命令 |
| - | - |
| 普通节点 | `roslaunch lx_camera_ros lx_camera_ros.launch` |
| 避障算法 2 | `roslaunch lx_camera_ros obstacleV2.launch` |
| 避障算法 | `roslaunch lx_camera_ros obstacle.launch` |
| 托盘算法 | `roslaunch lx_camera_ros pallet.launch` |

各节点不能同时启用。

### ROS2 示例

进入 ros2 文件夹，文件夹内容如下：

![ROS2 示例代码的编译与运行相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-compiling-and-running-ros2-sample-code.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=db8f1924fd069f953b46a9195107bcb5)

ROS2 示例节点使用 `colcon` 编译。

```bash theme={null}
sudo apt install python3-colcon-common-extensions
```

![ROS2 示例代码的编译与运行相关图示 2](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-compiling-and-running-ros2-sample-code-2.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=71d0d9a1da6acf57b38831ee18311eec)

安装 ROS PCL 依赖；将命令中的发行版名称替换为当前 ROS2 版本：

```bash theme={null}
sudo apt-get install ros-foxy-pcl*
```

进入 `lx_camera_node_ws` 目录并编译：

```bash theme={null}
colcon build
```

根据电脑性能不同，编译通常会需要 30 秒到 120 秒，成功编译后会显示如下：

![ROS2 示例代码的编译与运行相关图示 3](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-compiling-and-running-ros2-sample-code-3.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=67214db6dc09797cb6ca79574a54c899)

部分警告是因为版本兼容问题，无需处理，编译完成后文件夹内容如下：

![ROS2 示例代码的编译与运行相关图示 4](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-compiling-and-running-ros2-sample-code-4.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=c7b05ca8cd4ed6cddc79f89bb2759381)

加载环境：

```bash theme={null}
source install/setup.bash
```

按需运行一个节点：

| 节点 | 启动命令 |
| - | - |
| 普通节点 | `ros2 launch lx_camera_ros lx_camera_ros_launch.py` |
| 避障算法 2 | `ros2 launch lx_camera_ros obstacleV2.launch.py` |
| 避障算法 | `ros2 launch lx_camera_ros obstacle.launch.py` |
| 托盘算法 | `ros2 launch lx_camera_ros pallet.launch.py` |

各节点不能同时启用。

### ROS V1 Pro 示例

`ros-v1pro` 是 V1 Pro 相机专用 ROS 驱动。请优先查阅该目录中的 `README.pdf`。

![ros-v1pro 示例代码的编译与运行相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-compiling-and-running-the-ros-v1pro-sample-code.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=30db2690fdfad5005d71b9ee8aaf9b92)

进入 `ros-v1pro` 目录并编译：

```bash theme={null}
catkin_make
```

![ros-v1pro 示例代码的编译与运行相关图示 2](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-compiling-and-running-the-ros-v1pro-sample-code-2.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=ea99ee48ffbe6c4e30aaf29923527c8e)

加载环境：

```bash theme={null}
source devel/setup.bash
```

![ros-v1pro 示例代码的编译与运行相关图示 3](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-compiling-and-running-the-ros-v1pro-sample-code-3.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=ff9a1ec399debfa6d41284c1c201ac43)

按需运行一个节点：

| 节点 | 启动命令 |
| - | - |
| 定位节点 | `roslaunch lx_camera_ros localization.launch` |
| 建图节点 | `roslaunch lx_camera_ros mapping.launch` |
| 虚拟数据节点 | `roslaunch lx_camera_ros sensor_sim.launch` |

从上往下依次是：运行定位节点，运行建图节点，运行虚拟数据节点，各节点不能同时启用。

## 示例代码说明

在这个部分中，所有代码与伪代码将会分成几个部分来讲，一般来说一个小节内的都属于同一个文件，除特殊文件做详细解释外，源码文件只解释大致模块，详细的解释在代码中有注释。

### C 与 C++

#### CMakeLists.txt

![CMakeLists相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-cmakelists.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=bf49034b600f1e9ad6247efa3c80e7ea)

![CMakeLists相关图示 2](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-cmakelists-2.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=2f4b387534b117c5555000b52e4e3cad)

![CMakeLists相关图示 3](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-cmakelists-3.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=6a87b68051aa373e1f50bb4c13e4f544)

#### 5.1.2 application\_obstacle 和 application\_pallet

![application\\\_obstacle 和 application\\\_pallet相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-application-obstacle-and-application-pallet.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=d70b112f8b0ba0b3b76ffc0bc36da903)

#### 5.1.3 arm\_local\_camera

![arm\\\_local\\\_camera相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-arm-local-camera.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=efc3ac9a0cd987c0b85796e6574e8559)

#### 5.1.4 frame\_callback

![frame\\\_callback相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-frame-callback.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=0bbe85ebcc3859953609a750ab635883)

#### 5.1.5 multi\_cameras

![multi\\\_cameras相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-multi-cameras.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=9842dc6d4a934ddfb788865eeef016f9)

#### 5.1.6 single\_camera

![single\\\_camera相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-single-camera.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=cb74bb189bf26ff74b18bf3a195a46f0)

![single\\\_camera相关图示 2](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-single-camera-2.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=a4797cf22cc413dd6cc667c0a15e3920)

#### 5.1.7 single\_camera2

![single\\\_camera2相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-single-camera2.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=5197fac017888c403d8eaef3e90d4149)

### 5.2 java

Java 示例中提供的仅是一个 HTTP 服务器，因此说明也只是对接口以及消息格式的说明，用 postman 打开示例文件后如下图：

![java相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-java.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=94f6b754148ad73002106e6eb82a8ccf)

消息都是 post 方式，在发送前，记得修改 IP 为服务器的 ip，但是 url 不要修改，url 为服务器内部写死，响应的消息格式与内容都在 body 中示例中提供的接口如下：

![java相关图示 2](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-java-2.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=72e5ffe428e58e85eb6e7c225d8e9f6a)

1.DcGetApiVersion：获取 SDK 的版本号吗，没有参数输入

![java相关图示 3](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-java-3.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=24d0b0380b6b59ff6b152c94dc395097)

2.DcSetInfoOutput：设置 SDK 日志输出的路径，参数如下：

* log\_path：日志输出的路径
* print\_level：日志打印的等级
* enable\_screen\_print：日志是否在控制台打印

3.DcLog：输出日志到 SDK 日志中，任何输入的内容都会被打印到 SDK 日志中

4.DcGetDeviceList：获取设备列表，没有输入，输入为 JSON

5.DcOpenDevice：打开设备，输入如下：

![java相关图示 4](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-java-4.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=4f1bec4ef8c1da5bf9ef4f1828cf6075)

* open\_mode：打开相机的模式
* param：打开相机的参数

6.DcStartStream：让某一个相机开始推送流数据，输入参数如下：

![java相关图示 5](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-java-5.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=1bdac34a2ee15bfeba215bbca05f72f4)

* handle：相机的句柄，在 DcOpenDevice 中会有返回

7.DcSetCmd：对相机下发命令，输入如下：

![java相关图示 6](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-java-6.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=af9caa077504d2276d34676a8b1efeac)

* handle：要设置的相机的句柄
* cmd：指令编号

8.DcGetPtrValue：获取指针数据（图像，参数等），输入如下：

* handle：要设置的相机的句柄
* cmd：指令编号

9.DcSetIntValue：设置相机 int 型的参数，输入如下：

![java相关图示 7](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-java-7.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=336d66aa5bea4a54de03edec7679194b)

* handle：要设置的相机的句柄
* cmd：指令编号
* value：要设置的值

10.DcGetIntValue：获取设备 int 型的参数，输入如下：

* handle：要设置的相机的句柄
* cmd：指令编号

11.其他相关说明参见下表：

| 发 | `{"log_path" : "./", "print_level" : 2, "enable_screen_print" : 0 }` | 收 | `{"errCode" : 0 }` |
| - | - | - | - |
| 发 | `{"open_mode" : 0, "param" : "0"<br />}` | 收 | `{"algor_ver" : "VER_1.0.2.230315", "dev_type" : "M4 camera", "errCode" : 0,<br />"firmware_ver" : "V1.0.0.3_230315",<br />"handle" : 174539057817095, "id" : "f13141144bb1",<br />"ip" : "192.168.100.16:3956",<br />"mac" : "9e:be:0a:8a:66:07",<br />"name" :"camera_M4_192.168.100.16_3956",<br />"sn" : "9a5ed62d22b34bb1"<br />}` |
| 发 | `{"handle" :174539057817<br />095,<br />"cmd" : 6001<br />}` | 收 | `{"errCode" : 0,<br />"value" :"\u0011\u0001\u0014\u0001..." }` |

### 5.3 ROS1 & ROS2

在 ros 说明中，不会讲述驱动源码相关内容，而是讲述 launch 文件中的配置所对应的内容，如何调整配置，如何发送以及订阅消息。提供的 ros 节点中已经包含了大部分功能，所以不建议直接修改驱动源码。如有特殊需要可以先行了解 C++示例中的代码流程后再对驱动源码进行修改。

**执行 ros 驱动时，必须确保系统默认路径中 opencv 和 pcl 的版本唯一，否则 ros链接库时会发生错误，可能导致编译失败或者运行崩溃。**

#### 5.3.1 ROS1 launch 文件说明

##### 5.3.1.1 所有的 launch 文件

1.在 src/launch 文件夹中有如下文件：

![所有的 launch 文件相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-all-launch-file.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=aefc36b0963cfd2a880c7eb1a1216ba7)

* localization.launch：视觉定位节点的运行文件
* lx\_camera\_ros.launch：普通节点的运行文件
* mapping.launch：视觉定位建图的运行文件
* obstacle.launch：避障算法的运行文件
* obstacleV2.launch：避障算法 V2 的运行文件
* pallet.launch：托盘算法的运行文件
* sensor\_sim.launch：模拟定位数据的运行文件

2.可以通过运行不同的 launch 文件来执行节点的不同功能，**所有节点中除localization、mapping 和 sensor 之外，参数内容都是一致的，只是配置有所不同**，在以下小节中会详细介绍，对于 localization、mapping 和 sensor 三个 launch 文件的参数详细介绍请看 ros-v1pro 节点中的介绍。

##### 5.3.1.2 相机 ip、流配置、工作模式配置、点云单位等

![相机 ip、流配置、工作模式配置、点云单位等相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-camera-ip-stream-configuration-working-mode-configuration-point-cloud-unit-and-other.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=d0a13fe668ee7ba3a89247b64f078da7)

* ip：需要连接的相机 IP，若为 0 则默认连接第一个
* log\_path：SDK 日志储存路径，需要填入绝对路径
* is\_xyz：是否推送点云数据
* is\_depth：是否推送深度数据
* is\_amp：是否推送强度图数据
* is\_rgb：是否推送 RGB 图数据
* lx\_work\_mode：工作模式
* lx\_application：是否开启算法，0：关闭，1：避障算法，2：托盘算法，3：定位算法，4：避障算法 V2
* lx\_tof\_unit：点云单位，1 为米，0 为毫米，使用 rviz 查看时需要修改为 1

##### 5.3.1.3 相机位姿配置

![相机位姿配置相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-camera-pose-configuration.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=e7b74d06e6aaceefd29097021868c62f)

可以配置点云的旋转角度以及平移向量。

* X：相机距离点云中心的 X 平移量
* Y：相机距离点云中心的 Y 平移量
* Z：相机距离点云中心的 Z 平移量
* Yaw：点云绕 Z 轴旋转的角度
* Roll：点云绕 X 轴旋转的角度
* Pitch：点云绕 Y 轴旋转的角度

##### 5.3.1.4 是否使用 launch 配置

![是否使用 launch 配置相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-whether-to-use-launch-configuration.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=4314f2aec0686c7e2a2428bf86a5a0ef)

可以选择是否使用 launch 文件中的相机参数配置。

* raw\_param：0：使用相机内的配置，1：使用 launch 文件中的配置

不论此参数设置为 0 还是 1，在此参数之前的所有参数都会被设置，0 和 1 只对此参数之后的参数有效。

##### 5.3.1.5 2D 参数配置

![2D 参数配置相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-2d-parameter-configuration.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=5a286963dc2265bacba9466f15754328)

* lx\_2d\_binning：0：1x1，1：2x2，2：4x4
* lx\_2d\_undistort：2d 反畸变，0：关闭，1：开启
* lx\_2d\_undistort\_scale：2D 反畸变系数
* lx\_2d\_auto\_exposure：2D 自动曝光，0：关闭，1：开启
* lx\_2d\_auto\_exposure\_value：2D 自动曝光目标强度
* lx\_2d\_exposure：2D 曝光值
* lx\_2d\_gain：2D 增益

##### 5.3.1.6 3D 参数配置

![3D 参数配置相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-3d-parameter-configuration.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=a485f8d88eb4dd73aec5e1d523cef152)

* lx\_rgb\_to\_tof：RGB 对齐
* lx\_3d\_binning：0：1x1，1：2x2，2：4x4
* lx\_mulit\_mode：多机模式，可以排除多机干扰，0：关闭，1：开启
* lx\_3d\_undistort：3d 反畸变，0：关闭，1：开启
* lx\_3d\_undistort\_scale：3D 反畸变系数
* lx\_hdr：hdr,0：关闭，1：开启
* lx\_3d\_auto\_exposure：3D 自动曝光，0：关闭，1：开启
* lx\_3d\_auto\_exposure\_value：3D 自动曝光目标强度
* lx\_3d\_first\_exposure：3D 高积分
* lx\_3d\_second\_exposure：3D 低积分
* lx\_3d\_gain：3D 增益

##### 5.3.1.7 最大最小深度

![最大最小深度相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-maximum-and-minimum-depth.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=0c81fd899b45fbe96b2b29fcabd06edc)

* lx\_min\_depth：最小深度
* lx\_max\_depth：最大深度

#### 5.3.2 ROS2 launch 文件说明

##### 5.3.2.1 所有的 launch 文件

在 src/launch 文件夹中有如下文件：

![所有的 launch 文件相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-all-launch-file-02.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=120a428e95e7c202cff7e573f692de12)

* localization.launch.py：视觉定位节点的运行文件
* lx\_camera\_ros.launch.py：普通节点的运行文件
* mapping.launch.py：视觉定位建图的运行文件
* obstacle.launch.py：避障算法的运行文件
* obstacleV2.launch.py：避障算法 V2 的运行文件
* pallet.launch.py：托盘算法的运行文件
* sensor\_sim.launch.py：模拟定位数据的运行文件

可以通过运行不同的 launch 文件来执行节点的不同功能，**所有节点中除localization、mapping 和 sensor 之外，参数内容都是一致的，只是配置有所不同**，在以下小节中会详细介绍，对于 localization、mapping 和 sensor 三个 launch 文件的参数详细介绍请看 ros-v1pro 节点中的介绍。

##### 5.3.2.2 相机 ip、流配置、工作模式配置、点云单位等

![相机 ip、流配置、工作模式配置、点云单位等相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-camera-ip-stream-configuration-working-mode-configuration-point-cloud-unit-and-other-02.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=ed17169f8dfba40696471c3b7cc73c39)

* ip：需要连接的相机 IP，若为 0 则默认连接第一个
* log\_path：SDK 日志储存路径，需要填入绝对路径
* is\_xyz：是否推送点云数据
* is\_depth：是否推送深度数据
* is\_amp：是否推送强度图数据
* is\_rgb：是否推送 RGB 图数据
* lx\_work\_mode：工作模式
* lx\_application：是否开启算法，0：关闭，1：避障算法，2：托盘算法，3：定位算法，4：避障算法 V2
* lx\_tof\_unit：点云单位，1 为米，0 为毫米，使用 rviz 查看时需要修改为 1

##### 5.3.2.3 相机位姿配置

![相机位姿配置相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-camera-pose-configuration-02.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=f0a94b9df62ab34418409673075acb8e)

可以配置点云的旋转角度以及平移向量。

* X：相机距离点云中心的 X 平移量
* Y：相机距离点云中心的 Y 平移量
* Z：相机距离点云中心的 Z 平移量
* Yaw：点云绕 Z 轴旋转的角度
* Roll：点云绕 X 轴旋转的角度
* Pitch：点云绕 Y 轴旋转的角度

##### 5.3.2.4 是否使用 launch 配置

![是否使用 launch 配置相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-whether-to-use-launch-configuration-02.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=0bdb4ac97eb6f6532d7a5249e07ef303)

可以选择是否使用 launch 文件中的相机参数配置。

* raw\_param：0：使用相机内的配置，1：使用 launch 文件中的配置

不论此参数设置为 0 还是 1，在此参数之前的所有参数都会被设置，0 和 1 只对此参数之后的参数有效。

##### 5.3.2.5 2D 参数配置

![2D 参数配置相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-2d-parameter-configuration-02.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=72a74ef655c25567eaa8c4b958f4b268)

* lx\_2d\_binning：0：1x1，1：2x2，2：4x4
* lx\_2d\_undistort：2d 反畸变，0：关闭，1：开启
* lx\_2d\_undistort\_scale：2D 反畸变系数
* lx\_2d\_auto\_exposure：2D 自动曝光，0：关闭，1：开启
* lx\_2d\_auto\_exposure\_value：2D 自动曝光目标强度
* lx\_2d\_exposure：2D 曝光值
* lx\_2d\_gain：2D 增益

##### 5.3.2.6 3D 参数配置

![3D 参数配置相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-3d-parameter-configuration-02.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=eb7237a99cd1e055419144c738f65201)

* lx\_rgb\_to\_tof：RGB 对齐
* lx\_3d\_binning：0：1x1，1：2x2，2：4x4
* lx\_mulit\_mode：多机模式，可以排除多机干扰，0：关闭，1：开启
* lx\_3d\_undistort：3d 反畸变，0：关闭，1：开启
* lx\_3d\_undistort\_scale：3D 反畸变系数
* lx\_hdr：hdr,0：关闭，1：开启
* lx\_3d\_auto\_exposure：3D 自动曝光，0：关闭，1：开启
* lx\_3d\_auto\_exposure\_value：3D 自动曝光目标强度
* lx\_3d\_first\_exposure：3D 高积分
* lx\_3d\_second\_exposure：3D 低积分
* lx\_3d\_gain：3D 增益

##### 5.3.2.7 最大最小深度

![最大最小深度相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-maximum-and-minimum-depth-02.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=9b96070b44fef78e2ccffc3f9774cab5)

* lx\_min\_depth：最小深度
* lx\_max\_depth：最大深度

#### 5.3.3 特有主题说明

因 ROS1 和 ROS2 特有主题类型一致，所以此处 ROS1 为例。在 src/msg 文件夹中有如下文件：

![特有主题说明相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-unique-theme-descriptions.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=5c20d1e362c305b39d6ebfad92d816ea)

##### 5.3.3.1 FrameRate.msg

这个节点输出了帧率信息，消息格式如下：

![FrameRate.msg相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-framerate-msg.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=3834bd6440ff7a595e97ef88526bcf3d)

* header：当前数据的帧信息以及时间戳
* depth：当深度图开启时，输出深度图帧率
* amp：当强度图开启时，输出强度图帧率
* rgb：当 rgb 开启时，输出 rgb 帧率
* temperature：输出相机温度

节点开始运行后（除视觉定位相关的节点以外），可以订阅 LxCamera\_FrameRate节点获取相关信息，输出如下：

![FrameRate.msg相关图示 2](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-framerate-msg-2.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=601f15fb5e96bde0c757ebbe7239a206)

##### 5.3.3.2 Obstacle.msg

obstacle 输出避障算法结果相关的信息，obstacle 消息格式如下：

![Obstacle.msg相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-obstacle-msg.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=280f080edf6c11bb61479fc17d3887ee)

* header：当前数据的帧信息以及时间戳
* status：避障返回的状态信息

0：正常避障

-1：未设置地面

-2：未设置输入

-3：范围内无点云

-4：过滤地面后点云为空

-5：半径滤波后点云为空

-6：未得到分割结果

-99：未定义的错误

* io\_output：io 接口输出的避障信息

0：正常

1：警告

2：停障

* box\_number：障碍物数量
* box：障碍物信息，变长数组，长度由 box\_number 决定

节点开始运行后（需开启避障算法），可以订阅 LxCamera\_Obstacel 节点获取相关信息，输出如下（图中数据为模拟数据）：

![Obstacle.msg相关图示 2](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-obstacle-msg-2.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=8f7232f333d51c52297693255fa0cc12)

##### 5.3.3.3 Obstacle\_box.msg

obstacle\_box 输出障碍物相关的信息，obstacle\_box 消息格式如下：

![Obstacle\\\_box.msg相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-obstacle-box-msg.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=ed2fa91852624a675c064b8ddf4d4d6e)

* center：障碍物在点云中的质心
* rotation：障碍物点云的旋转矩阵
* translation：障碍物点云的平移向量
* width：障碍物框的宽
* height：障碍物框的高
* depth：障碍物框的深度

开始运行后（需开启避障算法），可以订阅 LxCamera\_Obstacel 节点获取相关信息，输出如下：

![Obstacle\\\_box.msg相关图示 2](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-obstacle-box-msg-2.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=f12b1090abd08b99848b3b3e5049be9b)

##### 5.3.3.4 Result.msg

向节点中 servic 发送指令消息后得到的返回值就储存在 Result 中：

![Result.msg相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-result-msg.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=d1853a317402e430f4bee1f3a2a21abb)

* ret：执行 SDK 得到的返回值
* msg：执行 SDK 得到的返回值的说明

##### 5.3.3.5 Pallet.msg

pallet 输出托盘算法结果相关的信息，pallet 消息格式如下：

![Pallet.msg相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-pallet-msg.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=936e65d2c0a3de96dd19585d55644ed3)

* header：当前数据的帧信息以及时间戳
* status：托盘识别返回的状态信息：

0：检测成功

-1：未检测到地面

-2：未检测到托盘腿

-3：托盘距离过远

-4：未知错误

* x：托盘距离相机光心的 X 距离
* y：托盘距离相机光心的 Y 距离
* yaw：托盘中心相对于相机光心的 theta 夹角

节点开始运行后（需开启托盘算法），可以订阅 LxCamera\_Pallet 节点获取相关信息，输出如下：

![Pallet.msg相关图示 2](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-pallet-msg-2.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=5bec6f8accb334da7158852636148bf8)

#### 5.3.4 特有服务说明

因 ROS1 和 ROS2 特有服务类型一致，所以此处 ROS1 为例。在 src/srv 文件夹中有如下文件：

![特有服务说明相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-unique-service-descriptions.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=60abc593cddde9f9539497ef4f313bd7)

这些消息皆是用于设置或者获取相机的某些参数值。

【---】之上是发送的数据，【---】之下是返回的数据

##### 5.3.4.1 LxBool.srv

![LxBool.srv相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-lxbool-srv.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=c42893ca0e286424976ee805ecf6f411)

* cmd：需要获取或者设置的参数编号
* val：设置时设置的值
* is\_set：是否设置参数，为 true 时会将 val 中的值设置到相机中，为 false 时会从相机中把这个参数的值读取并显示出来
* val：获取或者设置时返回的相机当先参数的值
* result：调用 SDK 接口返回的值和信息

##### 5.3.4.2 LxCmd.srv

![LxCmd.srv相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-lxcmd-srv.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=4782cf5d97a5c1d52b9a40f157878294)

* cmd：需要获取或者设置的参数编号，当为 0 时会返回所有的参数编号
* result：调用 SDK 接口返回的值和信息，cmd 可能会有多个返回值

##### 5.3.4.3 LxFloat.srv

![LxFloat.srv相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-lxfloat-srv.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=51eb1fe8af81f95a9d735fee975bb525)

* cmd：需要获取或者设置的参数编号
* val：设置时设置的值
* is\_set：是否设置参数，为 true 时会将 val 中的值设置到相机中，为 false 时会从相机中把这个参数的值读取并显示出来
* max\_value：该参数可设置的最大值
* min\_value：该参数可设置的最小值
* cur\_value：该参数在相机中的当前值
* available：该参数是否支持设置
* result：调用 SDK 接口返回的值和信息

##### 5.3.4.4 LxInt.srv

![LxInt.srv相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-lxint-srv.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=db0896569f51ba1b1e1a5a740da20841)

* cmd：需要获取或者设置的参数编号
* val：设置时设置的值
* is\_set：是否设置参数，为 true 时会将 val 中的值设置到相机中，为 false 时会从相机中把这个参数的值读取并显示出来
* max\_value：该参数可设置的最大值
* min\_value：该参数可设置的最小值
* cur\_value：该参数在相机中的当前值
* available：该参数是否支持设置
* result：调用 SDK 接口返回的值和信息

##### 5.3.4.5 LxString.srv

![LxString.srv相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-lxstring-srv.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=d45dc96ff58b1feaed13a4c6bac3dd93)

* cmd：需要获取或者设置的参数编号
* val：设置时设置的值
* is\_set：是否设置参数，为 true 时会将 val 中的值设置到相机中，为 false 时会从相机中把这个参数的值读取并显示出来
* val：获取或者设置时返回的相机当先参数的值
* result：调用 SDK 接口返回的值和信息

#### 5.3.5 主题订阅方式说明

##### 5.3.5.1 订阅帧率，托盘算法、避障算法输出数据

**订阅帧率**

在 lx\_camera\_node\_ws 目录下，输入：bash rate.sh

![订阅帧率，托盘算法、避障算法输出数据相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscription-frame-rate-tray-algorithm-and-obstacle-avoidance-algorithm-output-data.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=acf58056658423823531e46da33ad141)

lx\_camera\_node 节点图像正常运行并刷新后可以看到如下信息：

![订阅帧率，托盘算法、避障算法输出数据相关图示 2](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscription-frame-rate-pallet-algorithm-and-obstacle-avoidance-algorithm-output-data-2.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=d7929533401c19933a83a705f736335b)

**订阅托盘算法输出**

在 lx\_camera\_node\_ws 目录下，输入：bash pallet.sh

![订阅帧率，托盘算法、避障算法输出数据相关图示 3](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscription-frame-rate-pallet-algorithm-and-obstacle-avoidance-algorithm-output-data-3.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=444e3c129383d4cd01ae11113e6a48e3)

lx\_camera\_node 节点图像正常运行并刷新后可以看到如下信息：

![订阅帧率，托盘算法、避障算法输出数据相关图示 4](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscription-frame-rate-pallet-algorithm-and-obstacle-avoidance-algorithm-output-data-4.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=632457420d3a066c19cf4d9a70f622ae)

**订阅避障算法输出**

在 lx\_camera\_node\_ws 目录下，输入：bash obstacle.sh

![订阅帧率，托盘算法、避障算法输出数据相关图示 5](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscription-frame-rate-pallet-algorithm-and-obstacle-avoidance-algorithm-output-data-5.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=2721c709c6adb45b3644e784f123b32b)

lx\_camera\_node 节点图像正常运行并刷新后可以看到如下信息：

![订阅帧率，托盘算法、避障算法输出数据相关图示 6](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscription-frame-rate-tray-algorithm-and-obstacle-avoidance-algorithm-output-data-6.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=6abcb5f0f864bcb3f116c7a322fc384b)

##### 5.3.5.2 订阅图像数据（ROS1）

通过 ros 自带的图像工具可以查看节点输出的图像信息：

控制台输入命令：rqt\_image\_view

输入命令后会弹出如下窗口：

![订阅图像数据（ROS1）相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscribing-image-data-ros1.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=05e9cb50feae28b26c379bca4d5328ae)

红色框处可以选择，所有节点中的图像，图中展示的是迈尔微视相机 rgb 图像，还可以选择深度图或者强度图（前提是流已经开启）：

![订阅图像数据（ROS1）相关图示 2](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscription-image-data-ros1-related-diagram-2.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=1719787e47c57348d787ec613c302f17)

图中，第一个红框是定位算法节点输出的 RGB 信息，其余三个是普通节点输出的图像信息，amp 为强度图，depth 为深度图，rgb 为 rgb 图。

选择不同的项可以查看不同的图像或者使用 rviz 查看图像数据，控制台输入命令：rviz会弹出如下窗口：

![订阅图像数据（ROS1）相关图示 3](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscription-image-data-ros1-related-diagram-3.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=0a5cd1bbf53d63638db003d6d84fa707)

点击左下方 Add 按钮后会弹出窗口：

![订阅图像数据（ROS1）相关图示 4](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscription-image-data-ros1-related-diagram-4.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=5e897e5f2ce5bb9c0729a0736e06c3ab)

选择需要的图像话题并选择其中的 Image 然后点击右下方的 OK，就可以在主界面左侧看到图像数据，如下图显示：

![订阅图像数据（ROS1）相关图示 5](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscription-image-data-ros1-related-diagram-5.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=f753d2cac02d6fe44cc254f286082c67)

##### 5.3.5.3 订阅图像数据（ROS2）

通过 ros2 自带的图像工具可以查看节点输出的图像信息：控制台输入命令：rqt

输入命令后会弹出如下窗口：

![订阅图像数据（ROS2）相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscribing-image-data-ros2.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=e55c0ec7491e38ca75581ba83d9e2d0c)

选择菜单栏第二项最底下选项的第一个 Image View，选择后会弹出如下界面：

![订阅图像数据（ROS2）相关图示 2](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscription-image-data-ros2-related-diagram-2.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=9f2b7fc4728a0d35befcfac9a9a47e08)

红色框处可以选择，所有节点中的图像，图中展示的是迈尔微视相机 rgb 图像，还可以选择深度图或者强度图（前提是流已经开启）：

![订阅图像数据（ROS2）相关图示 3](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscription-image-data-ros2-related-diagram-3.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=74e105e6a5d50dff546f23139a2c56c0)

图中，第一个红框是定位算法节点输出的 RGB 信息，其余三个是普通节点输出的图像信息，amp 为强度图，depth 为深度图，rgb 为 rgb 图。

选择不同的项可以查看不同的图像或者使用 rviz2 查看图像数据，控制台输入命令：rviz2会弹出如下窗口：

![订阅图像数据（ROS2）相关图示 4](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscription-image-data-ros2-related-diagram-4.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=fc5657153eb67a1c83eaa6a593382984)

点击左下方 Add 按钮后会弹出窗口：

![订阅图像数据（ROS2）相关图示 5](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscription-image-data-ros2-related-diagram-5.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=c181ab770b005c3e6b1269fa48b02f95)

选择需要的图像话题并选择其中的 Image 然后点击右下方的 OK，就可以在主界面左侧看到图像数据，如下图显示：

![订阅图像数据（ROS2）相关图示 6](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscription-image-data-ros2-related-diagram-6.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=e2b9eb92770ba9393025b2ce6d8ea168)

**部分系统需要在上图【map】处填入【mrdvs】才能看到图像**

##### 5.3.5.4 订阅点云数据

通过 ros 或者 ros2 自带的点云工具可以查看节点输出的点云信息：

命令：rviz【ROS1】，rviz2【ROS2】

输入命令后会弹出如下窗口：

![订阅点云数据相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscribing-to-point-cloud-data.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=5d5151cf864e288556adf2b7da2601f1)

点击下方红色框内按钮会弹出如下框：

![订阅点云数据相关图示 2](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscribing-to-point-cloud-data-2.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=912fe6e478f3c0b10ce9feb6e6783240)

选择第二个页签，会有名为lx\_camera\_node 的节点，节点中有名为LxCamera\_Cloud 的主题，主题中有名为 PointCloud2 的消息，选择后点击 OK 即可，完成后界面如下：

![订阅点云数据相关图示 3](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscribing-to-point-cloud-data-3.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=d05d00a15e920d0affc5bd8367d4bffc)

（ROS1 界面）

![订阅点云数据相关图示 4](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscribing-to-point-cloud-data-4.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=c24c37db0b208eeb39f46c1015d673ec)

（ROS2 界面）

此时点云还不能正常显示，在上方红绿框 map 处填入 mrdvs 就可以看到点云，效果如下：

![订阅点云数据相关图示 5](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-subscribing-to-point-cloud-data-5.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=5e125e707944cb3bebeb5b1552ec97cc)

ROS 中默认的点云单位为米，所以使用 rviz 查看时需要将launch文件中的lx\_tof\_unit 修改为 1【默认即为 1】

#### 5.3.6 服务通讯方式说明

在 ROS1 中所有的命令都可以用 Tab 键补全，但是在 ROS2 中只有主题能被补全，消息部分需要手动输入。

**ROS1 输入数据时按照补全格式输入即可，ROS2 中输入数据时需要按照 yaml 文件的格式来输入。**

节点运行之后，在 lx\_camera\_node\_ws 文件夹下打开一个终端，在终端中配置环境，输入命令：source devel/setup.bash

##### 5.3.6.1 获取所有参数编号列表（Lx\_Cmd）

**ros1**

在终端输入：rosservice call /lx\_camera\_node/LxCamera\_LxCmd "cmd: 0"

![获取所有参数编号列表（Lx\\\_Cmd）相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-get-all-parameter-number-list-lx-cmd.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=cf2c4bcc692d8676e52bc795568dfc02)

可以看到输出：

![获取所有参数编号列表（Lx\\\_Cmd）相关图示 2](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-get-all-parameter-number-list-lx-cmd-2.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=8fa7523cf63d33d284d423ab1f879683)

ret 是参数的编号，msg 中说明了参数的类型和描述，例如：1001，这个参数是int 类型，参数用于获取和修改第一曝光值。

**ros2**

在终端输入：ros2 service call /LxCamera\_LxCmd lx\_camera\_ros/srv/LxCmd 'cmd: 0'

![获取所有参数编号列表（Lx\\\_Cmd）相关图示 3](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-get-all-parameter-number-list-lx-cmd-3.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=814396047676e86d092fe81aff41dcf5)

可以看到如下输出：

![获取所有参数编号列表（Lx\\\_Cmd）相关图示 4](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-get-all-parameter-number-list-lx-cmd-4.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=a81d5cac3f8613dc338331148f01248a)

因在 ROS2 中查看参数详细不太方便，所以在下表中同样列出了所有参数的编号、类型以及说明：

| 编号 | 类型 | ROS中说明 | 详细说明 |
| - | - | - | - |
| 1001 | INT | FIRST\_EXPOSURE | 默认高积分曝光值 |
| 1002 | INT | SECOND\_EXPOSURE | 默认低积分曝光值 |
| 1003 | INT | THIRD\_EXPOSURE | 默认中积分曝光值 |
| 1004 | INT | FOURTH\_EXPOSURE | 第四个积分 |
| 1005 | INT | GAIN | 增益 |
| 1011 | INT | MIN\_DEPTH | 最小深度值 |
| 1012 | INT | MAX\_DEPTH | 最大深度值 |
| 1013 | INT | MIN\_AMPLITUDE | 有效信号最小强度值 |
| 1014 | INT | MAX\_AMPLITUDE | 有效信号最大强度值 |
| 1016 | INT | CODE\_MODE | 编码模式 |
| 1018 | INT | WORK\_MODE | 工作模式 |
| 1019 | INT | LINK\_SPEED | 网卡网速 |
| 1021 | INT | 3D\_IMAGE\_WIDTH | 3D 图像分辨率宽度 |
| 1022 | INT | 3D\_IMAGE\_HEIGHT | 3D 图像分辨率高度 |
| 1023 | INT | 3D\_IMAGE\_OFFSET\_X | ROI 水平偏移像素 |
| 1024 | INT | 3D\_IMAGE\_OFFSET\_Y | ROI 垂直偏移像素 |
| 1025 | INT | 3D\_BINNING\_MODE | 3D 图像 binnin |
| 1026 | INT | 3D\_DEPTH\_DATA\_TYPE | 深度图像数据格式 |
| 1031 | INT | 3D\_AMPLITUDE\_CHANNEL | 3D 强度图像通道数 |
| 1032 | INT | 3D\_AMPLITUDE\_GET\_TYPE | 获取强度图像的方式 |
| 1033 | INT | 3D\_AMPLITUDE\_EXPOSURE | 3D 手动曝光值 |
| 1034 | INT | 3D\_AMPLITUDE\_INTENSITY | 3D 自动目标亮 |
| 1035 | INT | 3D\_AMPLITUDE\_DATA\_TYPE | 强度图像数据格式 |
| 1036 | INT | 3D\_AUTO\_EXPOSURE\_LEVEL | 3D 自动曝光等级 |
| 1041 | INT | 2D\_IMAGE\_WIDTH | 2D 图像分辨率宽度 |
| 1042 | INT | 2D\_IMAGE\_HEIGHT | 2D 图像分辨率高 |
| 1043 | INT | 2D\_IMAGE\_OFFSET\_X | 2D 图像 ROI 水平偏移 |
| 1044 | INT | 2D\_IMAGE\_OFFSET\_Y | 2D 图像 ROI 垂直偏 |
| 1045 | INT | 2D\_BINNING\_MODE | 2D 图像 binnin |
| 1046 | INT | 2D\_IMAGE\_CHANNEL | 2D 图像通道数 |
| 1047 | INT | 2D\_IMAGE\_DATA\_TYPE | 2D 图像数据格式 |
| 1051 | INT | 2D\_MANUAL\_EXPOSURE | 2D 手动曝光时的曝光值 |
| 1052 | INT | 2D\_MANUAL\_GAIN | 2D 手动曝光时的增益 |
| 1053 | INT | 2D\_ENCODE\_TYPE | 2D 图像压缩格式 |
| 1054 | INT | 2D\_AUTO\_EXPOSURE\_LEVEL | 2D 图像自动曝光等 |
| 1061 | INT | TOF\_GLOBAL\_OFFSET | TOF 深度数据偏移 |
| 1062 | INT | 3D\_UNDISTORT\_SCALE | TOF 图像反畸变系数 |
| 1065 | INT | ALGORITHM\_MODE | 设置内置应用算法 |
| 1066 | INT | MODBUS\_ADDR | modbus 地址 |
| 1067 | INT | HEART\_TIME | 与设备间心跳时间 |
| 1068 | INT | GVSP\_PACKET\_SIZE | GVSP 单包数据分包大 |
| 1069 | INT | TRIGGER\_MODE | 触发模式 |
| 1070 | INT | CALCULATE\_UP | 算法上下移 |
| 1072 | INT | CAN\_BAUD\_RATE | can 的波特率值 |
| 1073 | INT | MAX\_3D\_AUTO\_EXPOSURE | 3d 自动曝光上限 |
| 1074 | INT | CUSTOM\_PARAM\_GROUP | 用户自定义参数组 |
| 2001 | FLOAT | FILTER\_LEVEL | 滤波等级 |
| 2002 | FLOAT | EST\_OUT\_EXPOSURE | 是否评估过曝数据 |
| 2003 | FLOAT | LIGHT\_INTENSITY | 光强度 |
| 2004 | FLOAT | 3D\_DEPTH\_FPS | 深度图当前帧率 |
| 2005 | FLOAT | 3D\_AMPLITUDE\_FPS | 强度图当前帧率 |
| 2006 | FLOAT | 2D\_IMAGE\_FPS | RGB 图当前帧率 |
| 2007 | FLOAT | DEVICE\_TEMPERATURE | 相机当前温度 |
| 3001 | BOOL | CONNECT\_STATE | 当前连接状态 |
| 3002 | BOOL | ENABLE\_3D\_DEPTH\_STREAM | 开启/关闭深度数据流 |
| 3003 | BOOL | ENABLE\_3D\_AMP\_STREAM | 开启/关闭强度数据流 |
| 3006 | BOOL | ENABLE\_3D\_AUTO\_EXPOSURE | 3D 自动曝光使能 |
| 3007 | BOOL | ENABLE\_3D\_UNDISTORT | 3D 反畸变使能 |
| 3008 | BOOL | ENABLE\_ANTI\_FLICKER | 抗频闪使能 |
| 3011 | BOOL | ENABLE\_2D\_STREAM | 开启/关闭 2D 数据流 |
| 3012 | BOOL | ENABLE\_2D\_AUTO\_EXPOSURE | 2D 自动曝光使能 |
| 3015 | BOOL | ENABLE\_2D\_UNDISTORT | 2D 图像反畸变使 |
| 3016 | BOOL | ENABLE\_2D\_TO\_DEPTH | 2D3D 图像对齐使 |
| 3017 | BOOL | ENABLE\_BACKGROUND\_AMP | 强度背景光使能 |
| 3018 | BOOL | ENABLE\_MULTI\_MACHINE | 多机模式使能 |
| 3019 | BOOL | ENABLE\_MULTI\_EXPOSURE\_HDR | HDR |
| 3020 | BOOL | ENABLE\_SYNC\_FRAME | 是否开启强制帧同步 |
| 4001 | STRING | DEVICE\_VERSION | 设备版本号 |
| 4002 | STRING | DEVICE\_LOG\_NAME | 日志文件名 |
| 4003 | STRING | FIRMWARE\_NAME | 固件文件名 |
| 4004 | STRING | FILTER\_PARAMS | 滤波算法参数 |
| 4005 | STRING | ALGORITHM\_PARAMS | 内置算法参数 |
| 4006 | STRING | ALGORITHM\_VERSION | 内置算法版本号 |
| 4007 | STRING | DEVICE\_OS\_VERSION | 设备系统镜像版本号 |
| 0 | CMD | GET\_PARAM\_LIST | 获取所有参数编号 |
| 1 | CMD | START\_STREAM | 设备启流 |
| 2 | CMD | STOP\_STREAM | 设备停流 |
| 5001 | CMD | GET\_NEW\_FRAME | 更新当前最新数据 |
| 5002 | CMD | RETURN\_VERSION | 回退上一版本 |
| 5003 | CMD | RESTART\_DEVICE | 重启相机 |
| 5004 | CMD | WHITE\_BALANCE | 自动白平衡 |
| 5007 | CMD | RESET\_PARAM | 恢复默认参数 |

**部分参数需要先停流才能设置，或者设置有先后顺序，具体需求请跟技术支持人员对接。**

##### 5.3.6.2 获取 Int 参数（Lx\_Int）

**ROS1**

在终端输入：rosservice call /lx\_camera\_node/LxCamera\_LxInt "cmd: 1001

val: 0

is\_set: false"

![获取 Int 参数（Lx\\\_Int）相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-get-of-int-parameters-lx-int.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=ddc81fd51f3aaab7a7310a64f9ca7eec)

可以看到输出：

![获取 Int 参数（Lx\\\_Int）相关图示 2](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-get-the-of-int-parameter-lx-int-2.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=1ea636d148089d87f134344bc575459c)

红框内的就是返回值，图中获取的是高积分时间，根据返回结果可以看到，最大值是 **3600**，最小值是 **1**，当前值是 **1010**，是否支持设置是**支持**，接口调用返回值是 **0**，返回值信息是**成功**。

**ROS2**

在 终 端 输 入 ： ros2 service call /LxCamera\_LxInt lx\_camera\_ros/srv/LxInt '\{cmd: 1001,val: 0,is\_set: false}'

![获取 Int 参数（Lx\\\_Int）相关图示 3](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-get-the-of-int-parameter-lx-int-3.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=168cd333beca191d8996dea6e245662f)

可以看到输出：

![获取 Int 参数（Lx\\\_Int）相关图示 4](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-get-the-of-int-parameter-lx-int-4.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=c89f315a160f28a17c1c94b096d35239)

图中获取的是高积分时间，根据返回结果可以看到，最大值是 **3600**，最小值是 **1**，当前值是 **1010**，是否支持设置是**支持**，接口调用返回值是 **0**，返回值信息是**成功**。

##### 5.3.6.3 设置 Int 参数（Lx\_Int）

**ROS1**

在终端输入：rosservice call /lx\_camera\_node/LxCamera\_LxInt "cmd: 1001

val: 2000

is\_set: true"

![设置 Int 参数（Lx\\\_Int）相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-setting-int-parameters-lx-int.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=46a1ccb65908c487bb1d9adaafa144ac)

可以看到输出：

![设置 Int 参数（Lx\\\_Int）相关图示 2](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-illustration-2-related-to-setting-int-parameters-lx-int.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=c916955327f42e9ddb895713273ab082)

红框内的就是返回值，图中设置的是高积分时间，根据返回结果可以看到，最大值是 **3600**，最小值是 **1**，当前值已经修改为 **2000**，是否支持设置是**支持**，接口调用返回值是 **0**，返回值信息是**成功**。

**ROS2**

在 终 端 输 入 ： ros2 service call /LxCamera\_LxInt lx\_camera\_ros/srv/LxInt '\{cmd: 1001,val: 3000,is\_set: true}'

![设置 Int 参数（Lx\\\_Int）相关图示 3](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-illustration-3-related-to-setting-int-parameters-lx-int.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=567aaa20d0656be9a1022db5abf72bdd)

可以看到输出：

![设置 Int 参数（Lx\\\_Int）相关图示 4](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-illustration-4-related-to-setting-int-parameters-lx-int.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=3c918c489a430fbfa8d1c5bec06d7c24)

图中获取的是高积分时间，根据返回结果可以看到，最大值是 **3600**，最小值是 **1**，当前值已经修改为 **3000**，是否支持设置是**支持**，接口调用返回值是 **0**，返回值信息是**成功**。

##### 5.3.6.4 获取 Float 参数（Lx\_Float）

**ROS1**

在终端输入：rosservice call /lx\_camera\_node/LxCamera\_LxFloat "cmd: 2007

val: 0.0

is\_set: false"

![获取 Float 参数（Lx\\\_Float）相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-get-of-float-parameters-lx-float.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=1d4c2babeceeda83b937fb796e4736bc)

可以看到输出：

![获取 Float 参数（Lx\\\_Float）相关图示 2](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-get-the-of-float-parameter-lx-float-2.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=11f2383bad73e5cc86372155f8211371)

红框内的就是返回值，图中获取的是相机温度，根据返回结果可以看到，最大值是 **120**，最小值是\*\*-40\*\*，当前值是 **49.6875**，是否支持设置是**不支持**，接口调用返回值是 **0**，返回值信息是**成功**。\


**ROS2**

在终端输入：ros2 service call /LxCamera\_LxFloat lx\_camera\_ros/srv/LxFloat '\{cmd: 2007,val: 0,is\_set: false}'

![获取 Float 参数（Lx\\\_Float）相关图示 3](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-obtain-of-float-parameters-lx-float-3.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=6c58f470fe676a990feb3124c6a04e74)

可以看到输出：

![获取 Float 参数（Lx\\\_Float）相关图示 4](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-get-the-of-float-parameter-lx-float-4.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=158cc91cf60be920cd7e3d189f021cad)

图中获取的是相机温度，根据返回结果可以看到，最大值是 **120**，最小值是\*\*-40\*\*，当前值是 **50.4375**，是否支持设置是**不支持**，接口调用返回值是 **0**，返回值信息是**成功**。

##### 5.3.6.5 设置 Float 参数（Lx\_Float）

**ROS1**

在终端输入：rosservice call /lx\_camera\_node/LxCamera\_LxFloat "cmd: 2007

val: 5.0

is\_set: true"

![设置 Float 参数（Lx\\\_Float）相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-setting-float-parameters-lx-float.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=55b65c2a320e6ba74138f9ea271ba498)

可以看到输出：

![设置 Float 参数（Lx\\\_Float）相关图示 2](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-illustration-2-related-to-setting-float-parameters-lx-float.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=4c687252de0b54289fae22c51f04ea8b)

红框内的就是返回值，图中设置的是相机温度，根据返回结果可以看到，最大值是 **120**，最小值是\*\*-40\*\*，当前值是 **50.9375**，是否支持设置是**不支持**，接口调用返回值是\*\*-2\*\*，返回值信息是**不支持**，此处设置的值是 5，当前值和设置值不一致是因为该参数不支持设置。\


**ROS2**

在终端输入：ros2 service call /LxCamera\_LxFloat lx\_camera\_ros/srv/LxFloat '\{cmd: 2007,val: 5.0,is\_set: true}'

![设置 Float 参数（Lx\\\_Float）相关图示 3](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-illustration-3-related-to-setting-float-parameters-lx-float.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=d0402c599f4f647e9905b594b1b1fce1)

可以看到输出：

![设置 Float 参数（Lx\\\_Float）相关图示 4](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-setting-float-parameters-lx-float-4.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=f73e325cad0009454ad8cfe4171c8ecb)

图中设置的是相机温度，根据返回结果可以看到，最大值是 **120**，最小值是\*\*-40\*\*，当前值是 **51.125**，是否支持设置是**不支持**，接口调用返回值是\*\*-2\*\*，返回值信息是**不支持**，此处设置的值是 5，当前值和设置值不一致是因为该参数不支持设置。

##### 5.3.6.6 获取 Bool 参数（Lx\_Bool）

**ROS1**

在终端输入：rosservice call /lx\_camera\_node/LxCamera\_LxBool "cmd: 3012

val: false

is\_set: false"

![获取 Bool 参数（Lx\\\_Bool）相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-get-of-bool-parameters-lx-bool.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=1dc9a9735380e923f812c06d40d422f5)

可以看到输出：

![获取 Bool 参数（Lx\\\_Bool）相关图示 2](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-get-bool-parameter-lx-bool-2.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=980b1490b00ff2ab17c32653673a2f12)

红框内的就是返回值，图中获取的是 2D 自动曝光，根据返回结果可以看到，当前值是 **false**，接口调用返回值是 **0**，返回值信息是**成功**。

**ROS2**

在终端输入：ros2 service call /LxCamera\_LxBool lx\_camera\_ros/srv/LxBool '\{cmd: 3012,val: false,is\_set: false}'

![获取 Bool 参数（Lx\\\_Bool）相关图示 3](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-get-bool-parameter-lx-bool-3.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=2cc599f8099e286882ef3a122c05a62c)

可以看到输出：

![获取 Bool 参数（Lx\\\_Bool）相关图示 4](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-get-bool-parameter-lx-bool-4.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=18c1eeec093cc5af5ee3636f663f088f)

图中获取的是 2D 自动曝光，根据返回结果可以看到，当前值是 **false**，接口调用返回值是 **0**，返回值信息是**成功**。

##### 5.3.6.7 设置 Bool 参数（Lx\_Bool）

**ROS1**

在终端输入：rosservice call /lx\_camera\_node/LxCamera\_LxBool "cmd: 3012

val: true

is\_set: true"

![设置 Bool 参数（Lx\\\_Bool）相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-setting-bool-parameters-lx-bool.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=de79065fe679de1e6046a2b9970379c0)

可以看到输出：

![设置 Bool 参数（Lx\\\_Bool）相关图示 2](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-illustration-2-related-to-setting-bool-parameters-lx-bool.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=da83dee38264650beae70ab905c3c77e)

红框内的就是返回值，图中设置的是 2D 自动曝光，根据返回结果可以看到，当前值是 **true**，接口调用返回值是 **0**，返回值信息是**成功**，当前值和设置值一致。

**ROS2**

在终端输入： ros2 service call /LxCamera\_LxBool lx\_camera\_ros/srv/LxBool '\{cmd: 3012,val: true,is\_set: true}'

![设置 Bool 参数（Lx\\\_Bool）相关图示 3](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-illustration-3-related-to-setting-bool-parameters-lx-bool.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=b21ef87721609af0def5eb11611c7528)

可以看到输出：

![设置 Bool 参数（Lx\\\_Bool）相关图示 4](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-setting-bool-parameters-lx-bool-4.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=7e3330624de30dc3def444f2be713669)

图中设置的是 2D 自动曝光，根据返回结果可以看到，当前值是 **true**，接口调用返回值是 **0**，返回值信息是**成功**，当前值和设置值一致。

##### 5.3.6.8 获取 String 参数（Lx\_String）

**ROS1**

在终端输入： rosservice call /lx\_camera\_node/LxCamera\_LxString "cmd: 4001

val: ''

is\_set: false"

![获取 String 参数（Lx\\\_String）相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-get-of-string-parameters-lx-string.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=f3897749fafb616a77dc0a498035210a)

可以看到输出：

![获取 String 参数（Lx\\\_String）相关图示 2](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-obtain-string-parameter-lx-string-2.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=37bd401fbeb597ad36b86b3f595d3d87)

红框内的就是返回值，图中获取的是设备版本号，根据返回结果可以看到，当前值是 **V1.1.33\_231201**，接口调用返回值是 **0**，返回值信息是**成功**。

**ROS2**

在终端输入：ros2 service call /LxCamera\_LxString lx\_camera\_ros/srv/LxString '\{cmd: 4001,val: '',is\_set: false}'

![获取 String 参数（Lx\\\_String）相关图示 3](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-obtain-string-parameter-lx-string-3.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=25bae636ea0a0dc594606f10bef52d9d)

可以看到输出：

![获取 String 参数（Lx\\\_String）相关图示 4](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-get-the-of-string-parameter-lx-string-4.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=b3cff6257325ea9700e0a9bfaae5a856)

图中获取的是设备版本号，根据返回结果可以看到，当前值是 **V1.1.33\_231201**，接口调用返回值是 **0**，返回值信息是**成功**。

##### 5.3.6.9 设置 String 参数（Lx\_String）

**ROS1**

在终端输入：rosservice call /lx\_camera\_node/LxCamera\_LxString "cmd: 4001

val: 'put:\\"123\\"'

is\_set: true"

![设置 String 参数（Lx\\\_String）相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-setting-string-parameters-lx-string.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=732dd1b4458528fa5a720a9e991d7d67)

可以看到输出：

![设置 String 参数（Lx\\\_String）相关图示 2](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-illustration-2-related-to-setting-string-parameters-lx-string.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=0690e2f0660cff1e9265efa07d90c0f5)

红框内的就是返回值，图中设置的是设备版本号，根据返回结果可以看到，当前值是 **V1.1.33\_231201**，接口调用返回值是\*\*-2\*\*，返回值信息是**不支持**，当前值和设置值不一致，因为该参数不支持设置。\


**ROS2**

在终端输入：ros2 service call /LxCamera\_LxString lx\_camera\_ros/srv/LxString '\{cmd: 4001,val: "put:\\"123\\"",is\_set: true}'

![设置 String 参数（Lx\\\_String）相关图示 3](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-illustration-3-related-to-setting-string-parameters-lx-string.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=fcfe80d767c1b093fff3d43d83432959)

可以看到输出：

![设置 String 参数（Lx\\\_String）相关图示 4](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-setting-string-parameters-lx-string-4.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=cb9b1dc22c2817e8359d89ec7b2985ce)

图中设置的是设备版本号，根据返回结果可以看到，当前值是 **V1.1.33\_231201**，接口调用返回值是\*\*-2\*\*，返回值信息是**不支持**，当前值和设置值不一致，因为该参数不支持设置。

**在设置 String 类型的值时，对于单引号和双引号一定要加转义符，除了 ROS2 中一开始的双引号和 ROS1 中一开始的单引号，例如要输入字符串【PUT”123”】就必须加入转义符变成：【PUT\”123\”】。**

***

## 6\*\*. ROS 推荐硬件配置与资源占用\*\*

### 6.1 推荐硬件配置

在推荐硬件配置中，会根据 CUP 的内核数量、CPU 占用率、内存大小进行分析，**此处给出的配置皆为推荐配置，不是最低配置**，如果硬件配置低于推荐配置，则可以通过减少流输出、关闭点云计算、算法下移等操作来实现稳定运行。\*\*在运行所需配置高于现有配置时，可能导致 ROS 核心崩溃甚至 Ubuntu 系统崩溃。\*\*详细的使用情况会在本章第二、第三小节中给出，请根据情况选择最合适的运行环境和流配置。**此处所有数据均测试于 VM 虚拟机，测试相机为 M4PRO。**

**Ubuntu16.04**

| ROS版本 | CPU | 内存 | 带宽 |
| - | - | - | - |
| ros | AMD64【四核】 | 4G | 1000M |

**Ubuntu18.04**

| ROS版本 | CPU | 内存 | 带宽 |
| - | - | - | - |
| ros | AMD64【四核】 | 4G | 1000M |
| ros2 | AMD64【四核】 | 4G | 1000M |

**Ubuntu20.04**

| ROS版本 | CPU | 内存 | 带宽 |
| - | - | - | - |
| ros | AMD64【四核】 | 4G | 1000M |
| ros2 | AMD64【四核】 | 4G | 1000M |

**Ubuntu22.04**

| ROS版本 | CPU | 内存 | 带宽 |
| - | - | - | - |
| ros | AMD64【四核】 | 4G | 1000M |

### 6.2 CPU 详情

在CPU详情中会展示该节点在不同运行情况下所占用的 CPU 资源数量，测试基于 **AMD64【8 核】，8G 内存**硬件环境下，测试相机为 **M4PRO**，测试算法为**托盘算法**，**2D 宽高为 1280\*960，3D 宽高为 640\*480**、**2D 反畸变开启、3D 反畸变关闭、积分 110 - 3000、深度 0 - 8000、TOF 帧率 14、流模式、平滑等级 1、噪声等级 1、时域等级 0**，统计指令为 **TOP**。因测试软环境是 **VM 虚拟机**，因此实体机所展示的数据与文档中相比有部分波动属于正常现象。对于部分相机，如 S2，会有部分算法在上位机计算，所以导致资源占用量大，属于正常现象。\


**1.部分名词说明如下：**

* 单流：指开启 RGB、深度、强度任意一个流
* 双流：指开启 RGB、深度、强度任意两个流
* 三流：指 RGB、深度、强度三个流全部开启
* 四流：指 RGB、深度、强度、点云全部开启

**2.算法于部分流属于绑定关系，绑定关系如下：**

* 开启托盘算法则必须开启深度
* 开启避障算法则必须开启深度
* 开启定位算法则必须开启 RGB

表格中浅蓝色背景为开启点云的运行配置，无色背景为不开启点云的运行配置。**以下所有测试数据默认为算法下移，因此对于 S2 系列相机来说，所有测试数值可能偏小【S2 系列相机部分算法强制上移】。**

**Ubuntu16.04**

| ROS1 | | |
| - | - | - |
| 运行配置 | 均值% | 区间% |
| 单流 | 10.59 | 0.0\~26.7 |
| 双流 | 14.13 | 0.0\~60.0 |
| 三流 | 16.56 | 0.0\~37.5 |
| 四流 | 108.25 | 93.8\~162.5 |
| 点云+深度 | 105.13 | 93.8\~153.3 |
| 算法+深度 | 5.44 | 0.0\~43.0 |
| 算法+深度+点云 | 104.39 | 93.8\~120.0 |
| 算法+深度+RGB | 13.15 | 6.2\~40.0 |
| 算法+深度+RGB+点云 | 105.96 | 93.8\~146.7 |
| 算法+深度+强度+RGB+点云 | 109.29 | 93.8\~162.5 |

**Ubuntu18.04**

| ROS1 | | |
| - | - | - |
| 运行配置 | 均值% | 区间% |
| 单流 | 10.31 | 0.0\~27.5 |
| 双流 | 12.81 | 5.9\~27.8 |
| 三流 | 16.23 | 5.9\~37.5 |
| 四流 | 105.95 | 88.2\~131.2 |
| 点云+深度 | 103.55 | 88.2\~156.2 |
| 算法+深度 | 56.32 | 0.0\~43.8 |
| 算法+深度+点云 | 104.07 | 78.3\~43.8 |
| 算法+深度+RGB | 15.22 | 5.9\~70.6 |
| 算法+深度+RGB+点云 | 104.56 | 93.8\~125.0 |
| 算法+深度+强度+RGB+点云 | 105.52 | 61.5\~204.8 |

| ROS2 | | |
| - | - | - |
| 运行配置 | 均值% | 区间% |
| 单流 | 19.19 | 5.9\~88.2 |
| 双流 | 23.17 | 6.2\~109.1 |
| 三流 | 30.59 | 9.1\~125.0 |
| 四流 | 108.44 | 44.4\~158.6 |
| 点云+深度 | 102.19 | 37.5\~143.9 |
| 算法+深度 | 6.44 | 0.0\~26.7 |
| 算法+深度+点云 | 104.45 | 79.2\~176.5 |
| 算法+深度+RGB | 14.82 | 5.9\~50.0 |
| 算法+深度+RGB+点云 | 106.89 | 94.1\~137.5 |
| 算法+深度+强度+RGB+点云 | 108.41 | 94.1\~162.5 |

**Ubuntu20.04**

| ROS1 | | |
| - | - | - |
| 运行配置 | 均值% | 区间% |
| 单流 | 11.46 | 0.0\~50.0 |
| 双流 | 14.62 | 6.2\~66.7 |
| 三流 | 18.46 | 6.2\~50.0 |
| 四流 | 43.64 | 25.0\~143.8 |
| 点云+深度 | 28.37 | 12.5\~75.0 |
| 算法+深度 | 6.53 | 0.0\~43.8 |
| 算法+深度+点云 | 29.28 | 13.3\~100 |
| 算法+深度+RGB | 13.79 | 0.0\~50.0 |
| 算法+深度+RGB+点云 | 40.64 | 25.0\~81.2 |
| 算法+深度+强度+RGB+点云 | 44.44 | 25.0\~75.0 |

| ROS2 | | |
| - | - | - |
| 运行配置 | 均值% | 区间% |
| 单流 | 8.07 | 0.0\~20.0 |
| 双流 | 11.25 | 0.0\~33.3 |
| 三流 | 16.18 | 6.2\~62.5 |
| 四流 | 33.77 | 0.0\~86.7 |
| 点云+深度 | 27.45 | 12.5\~81.2 |
| 算法+深度 | 6.13 | 0.0\~68.8 |
| 算法+深度+点云 | 31.11 | 12.5\~56.2 |
| 算法+深度+RGB | 11.75 | 0.0\~68.8 |
| 算法+深度+RGB+点云 | 38.04 | 6.2\~75.0 |
| 算法+深度+强度+RGB+点云 | 40.85 | 18.8\~106.2 |

**Ubuntu22.04**

| ROS1 | | |
| - | - | - |
| 运行配置 | 均值% | 区间% |
| 单流 | 8.05 | 0.0\~23.5 |
| 双流 | 11.99 | 0.0\~75.0 |
| 三流 | 18.08 | 0.0\~100 |
| 四流 | 50.06 | 6.2\~200 |
| 点云+深度 | 33.92 | 0.0\~106.2 |
| 算法+深度 | 7.70 | 0.0\~43.8 |
| 算法+深度+点云 | 36.20 | 6.2\~131.2 |
| 算法+深度+RGB | 14.46 | 6.2\~37.5 |
| 算法+深度+RGB+点云 | 39.07 | 18.8\~94.1 |
| 算法+深度+强度+RGB+点云 | 45.61 | 12.5\~93.8 |

### 6.3 内存详情

在内存详情中会展示该节点在不同运行情况下所占用内存资源数量，测试基于**AMD64【8 核】，8G 内存**硬件环境下，测试相机为 **M4PRO**，测试算法为**托盘算法**，**2D 宽高为 1280\*960，3D 宽高为 640\*480**、**2D 反畸变开启、3D 反畸变关闭、积分 110 - 3000、深度 0 - 8000、TOF 帧率 14、流模式、平滑等级 1、噪声等级 1、时域等级 0**，统计指令为 **TOP**。因测试软环境是 **VM 虚拟机**，因此实体机所展示的数据与文档中相比有部分波动属于正常现象。对于部分相机，如 S2，会有部分算法在上位机计算，所以导致资源占用量大，属于正常现象。\


**1.部分名词说明如下：**

* 单流：指开启 RGB、深度、强度任意一个流
* 双流：指开启 RGB、深度、强度任意两个流
* 三流：指 RGB、深度、强度三个流全部开启
* 四流：指 RGB、深度、强度、点云全部开启

**2.算法于部分流属于绑定关系，绑定关系如下：**

* 开启托盘算法则必须开启深度
* 开启避障算法则必须开启深度
* 开启定位算法则必须开启 RGB

3.表格中浅蓝色背景为开启点云的运行配置，无色背景为不开启点云的运行配置。**以下所有测试数据默认为算法下移，因此对于 S2 系列相机来说，所有测试数值可能偏小【S2 系列相机部分算法强制上移】。**

**Ubuntu16.04**

| ROS1 | | |
| - | - | - |
| 运行配置 | 均值% | 区间% |
| 单流 | 0.60 | 0.6\~0.7 |
| 双流 | 0.61 | 0.6\~0.8 |
| 三流 | 0.66 | 0.6\~0.8 |
| 四流 | 0.79 | 0.7\~0.9 |
| 点云+深度 | 0.60 | 0.5\~0.7 |
| 算法+深度 | 0.50 | 0.5\~0.5 |
| 算法+深度+点云 | 0.60 | 0.5\~0.7 |
| 算法+深度+RGB | 0.62 | 0.6\~0.8 |
| 算法+深度+RGB+点云 | 0.71 | 0.6\~0.9 |
| 算法+深度+强度+RGB+点云 | 0.79 | 0.7\~0.9 |

**Ubuntu18.04**

| ROS1 | | |
| - | - | - |
| 运行配置 | 均值% | 区间% |
| 单流 | 1.01 | 1.1\~1.2 |
| 双流 | 1.10 | 1.1\~1.2 |
| 三流 | 1.10 | 1.1\~1.2 |
| 四流 | 1.19 | 1.1\~1.3 |
| 点云+深度 | 1.09 | 0.9\~1.2 |
| 算法+深度 | 0.90 | 0.9\~1.0 |
| 算法+深度+点云 | 1.09 | 0.9\~1.2 |
| 算法+深度+RGB | 1.10 | 1.1\~1.2 |
| 算法+深度+RGB+点云 | 1.19 | 1.1\~1.3 |
| 算法+深度+强度+RGB+点云 | 1.20 | 1.1\~1.4 |

| ROS2 | | |
| - | - | - |
| 运行配置 | 均值% | 区间% |
| 单流 | 1.19 | 1.1\~1.2 |
| 双流 | 1.27 | 1.1\~1.3 |
| 三流 | 1.29 | 1.2\~1.3 |
| 四流 | 1.57 | 1.3\~1.6 |
| 点云+深度 | 1.20 | 1.1\~1.3 |
| 算法+深度 | 0.90 | 0.9\~0.9 |
| 算法+深度+点云 | 1.10 | 1.0\~1.2 |
| 算法+深度+RGB | 1.10 | 1.1\~1.2 |
| 算法+深度+RGB+点云 | 1.30 | 1.3\~1.4 |
| 算法+深度+强度+RGB+点云 | 1.41 | 1.3\~1.6 |

**Ubuntu20.04**

| ROS1 | | |
| - | - | - |
| 运行配置 | 均值% | 区间% |
| 单流 | 1.21 | 1.2\~1.4 |
| 双流 | 1.30 | 1.3\~1.4 |
| 三流 | 1.30 | 1.3\~1.4 |
| 四流 | 1.33 | 1.3\~1.5 |
| 点云+深度 | 1.21 | 1.2\~1.4 |
| 算法+深度 | 1.19 | 1.1\~1.2 |
| 算法+深度+点云 | 1.22 | 1.2\~1.4 |
| 算法+深度+RGB | 1.30 | 1.3\~1.4 |
| 算法+深度+RGB+点云 | 1.32 | 1.3\~1.5 |
| 算法+深度+强度+RGB+点云 | 1.33 | 1.3\~1.5 |

| ROS2 | | |
| - | - | - |
| 运行配置 | 均值% | 区间% |
| 单流 | 1.20 | 1.2\~1.3 |
| 双流 | 1.20 | 1.2\~1.3 |
| 三流 | 1.30 | 1.3\~1.4 |
| 四流 | 1.64 | 1.4\~1.7 |
| 点云+深度 | 1.36 | 1.1\~1.4 |
| 算法+深度 | 1.10 | 1.1\~1.1 |
| 算法+深度+点云 | 1.19 | 1.1\~1.3 |
| 算法+深度+RGB | 1.40 | 1.4\~1.4 |
| 算法+深度+RGB+点云 | 1.58 | 1.4\~1.7 |
| 算法+深度+强度+RGB+点云 | 1.60 | 1.5\~1.7 |

**Ubuntu22.04**

| ROS1 | | |
| - | - | - |
| 运行配置 | 均值% | 区间% |
| 单流 | 1.28 | 1.1\~1.3 |
| 双流 | 1.29 | 1.2\~1.3 |
| 三流 | 1.20 | 1.2\~1.3 |
| 四流 | 1.49 | 1.4\~1.6 |
| 点云+深度 | 1.11 | 1.1\~1.2 |
| 算法+深度 | 1.00 | 1.0\~1.0 |
| 算法+深度+点云 | 1.11 | 1.1\~1.2 |
| 算法+深度+RGB | 1.20 | 1.2\~1.3 |
| 算法+深度+RGB+点云 | 1.55 | 1.3\~1.6 |
| 算法+深度+强度+RGB+点云 | 1.51 | 1.3\~1.7 |

***

## 附录：

本附录中提供一些工具的安装方法，使用其中方法时，至少需要有一定的 linux基础知识，而且不保证每台电脑都能通过本文档附录中展示的方法成功安装，每台电脑的环境不一样，遇到的问题可能也不一致，如果遇到本附录中没有展示的问题，请自行搜索解决办法。

### 1. Cmake 指定版本安装方法

前往官网下载指定版本 cmake： [CMake 下载](https://cmake.org/download/)。解压下载的包：`tar -zxvf cmake-XXX.tar.gz`。进入解压后的目录，执行编译和配置：

./bootstrap

make

sudo make install

查看 Cmake 版本查看是否安装成功：

cmake --version

### 2. Opencv 指定版本安装方法

1.下载所需版本的 opencv：[Releases-OpenCV](https://opencv.org/releases/ "Releases-OpenCV")

![Opencv 指定版本安装方法相关图示](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-the-installation-method-of-the-specified-version-of-opencv.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=b58b38d6f19ebe593d869a30c6d5361d)

2.环境配置，依次执行以下命令：

sudo apt-get install build-essential

sudo apt-getinstallcmake gitlibgtk2.0-devpkg-config libavcodec-dev

libavformat-dev libswscale-dev

sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev

libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

3.新建 opencv 文件夹，将下载的源码解压到 opencv 文件夹中

4.依次执行以下命令：

1.   cd opencv
2.   mkdir build && cd build
3.   sudocmake-DCMAKE\_BUILD\_TYPE=Release-D
4.   CMAKE\_INSTALL\_PREFIX=/usr/local ..
5.   sudo make -j4
6.   sudo make install等待安装完成即可

### 3. Pcl 指定版本安装方法

1.查看支持的 pcl 版本：

apt-cache madison libpcl-dev

2.安装指定的 pcl 版本（其中 1.10.0 需要替换为所需的版本号）：

sudo apt-get install libpcl-dev=1.10.0

### 4. 安装 ROS

**Ubuntu16.04**

1.添加软件源，设置秘钥：

sudo sh -c 'echo "deb [http://packages.ros.org/ros/ubuntu](http://packages.ros.org/ros/ubuntu) \$(lsb\_release -sc) main" >

/etc/apt/sources.list.d/ros-latest.list'

sudoapt-keyadv--keyserver'hkp\://keyserver.ubuntu.com:80'--recv-key

C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

2.添加秘钥：

curl -sSL

'[http://keyserver.ubuntu.com/pks/lookup?op=get\&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654](http://keyserver.ubuntu.com/pks/lookup?op=get\&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654)' | sudo apt-key add -

3.更新源：

sudo apt-get update

4.安装完整的 ros：

sudo apt-get install ros-kinetic-desktop-full

5.配置环境变量：

echo "source /opt/ros/kinetic/setup.bash" >> \~/.bashrc

source \~/.bashrc

6.补全 ROS 相关的工具：

sudoaptinstallpython-rosinstallpython-rosinstall-generatorpython-wstool

build-essential

7.到此 ROS1 全部安装完成，运行一下 ROS 自带的示例，查看安装是否正确：

打开一个终端输入：roscore

再打开一个终端输入：rosrun turtlesim turtlesim\_node

再打开一个终端：rosrun turtlesim turtle\_teleop\_key

在第三个终端可以通过方向键控制小海龟

如果能正常运行如下图，则说明 ros 已经正确安装：

![安装 ROS相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-installation-ros.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=96a64a5d514df3850226c7912e3337f7)

**Ubuntu18.04**

1.设置软件源：

sudo sh -c '. /etc/lsb-release && echo "deb [http://mirrors.ustc.edu.cn/ros/ubuntu/](http://mirrors.ustc.edu.cn/ros/ubuntu/)

\`lsb\_release -cs\` main" > /etc/apt/sources.list.d/ros-latest.list'

2.设置公钥：

sudoapt-keyadv--keyserver'hkp\://keyserver.ubuntu.com:80'--recv-key

C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

3.更新软件列表：

sudo apt update

4.安装 Ubuntu18.04 版本的 ROS1：

sudo apt install ros-melodic-desktop-full

5.设置环境变量：

echo "source /opt/ros/melodic/setup.bash" >> \~/.bashrc

source \~/.bashrc如果是 zsh：

echo "source /opt/ros/melodic/setup.bash" >> \~/.zshrc

source \~/.zshrc

6.补全 ROS 相关的工具：

sudoaptinstallpython-rosdeppython-rosinstallpython-rosinstall-generator

python-wstool build-essential

7.到此 ROS1 全部安装完成，运行一下 ROS 自带的示例，查看安装是否正确：

打开一个终端输入：roscore

再打开一个终端输入：rosrun turtlesim turtlesim\_node

再打开一个终端：rosrun turtlesim turtle\_teleop\_key

在第三个终端可以通过方向键控制小海龟

如果能正常运行如下图，则说明 ros 已经正确安装：

![安装 ROS相关图示 2](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-installation-ros-2.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=aa218b9618ee60e736bfa8b93a063fd4)

**Ubuntu20.04**

1.配置公钥：

sudoapt-keyadv--keyserver'hkp\://keyserver.ubuntu.com:80'--recv-key

C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

2.如果显示无法连接服务器或超时，请先更新软件源列表：

sudo apt-get update

sudo apt-get upgrade

3.配置公钥后，再次更新软件列表：

sudo apt-get update安装 ros：

sudo apt install ros-noetic-desktop-full

4.设置环境变量：

echo "source /opt/ros/noetic/setup.bash" >> \~/.bashrc

source \~/.bashrc

5.安装 ROS 工具：

sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool

build-essential

6.到此 ROS1 全部安装完成，运行一下 ROS 自带的示例，查看安装是否正确：

打开一个终端输入：roscore

再打开一个终端输入：rosrun turtlesim turtlesim\_node

再打开一个终端：rosrun turtlesim turtle\_teleop\_key

在第三个终端可以通过方向键控制小海龟

如果能正常运行如下图，则说明 ros 已经正确安装：

![安装 ROS相关图示 3](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-installation-ros-3.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=6ed2c1f75faf142dab6c49c1147ef4a5)

**Ubuntu22.04**

不推荐在 Ubuntu22.04 中安装 ros1，官方并不支持，如果要安装会遇到非常多的依赖问题。

### 5. Ros 如何创建一个新的测试包

1.新建一个文件夹 ws，在 ws 文件夹中新建 src 文件夹，进入 src 文件夹执行：

catkin\_create\_pkg example std\_msgs rospy roscpp

2.这样就新建了一个名为 example 的包，包依赖于 std\_msgs rospy roscpp

3.然后编译这个新建包：catkin\_make这是一个空的包，不会有任何可执行程序，它只是一个包

4.接下来演示如何创造一个可以输出’Hellow world’的包

5.在刚刚那个包的基础上，我们进入 src 文件夹（包里的 src），并新建一个 main.cpp，如下图（注意看路径）：

![Ros 如何创建一个新的测试包相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-illustration-of-how-to-create-a-new-test-package-in-ros.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=8182373f96a73af85bca555ebddd8716)

6.在 main.cpp 中，我们输入一些代码：

![Ros 如何创建一个新的测试包相关图示 2](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-ros-how-to-create-a-new-test-package-2.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=743ca49df98b2f6eebe64a7100c45bb2)

7.然后我们改一下外面的 CMakeLists.txt，我们在最底下加入一行：add\_executable(example src/main.cpp)

![Ros 如何创建一个新的测试包相关图示 3](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-ros-how-to-create-a-new-test-package-3.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=6e8b6e5cf44eedb215e3ae4961bee8d1)

8.然后返回到 ws 目录中编译，执行命令：catkin\_make

![Ros 如何创建一个新的测试包相关图示 4](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-ros-how-to-create-a-new-test-package-4.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=f3883237fe53a606f6ddb57652429880)

9.看到这些，就说明编译成功了

10.接下来我们配置环境：

source devel/setup.bash

![Ros 如何创建一个新的测试包相关图示 5](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-ros-how-to-create-a-new-test-package-5.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=c71d55b5e689c6ce06360fc7d28234d3)

11.然后执行程序，就可以看到输出了：

rosrun example example

![Ros 如何创建一个新的测试包相关图示 6](https://mintcdn.com/mrdvs/wUtKynYGI53dq31v/images/developers/camera-sdk-linux-examples-ros-how-to-create-a-new-test-package-6.avif?fit=max\&auto=format\&n=wUtKynYGI53dq31v\&q=85\&s=5530f5f6224010bfb7f512f412c4eb34)

### 6. 安装 ROS2

**Ubuntu16.04**

1.添加秘钥：

sudo apt-get update && sudo apt-get install curl

curl [http://repo.ros2.org/repos.key](http://repo.ros2.org/repos.key) | sudo apt-key add -

2.添加权限：

sudo apt update && sudo apt install curl gnupg2 lsb-release

curl-shttps\://raw\.githubusercontent.com/ros/rosdistro/master/ros.asc|sudo

apt-key add -

3.如果此步骤报错，则使用 VPN 翻墙然后打开浏览器，输入网址，并复制其中内容，然后新建 ros.asc，将内容拷贝到文件中，拷贝完成后如下：

![安装 ROS2相关图示](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-installation-ros2.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=5e55ce9e901ee9de7416685a3ba4d35d)

4.然后重新执行第三步：sudo apt-key add ros.asc

5.继续执行：

sudo sh -c 'echo "deb \[arch=amd64] [http://packages.ros.org/ros2/ubuntu](http://packages.ros.org/ros2/ubuntu) bionic

main" > /etc/apt/sources.list.d/ros2-latest.list'

6.安装 ROS2：

sudo apt update

sudo apt install ros-ardent-desktop

7.配制环境变量：

source /opt/ros/ardent/setup.bash

8.安装功能包：

sudo apt-get update

sudo apt-get install ros-ardent-ros1-bridge sudo apt-get install ros-ardent-turtlebot2-\*

9.尝试运行示例 程序，打开一个终端运行：

source \~/.bashrc

ros2 run demo\_nodes\_cpp talker

10.再打开一个中断运行：

source\~/.bashrc

ros2 run demo\_nodes\_cpp talker

11.终端输出如下则证明安装成功：

![安装 ROS2相关图示 2](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-installation-ros2-2.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=12d0fc6ff230cb7d6001466ac488512b)

**Ubuntu18.04：**

1.添加软件源

sudo apt update && sudo apt install curl gnupg2 lsb-release

curl -s [https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc](https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc)

sudo apt-key add ros.asc

2.如果此步骤报错如下：

![安装 ROS2相关图示 3](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-installation-ros2-3.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=16e3b1372d9fb64b46e548dc96a03785)

3.则使用 VPN 翻墙然后打开浏览器，输入网址，并复制其中内容，然后新建 ros.asc，将内容拷贝到文件中，拷贝完成后如下：

![安装 ROS2相关图示 4](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-installation-ros2-4.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=c1a3b512baea6d24439c9c9286b8fb63)

4.然后重新执行第三步：sudo apt-key add ros.asc

5.继续执行：

sudo sh -c 'echo "deb \[arch=amd64] [http://packages.ros.org/ros2/ubuntu](http://packages.ros.org/ros2/ubuntu) bionic

main" > /etc/apt/sources.list.d/ros2-latest.list'

6.完成后开始下载 ros2，其中红色字体需要替换为不同的版本（查看上表）：

sudo apt update

sudo apt install ros-eloquent-desktop

7.等待安装完成后继续安装 python 库，执行：sudo apt install -y libpython3-dev python3-pip pip3 install -U argcomplete

接着配置环境变量：

echo "source /opt/ros/eloquent/setup.bash" >> \~/.bashrc

source \~/.bashrc

8.尝试运行示例程序，打开一个终端运行：

source \~/.bashrc

ros2 run demo\_nodes\_cpp talker

9.再打开一个中断运行：

source \~/.bashrc

ros2 run demo\_nodes\_py listener

10.终端输出如下则证明安装成功：

![安装 ROS2相关图示 5](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-installation-ros2-5.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=bffad494a4106afbfc5b65b33debf2b6)

**Ubuntu20.04**

1.添加软件源

sudo apt update && sudo apt install curl gnupg2 lsb-release

```bash theme={null}
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
```

2.如果遇到报错“ailed to connect to raw\.githubusercontent.com port 443 after 13 ms:拒绝连接”

![安装 ROS2相关图示 6](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-installation-ros2-6.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=d516c57b396d400caa8e94572b16c448)

sudo vi /etc/hosts

3.增加下面的解析

185.199.108.133raw\.githubusercontent.com

4.添加后的文件如下：

![安装 ROS2相关图示 7](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-installation-ros2-7.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=3ba00c61cd2d81ebee50e0f512f0d20a)

echo"deb\[arch=(source/etc/os-release&\&echo\$UBUNTU\_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

5.继续执行：

sudo sh -c 'echo "deb \[arch=amd64] [http://packages.ros.org/ros2/ubuntu](http://packages.ros.org/ros2/ubuntu) bionicmain" > /etc/apt/sources.list.d/ros2-latest.list'

6.完成后开始下载 ros2：

sudo apt update

sudo apt install ros-foxy-desktop

7.等待安装完成后继续安装 python 库，执行：sudo apt install -y libpython3-dev python3-pip pip3 install -U argcomplete

8.接着配置环境变量：

echo "source /opt/ros/foxy/setup.bash" >> \~/.bashrc

source \~/.bashrc

9.尝试运行示例程序，打开一个终端运行：

source \~/.bashrc

ros2 run demo\_nodes\_cpp talker

10.再打开一个中断运行：

source \~/.bashrc

ros2 run demo\_nodes\_py listener

11.终端输出如下则证明安装成功：

![安装 ROS2相关图示 8](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-installation-ros2-8.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=2f6ef93649ced76a649c28ca7d4d4cf0)

**Ubuntu22.04**

1.添加软件源

sudo apt update && sudo apt install curl gnupg lsb-release

sudo curl -sSL [https://raw.githubusercontent.com/ros/rosdistro/master/ros.key](https://raw.githubusercontent.com/ros/rosdistro/master/ros.key) -o /usr/share/keyrings/ros-archive-keyring.gpgecho"deb\[arch=(source/etc/os-release&\&echo\$UBUNTU\_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

2.如果遇到报错“ailed to connect to raw\.githubusercontent.com port 443 after 13 ms:拒绝连接”

![安装 ROS2相关图示 9](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-installation-ros2-9.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=458b16e6e638fe5c201c33c9d40e36fd)

sudo vi /etc/hosts增加下面的解析

185.199.108.133raw\.githubusercontent.com

添加后的文件如下：

![安装 ROS2相关图示 10](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-installation-ros2-10.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=b51e00b72b37b52064e2094e8b860bb0)

3.完成后开始下载 ros2：sudo apt update

sudo apt install ros-humble-desktop

4.等待安装完成后继续安装 python 库，执行：sudo apt install -y libpython3-dev python3-pip pip3 install -U argcomplete

5.接着配置环境变量：

echo "source /opt/ros/humble/setup.bash" >> \~/.bashrc

source \~/.bashrc

6.尝试运行示例程序，打开一个终端运行：

source \~/.bashrc

ros2 run demo\_nodes\_cpp talker

7.再打开一个中断运行：

source \~/.bashrc

ros2 run demo\_nodes\_py listener

8.终端输出如下则证明安装成功：

![安装 ROS2相关图示 11](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-installation-ros2-11.avif?fit=max\&auto=format\&n=tL-WJIR2I7zXpd8i\&q=85\&s=5419cf8eea5747603b949593e87ba11a)

### 7. Ros2 如何创建一个新的测试包

1.执行命令：

mkdir example\_ws && cd example\_ws

ros2 pkg create --build-type ament\_cmake --node-name example\_n example\_p

colcon build

source install/setup.bash

ros2 run example\_p example\_n

2.就能新建一个名为example\_p 的包和一个名为 example\_n 的节点，运行后会输出：hello world example\_p package


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.