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

# Linux 示例使用手册

> 【迈尔微视自研相机 Linux 开发包】提供了多种示例程序，包括：C、JAVA(http 服务器)、ros 和 ros2。示例代码提供 SDK 的使用方法，以及一些基本的功能、方法，但具体功能的实现仍需要手动修改。本文主要介绍各个示例程序的用法、需要搭建的环境、以及一些注意事项。以下会用少量的…

```yaml theme={null}
version:
  name: "V1.0"
  revision_record:
    - revision_date: "2024/10/12"
      modified_by: "林雨"
```

## 1. **概述**

【迈尔微视自研相机 Linux 开发包】提供了多种示例程序，包括：C、JAVA(http 服务器)、ros 和 ros2。示例代码提供 SDK 的使用方法，以及一些基本的功能、方法，但具体功能的实现仍需要手动修改。本文主要介绍各个示例程序的用法、需要搭建的环境、以及一些注意事项。以下会用少量的篇幅介绍 JAVA、C、C++相关的代码功能介绍，用中量篇幅介绍环境相关的问题，用大量篇幅介绍 ROS 与 ROS2 相关的用法、环境、注意事项等。

推荐优先顺序阅读第一至第三部分，在顺序阅读第一至第三部分之后，对于不同的需求，可以直接跳转到相关部分阅读，各个章节互相独立，不影响查阅。

最后，本文提供一些相关应用与环境的安装方法与注意事项，如有需要可以查阅附录。

***

## 2. **系统与环境**

### 2.1 系统与环境介绍

推荐使用以下几种 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、lron              |

### 2.2 查看系统版本与应用版本

#### 2.2.1 查看系统版本

命令：uname -a

结果：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/7c4617da-c25a-4891-94c8-a32dc762d4dd/af45f496-e312-4351-bb32-6f7ce1a6c8d1.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=1feefd62f510c3d8e6572ef34cda3936" alt="查看系统版本相关图示" width="584" height="27" data-path="images/legacy/7c4617da-c25a-4891-94c8-a32dc762d4dd/af45f496-e312-4351-bb32-6f7ce1a6c8d1.avif" />
</Frame>

操作系统发行版本号：5.15.0

* \*\*主版本号：\*\*5

* \*\*次版本号：\*\*15【奇数为开发版本，偶数为稳定版本】

* \*\*修订版本号：\*\*0【修改的次数】

* \*\*此版本的第 N 次修改：\*\*97

* **内核版本：**#107\~20.0.4.1，通常所说的系统版本就是内核版本

#### 2.2.2 查看 Cmake 版本

命令：cmake -version

结果：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/a123bbcf-982b-47be-901f-3a1946d2fa7b/848d3c09-a031-4c4e-8a30-e455ba39d1a2.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=6568fadee826b1cc4a630b758ee788d6" alt="查看 Cmake 版本相关图示" width="301" height="27" data-path="images/legacy/a123bbcf-982b-47be-901f-3a1946d2fa7b/848d3c09-a031-4c4e-8a30-e455ba39d1a2.avif" />
</Frame>

代表 Cmake 的版本为 3.16.3

#### 2.2.3 查看 Gcc 版本

命令：gcc -v

结果：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/kNk2cPO_S_XIpvDn/images/legacy/25fb257c-a77b-416a-bd23-79b59520bb11/71d0bc17-7ded-4313-ae19-ff163e9dbecf.avif?fit=max&auto=format&n=kNk2cPO_S_XIpvDn&q=85&s=68d09ffd1fe5283263bdaa6070eddef0" alt="查看 Gcc 版本相关图示" width="1280" height="245" data-path="images/legacy/25fb257c-a77b-416a-bd23-79b59520bb11/71d0bc17-7ded-4313-ae19-ff163e9dbecf.avif" />
</Frame>

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

#### 2.2.4 查看 Opencv 版本

命令：pkg-config --modversion opencv

结果：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/v6LV3HuYyMJV7gn5/images/legacy/f00cb7da-8eee-46ed-bdf5-14108c8512f1/a8de70e1-4c06-448a-852c-045bf5893670.avif?fit=max&auto=format&n=v6LV3HuYyMJV7gn5&q=85&s=84c090b04fc1a8c43ee58a9b6b1929e9" alt="查看 Opencv 版本相关图示" width="1186" height="60" data-path="images/legacy/f00cb7da-8eee-46ed-bdf5-14108c8512f1/a8de70e1-4c06-448a-852c-045bf5893670.avif" />
</Frame>

此处版本为 3.2.0

#### 2.2.5 查看 Pcl 版本

命令：dpkg -l libpcl-dev

结果：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/8d01ab23-7eee-472c-9606-2ef3f9838162/d819c737-f626-4399-8f1c-884c66bebde2.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=f1a2b68e3ebf8573cab3210a2b55c430" alt="查看 Pcl 版本相关图示" width="1185" height="142" data-path="images/legacy/8d01ab23-7eee-472c-9606-2ef3f9838162/d819c737-f626-4399-8f1c-884c66bebde2.avif" />
</Frame>

此处版本为 1.8.1

#### 2.2.6 查看 ROS 版本

命令：rosversion -d

结果：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/sF5769lvvJTqdETT/images/legacy/dd047dee-2748-48c7-8937-e89bebdb2d0e/e5af9a35-d242-471a-8c05-dc4ea3ac9188.avif?fit=max&auto=format&n=sF5769lvvJTqdETT&q=85&s=81ae245433e1652bfe0871ca55849398" alt="查看 ROS 版本相关图示" width="1181" height="80" data-path="images/legacy/dd047dee-2748-48c7-8937-e89bebdb2d0e/e5af9a35-d242-471a-8c05-dc4ea3ac9188.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/sF5769lvvJTqdETT/images/legacy/e94ccc9e-723b-4e04-80e8-e1875e752eba/156381c6-eb94-4d6c-80fe-6e76ea8e9c29.avif?fit=max&auto=format&n=sF5769lvvJTqdETT&q=85&s=352c1e4c9450ce900433df9a1f33e592" alt="查看 ROS 版本相关图示 2" width="1184" height="59" data-path="images/legacy/e94ccc9e-723b-4e04-80e8-e1875e752eba/156381c6-eb94-4d6c-80fe-6e76ea8e9c29.avif" />
</Frame>

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

### 2.3 搭建基础开发环境

在安装之前需要先更新安装列表：

执行命令：sudo apt update

结果如下：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/sF5769lvvJTqdETT/images/legacy/d475670b-1c59-4ad4-ae94-b665a89fc526/4cb741b1-3e4d-4ddc-bd52-e6113d7a61e5.avif?fit=max&auto=format&n=sF5769lvvJTqdETT&q=85&s=9d97589b66fb3603f7f9a3d2f2952d02" alt="搭建基础开发环境相关图示" width="1184" height="295" data-path="images/legacy/d475670b-1c59-4ad4-ae94-b665a89fc526/4cb741b1-3e4d-4ddc-bd52-e6113d7a61e5.avif" />
</Frame>

#### 2.3.1 安装 Cmake

命令：sudo apt install cmake

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/202276f8-045b-4cef-a63e-cab724e49d29/127c6296-a6e1-4306-ace4-41dad406c2c1.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=1893a08029dcea26f66e7617d869bf83" alt="安装 Cmake相关图示" width="491" height="46" data-path="images/legacy/202276f8-045b-4cef-a63e-cab724e49d29/127c6296-a6e1-4306-ace4-41dad406c2c1.avif" />
</Frame>

#### 2.3.2 安装 Gcc

命令：sudo apt install build-essential

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/sF5769lvvJTqdETT/images/legacy/e8f4c492-c1f6-44d9-bf50-6f10676f785e/f9aa4459-2cb5-4b23-8ca3-34098497abee.avif?fit=max&auto=format&n=sF5769lvvJTqdETT&q=85&s=ba04106fca9348e998a3d27cf4bbc377" alt="安装 Gcc相关图示" width="686" height="65" data-path="images/legacy/e8f4c492-c1f6-44d9-bf50-6f10676f785e/f9aa4459-2cb5-4b23-8ca3-34098497abee.avif" />
</Frame>

### 2.4 搭建可选开发环境

#### 2.4.1 安装 Opencv【可显示相机图像】

执行命令：sudo apt-get install libopencv-dev

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/sF5769lvvJTqdETT/images/legacy/d33099da-3dd6-4b5c-a34d-98774f9c1141/5b8609fe-3de6-4066-810d-2cb2d0f3f45c.avif?fit=max&auto=format&n=sF5769lvvJTqdETT&q=85&s=64662789aad3d8fa8abd1e48d0d778f2" alt="安装 Opencv【可显示相机图像】相关图示" width="716" height="61" data-path="images/legacy/d33099da-3dd6-4b5c-a34d-98774f9c1141/5b8609fe-3de6-4066-810d-2cb2d0f3f45c.avif" />
</Frame>

#### 2.4.2 安装 Pcl【可显示点云】

执行命令：sudo apt-get install libpcl-dev

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/v6LV3HuYyMJV7gn5/images/legacy/fe2ed92e-0c06-4a7a-b1c5-c8c6608b367b/095f9e66-e712-479f-8f11-5d054af0aa74.avif?fit=max&auto=format&n=v6LV3HuYyMJV7gn5&q=85&s=9c8caacb6a97d8db1db26a7ff06325cc" alt="安装 Pcl【可显示点云】相关图示" width="650" height="52" data-path="images/legacy/fe2ed92e-0c06-4a7a-b1c5-c8c6608b367b/095f9e66-e712-479f-8f11-5d054af0aa74.avif" />
</Frame>

***

## 3. **示例代码的介绍与运行准备**

### 3.1 执行安装脚本

1.解压缩 Lanxin-MRDVS 文件，并进入 Lanxin-MRDVS 文件夹

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/v6LV3HuYyMJV7gn5/images/legacy/ec64ca28-3d2f-4a1e-9c22-b73eaf23b1eb/d94065bf-30a9-4dc8-bcae-633a46963134.avif?fit=max&auto=format&n=v6LV3HuYyMJV7gn5&q=85&s=178ba7e066a2345d841a53f26d396330" alt="执行安装脚本相关图示" width="1041" height="199" data-path="images/legacy/ec64ca28-3d2f-4a1e-9c22-b73eaf23b1eb/d94065bf-30a9-4dc8-bcae-633a46963134.avif" />
</Frame>

2.右键打开控制台

3.执行 install.sh 脚本

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/02ce52d3-e986-469a-835d-71f328f976cd/00fc58f7-aec6-4922-8d95-83a97284b3db.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=8e966f0c325c97760fdfefe5f991ec4a" alt="执行安装脚本相关图示 2" width="621" height="51" data-path="images/legacy/02ce52d3-e986-469a-835d-71f328f976cd/00fc58f7-aec6-4922-8d95-83a97284b3db.avif" />
</Frame>

4.进入/opt/目录检查是否安装成功

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/kNk2cPO_S_XIpvDn/images/legacy/3e226372-2cc2-4f68-8cb5-cbf81484abb9/4663ae94-a3fb-45ed-a5f9-d5392851910a.avif?fit=max&auto=format&n=kNk2cPO_S_XIpvDn&q=85&s=d0f0604202a0335cb78e6333e9d654ce" alt="执行安装脚本相关图示 3" width="1021" height="109" data-path="images/legacy/3e226372-2cc2-4f68-8cb5-cbf81484abb9/4663ae94-a3fb-45ed-a5f9-d5392851910a.avif" />
</Frame>

5.若是能找到文件夹，则是安装成功

6.若是安装失败，则需要手动添加到 opt 目录下

7.执行 set\_socket\_buffer\_size.sh 脚本

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/0becfb0a-72d4-4964-a48b-1ab500b96f2c/45ce9170-fd29-4dea-8dcb-ad206233da6b.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=cab5d9ddaa19916bec497ea1523fdadb" alt="执行安装脚本相关图示 4" width="682" height="41" data-path="images/legacy/0becfb0a-72d4-4964-a48b-1ab500b96f2c/45ce9170-fd29-4dea-8dcb-ad206233da6b.avif" />
</Frame>

8.至此安装脚本全部执行完成！

### 3.2 示例代码介绍

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/kNk2cPO_S_XIpvDn/images/legacy/3dcd11f9-5cd7-49ab-8c7f-3a060e84a9b1/9200d671-9bde-4f8a-b0af-6003e1c9aa00.avif?fit=max&auto=format&n=kNk2cPO_S_XIpvDn&q=85&s=5fc1532fc158e81d07ca126a80f908f4" alt="示例代码介绍相关图示" width="1042" height="181" data-path="images/legacy/3dcd11f9-5cd7-49ab-8c7f-3a060e84a9b1/9200d671-9bde-4f8a-b0af-6003e1c9aa00.avif" />
</Frame>

* C 文件夹中包含 C 与 C++相关的代码

* Java 文件夹中包含一个 http 服务器，用于间接的调用 sdk

* Ros 文件夹中包含一个 ros 的示例

* Ros2 文件夹中包含一个 ros2 的示例

#### 3.2.1 C 与 C++示例代码

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/sF5769lvvJTqdETT/images/legacy/e3b253f3-6743-4945-b738-b8e9b8dfc7dc/9a255d61-eadf-4076-847d-65b29fe4eace.avif?fit=max&auto=format&n=sF5769lvvJTqdETT&q=85&s=89bf6d65198a2a4806627fe26f76d1b3" alt="C 与 C++示例代码相关图示" width="1037" height="186" data-path="images/legacy/e3b253f3-6743-4945-b738-b8e9b8dfc7dc/9a255d61-eadf-4076-847d-65b29fe4eace.avif" />
</Frame>

含 9 个文件夹与 1 个 Cmakelist 文件，每个文件夹中包含一个 cpp 文件

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

* application\_obstacle：获取相机流数据并开启避障算法，输出算法结果

* application\_pallet：获取相机流数据并开启托盘算法，输出算法结果

* arm\_local\_camera：在相机中【ARM】调用 SDK 并获取流数据

* frame\_callback：使用回调方式获取相机流数据

* multi\_cameras：打开多个相机并获取流数据

* single\_camera：打开单个相机并获取流数据

* single\_camera2：通过结构体方式获取帧数据

可以根据不同需要选择不同的示例代码进行测试和修改

#### 3.2.2 Java 示例代码

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/kNk2cPO_S_XIpvDn/images/legacy/26332b64-8f33-4ebf-bf82-ba16e30445c7/2276c2ab-ad64-46d0-942d-1bd3962e8912.avif?fit=max&auto=format&n=kNk2cPO_S_XIpvDn&q=85&s=5c352fbed179a2b92f9ee18d5c251c81" alt="Java 示例代码相关图示" width="1042" height="227" data-path="images/legacy/26332b64-8f33-4ebf-bf82-ba16e30445c7/2276c2ab-ad64-46d0-942d-1bd3962e8912.avif" />
</Frame>

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

* Config：文件夹中存放着服务器相关的配置

* Middleware：服务器主题

* LxCamera.postman\_collection.json：postman 配置文件

* README：java 虚拟服务器使用教程

#### 3.2.3 ROS 示例代码

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/8528536f-739b-4793-80a5-1f0fecf758b6/042f03ed-0332-4ac2-92b8-9efce2029e00.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=1ad36d12bf7bf804440df7346bbef1ce" alt="ROS 示例代码相关图示" width="500" height="194" data-path="images/legacy/8528536f-739b-4793-80a5-1f0fecf758b6/042f03ed-0332-4ac2-92b8-9efce2029e00.avif" />
</Frame>

* lx\_camera\_node\_ws：文件夹中包含了一个标准的 ros 驱动

* README.EN：用英文说明了如何编译节点以及创建一个新的节点

#### 3.2.4 ROS2 示例代码

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/90c830a3-78f2-44af-a51a-8f0d23bde64f/e2d32a99-ec9a-4276-bab4-ed66232c609e.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=1e24587e7c6d9c455960df1b1104cf91" alt="ROS2 示例代码相关图示" width="611" height="227" data-path="images/legacy/90c830a3-78f2-44af-a51a-8f0d23bde64f/e2d32a99-ec9a-4276-bab4-ed66232c609e.avif" />
</Frame>

* lx\_camera\_node\_ws：文件夹中包含了一个标准的 ros2 驱动

* README.EN：用英文说明了如何编译节点以及创建一个新的节点

#### 3.2.5 ros-v1pro 示例代码

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/sF5769lvvJTqdETT/images/legacy/d752e5ea-2020-4da1-abe5-9856083df609/8df69cbb-cbb9-4229-ab4c-a8a1f50dd3ec.avif?fit=max&auto=format&n=sF5769lvvJTqdETT&q=85&s=f0570d4033c26fd6dce419f0702fca28" alt="ros-v1pro 示例代码相关图示" width="641" height="284" data-path="images/legacy/d752e5ea-2020-4da1-abe5-9856083df609/8df69cbb-cbb9-4229-ab4c-a8a1f50dd3ec.avif" />
</Frame>

* src：文件夹中包含了一个标准的 ros 驱动

* README：说明了如何使用这个节点

* README.pdf：说明了如何使用这个节点

***

## 4. **示例代码的编译与运行**

### 4.1 C 与 C++示例代码的编译与运行

进入示例中的 C 文件夹：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/9af1cca5-4fa3-4372-9f90-a6e2400ebf14/47b36fcb-bb11-46d8-a5c3-4f32d89d5e9e.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=a9a38a516b4a08baeee6590364e5622a" alt="C 与 C++示例代码的编译与运行相关图示" width="1044" height="202" data-path="images/legacy/9af1cca5-4fa3-4372-9f90-a6e2400ebf14/47b36fcb-bb11-46d8-a5c3-4f32d89d5e9e.avif" />
</Frame>

在 C 文件夹中打开一个终端，依次执行以下命令：

* mkdir build

* cd build

* cmake ..

* make

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/TF-TfIsh_fVqVeCP/images/legacy/c020084f-0e25-459c-894d-793d7c4c8bfc/c799b5ae-fa76-4120-a1f2-5edfcc975484.avif?fit=max&auto=format&n=TF-TfIsh_fVqVeCP&q=85&s=ed2a48c020a22a010318cbe374feb00f" alt="C 与 C++示例代码的编译与运行相关图示 2" width="1040" height="216" data-path="images/legacy/c020084f-0e25-459c-894d-793d7c4c8bfc/c799b5ae-fa76-4120-a1f2-5edfcc975484.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/6cad8039-5c77-46ee-8745-5f13cbb0a379/659bdc66-bf29-4040-9967-c24e45613088.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=81d16b4707602b24b35a19b29526add4" alt="C 与 C++示例代码的编译与运行相关图示 3" width="1041" height="250" data-path="images/legacy/6cad8039-5c77-46ee-8745-5f13cbb0a379/659bdc66-bf29-4040-9967-c24e45613088.avif" />
</Frame>

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

### 4.2 java 示例运行流程

Java 与其他示例代码不相同，它不直接提供源码，它提供一个 http 服务器以及一个postman 示例，有需要通过 http 来实现间接控制相机的，可以选择 java 示例，进入 java 文件夹，文件夹内容如下：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/9fe48416-b016-422c-971b-188cd01aab9d/e0b5c957-1b1a-4656-97d9-343beb990da4.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=ba53ece851b956123ce9ca0a248197b4" alt="java 示例运行流程相关图示" width="1039" height="221" data-path="images/legacy/9fe48416-b016-422c-971b-188cd01aab9d/e0b5c957-1b1a-4656-97d9-343beb990da4.avif" />
</Frame>

运行流程如下：

* 进入 config 文件夹中，修改 Configs.json 文件中的 http\_sever\_host 字段和http\_sever\_port 字段：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/1a4b7a11-8ed8-4b33-a17a-ebe21216cbff/b1502b67-9dbc-4617-b2fa-ec3f9a3213e5.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=6be50182e68366f835f278ca285ff3c1" alt="java 示例运行流程相关图示 2" width="697" height="282" data-path="images/legacy/1a4b7a11-8ed8-4b33-a17a-ebe21216cbff/b1502b67-9dbc-4617-b2fa-ec3f9a3213e5.avif" />
</Frame>

* 进入 middleware 文件夹，执行 start.sh 脚本，即可启用中转服务器

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/aa511cbc-a62e-4ce9-8243-5f8d3a1f15cc/98d76161-6de9-41b4-8b51-5a1be024d259.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=bf85ffebf35d6d83d4992be85dab6ba2" alt="java 示例运行流程相关图示 3" width="1037" height="179" data-path="images/legacy/aa511cbc-a62e-4ce9-8243-5f8d3a1f15cc/98d76161-6de9-41b4-8b51-5a1be024d259.avif" />
</Frame>

* 使用 postman 打开 LxCamera.postman\_collection.json 文件，即可向示例端口发送数据

### 4.3 ROS 示例代码的编译与运行

进入 ROS 文件夹，开启一个控制台，执行：roscore

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/17961e97-d809-43e8-81a6-91a847265fac/04993e81-2355-4753-bb64-8383cfc976f9.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=f500c78728f921d8764ba5dd73f9b3fa" alt="ROS 示例代码的编译与运行相关图示" width="892" height="301" data-path="images/legacy/17961e97-d809-43e8-81a6-91a847265fac/04993e81-2355-4753-bb64-8383cfc976f9.avif" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/198c9361-7dbb-4f57-b1d3-cdc730257244/3555f417-f859-4936-9d68-34da9d387a71.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=79bd8760e484b24433f743a15dc9c17e" alt="ROS 示例代码的编译与运行相关图示 2" width="1026" height="41" data-path="images/legacy/198c9361-7dbb-4f57-b1d3-cdc730257244/3555f417-f859-4936-9d68-34da9d387a71.avif" />
</Frame>

右键再开启一个控制台，进入 lx\_camera\_node\_ws 文件夹执行 catkin\_make

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/0f100d3a-6fcc-403a-a0d7-704f8c196cfa/2f053935-823b-4c96-a4fe-c994769bd2ba.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=5310d6bc83f72e5408677f641c5c216a" alt="ROS 示例代码的编译与运行相关图示 3" width="1029" height="91" data-path="images/legacy/0f100d3a-6fcc-403a-a0d7-704f8c196cfa/2f053935-823b-4c96-a4fe-c994769bd2ba.avif" />
</Frame>

成功执行后会显示如下：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/6190e63d-282a-4384-a707-708b0e31e2b2/eaf02f58-419e-4c91-bebc-dc0cc11fa4a4.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=4acff6b950cfbab95764f64898c17bbe" alt="ROS 示例代码的编译与运行相关图示 4" width="1042" height="109" data-path="images/legacy/6190e63d-282a-4384-a707-708b0e31e2b2/eaf02f58-419e-4c91-bebc-dc0cc11fa4a4.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/TF-TfIsh_fVqVeCP/images/legacy/aebae7ca-041d-4bf7-b06a-77b91eb62ad3/3f4f8499-2297-4ad3-8287-f6037afc7491.avif?fit=max&auto=format&n=TF-TfIsh_fVqVeCP&q=85&s=33114653b4aa74d560d852205f3fd552" alt="ROS 示例代码的编译与运行相关图示 5" width="1034" height="225" data-path="images/legacy/aebae7ca-041d-4bf7-b06a-77b91eb62ad3/3f4f8499-2297-4ad3-8287-f6037afc7491.avif" />
</Frame>

执行 source devel/setup.bash 配置环境后使用 roslaunch 运行节点，命令如下：

* roslaunch lx\_camera\_ros lx\_camera\_ros.launch

* roslaunch lx\_camera\_ros obstacleV2.launch

* roslaunch lx\_camera\_ros obstacle.launch

* roslaunch lx\_camera\_ros pallet.launch

从上往下依次是：运行普通节点、运行避障算法 2 节点、运行避障算法节点、运行托盘算法节点，各节点不能同时启用。

### 4.4 ROS2 示例代码的编译与运行

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/0cbdabe7-156c-4fb7-9996-e531e4da6fbf/86eb93f5-6cc3-4910-8a5b-a5c13ac199f4.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=56cdd4cbf9ef8742445580acd6db8672" alt="ROS2 示例代码的编译与运行相关图示" width="551" height="246" data-path="images/legacy/0cbdabe7-156c-4fb7-9996-e531e4da6fbf/86eb93f5-6cc3-4910-8a5b-a5c13ac199f4.avif" />
</Frame>

示例 ros 节点采用 colcon 编译方式

首先需要安装编译工具，执行：sudo apt install python3-colcon-common-extensions

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/789d5f33-560d-479e-88d1-da3800db324d/948dca59-04e6-4bff-ac53-7a4c7404faff.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=c1c70b6209cf2c6751cd746e73948d08" alt="ROS2 示例代码的编译与运行相关图示 2" width="900" height="41" data-path="images/legacy/789d5f33-560d-479e-88d1-da3800db324d/948dca59-04e6-4bff-ac53-7a4c7404faff.avif" />
</Frame>

然后安装 ros-pcl 依赖包：sudo apt-get install ros-foxy-pcl\*【红色字体部分需要替换为对应的 ros2 版本】

安装完成后进入 lx\_camera\_node\_ws 目录编译项目，执行：colcon build

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/p8TYWsai56GIOIxs/images/legacy/c75782f3-c2df-4abb-aec7-a2757059c57e/a58d430e-9667-4e05-a8dc-1de770f223e1.avif?fit=max&auto=format&n=p8TYWsai56GIOIxs&q=85&s=0bd49f4721d7bd5e80122ab78a9d11a9" alt="ROS2 示例代码的编译与运行相关图示 3" width="899" height="177" data-path="images/legacy/c75782f3-c2df-4abb-aec7-a2757059c57e/a58d430e-9667-4e05-a8dc-1de770f223e1.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/kNk2cPO_S_XIpvDn/images/legacy/3c285ed6-e1f4-4ec5-9a38-8513b6c4132f/9bb9dda9-0dc9-4eac-9ecb-55e8ffdcd4f7.avif?fit=max&auto=format&n=kNk2cPO_S_XIpvDn&q=85&s=9d3030c5b5996e084ccf67eec3fa862e" alt="ROS2 示例代码的编译与运行相关图示 4" width="1039" height="337" data-path="images/legacy/3c285ed6-e1f4-4ec5-9a38-8513b6c4132f/9bb9dda9-0dc9-4eac-9ecb-55e8ffdcd4f7.avif" />
</Frame>

执行 source install/setup.bash 配置环境后使用 ros2 launch 运行节点，命令如下：

* ros2 launch lx\_camera\_ros lx\_camera\_ros\_launch.py

* ros2 launch lx\_camera\_ros obstacleV2.launch.py

* ros2 launch lx\_camera\_ros obstacle.launch.py

* ros2 launch lx\_camera\_ros pallet.launch.py

从上往下依次是：运行普通节点、运行避障算法 2 节点、运行避障算法节点、运行托盘算法节点，各节点不能同时启用。

### 4.5 ros-v1pro 示例代码的编译与运行

ros-v1pro 是 V1PRO 相机专用 ros 驱动，在 ros-v1pro 文件夹中有 README.pdf 对该驱动详细说明，本文档中只对其做简单介绍：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/205bd1e9-bec1-4781-8f86-51901fde8aa2/d76be474-b486-4fc0-9fd3-965cb0bd926e.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=fc82eb3ddd32b65ba2edd51175479b8e" alt="ros-v1pro 示例代码的编译与运行相关图示" width="1032" height="224" data-path="images/legacy/205bd1e9-bec1-4781-8f86-51901fde8aa2/d76be474-b486-4fc0-9fd3-965cb0bd926e.avif" />
</Frame>

进入 ros-v1pro 文件夹中右键打开控制台，使用 catkin\_make 编译，编译完成后显示如下：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/7f93bb50-cd8f-438c-a93a-66881fcb008e/e7f8dfa5-f705-4a4f-8950-2dbef4d120ed.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=48bbcf8cd7696bc0e887ad0db77b5d4c" alt="ros-v1pro 示例代码的编译与运行相关图示 2" width="1032" height="59" data-path="images/legacy/7f93bb50-cd8f-438c-a93a-66881fcb008e/e7f8dfa5-f705-4a4f-8950-2dbef4d120ed.avif" />
</Frame>

进行环境配置：source devel/setup.bash

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/p8TYWsai56GIOIxs/images/legacy/c8ac9613-e2d7-4aa1-9f88-abb0e4203656/5c035d4d-90aa-448b-8b32-5db62d3a6296.avif?fit=max&auto=format&n=p8TYWsai56GIOIxs&q=85&s=c04c3ca2acbcb14098c8921361dcf27b" alt="ros-v1pro 示例代码的编译与运行相关图示 3" width="991" height="127" data-path="images/legacy/c8ac9613-e2d7-4aa1-9f88-abb0e4203656/5c035d4d-90aa-448b-8b32-5db62d3a6296.avif" />
</Frame>

最后运行节点：

* roslaunch lx\_camera\_ros localization.launch

* roslaunch lx\_camera\_ros mapping.launch

* roslaunch lx\_camera\_ros sensor\_sim.launch

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

***

## 5. **示例代码解释与说明**

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

### 5.1 C 与 C++

#### 5.1.1 CMakeLists

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/p8TYWsai56GIOIxs/images/legacy/c85eb239-fd8d-4ef6-b773-381966e61fcd/3fe09247-995f-4fb5-88e0-dcdb7e432e24.avif?fit=max&auto=format&n=p8TYWsai56GIOIxs&q=85&s=062c2ed90822f7deb22b6e3f20ba12cb" alt="CMakeLists相关图示" width="980" height="471" data-path="images/legacy/c85eb239-fd8d-4ef6-b773-381966e61fcd/3fe09247-995f-4fb5-88e0-dcdb7e432e24.avif" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/TF-TfIsh_fVqVeCP/images/legacy/c1957990-cfb7-4d9f-a48b-b862bab9fbb2/71df8717-0cdd-4e6b-b3ab-b01a9783fe16.avif?fit=max&auto=format&n=TF-TfIsh_fVqVeCP&q=85&s=3bba5fd9cb2201c03f8d340913a6d588" alt="CMakeLists相关图示 2" width="995" height="332" data-path="images/legacy/c1957990-cfb7-4d9f-a48b-b862bab9fbb2/71df8717-0cdd-4e6b-b3ab-b01a9783fe16.avif" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/v6LV3HuYyMJV7gn5/images/legacy/f96f92a5-7a6e-4fe6-9955-89f71c178a4e/1caff473-b030-4e8f-93df-e33b35beec1f.avif?fit=max&auto=format&n=v6LV3HuYyMJV7gn5&q=85&s=8af1001b0afcb23700019b35c6c5541e" alt="CMakeLists相关图示 3" width="1032" height="349" data-path="images/legacy/f96f92a5-7a6e-4fe6-9955-89f71c178a4e/1caff473-b030-4e8f-93df-e33b35beec1f.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/0d9aba0a-e632-49d4-a593-68a03d6bf7d6/c183341c-2720-4843-b52d-f102376f29d2.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=b0270ddb1d1c1a4841206bb207bdac54" alt="application\_obstacle 和 application\_pallet相关图示" width="996" height="402" data-path="images/legacy/0d9aba0a-e632-49d4-a593-68a03d6bf7d6/c183341c-2720-4843-b52d-f102376f29d2.avif" />
</Frame>

#### 5.1.3 arm\_local\_camera

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/7b3c6e54-590e-42cf-baef-da04c26705b7/a212cc86-c478-4253-a60a-2522d985f57a.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=f413aeb05386d161706c6a9e29529735" alt="arm\_local\_camera相关图示" width="999" height="797" data-path="images/legacy/7b3c6e54-590e-42cf-baef-da04c26705b7/a212cc86-c478-4253-a60a-2522d985f57a.avif" />
</Frame>

#### 5.1.4 frame\_callback

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/sF5769lvvJTqdETT/images/legacy/dcfb097e-444d-4f01-a692-9e8891bfba41/dc01ff2f-2dc7-4281-8dec-6180c84f3eb6.avif?fit=max&auto=format&n=sF5769lvvJTqdETT&q=85&s=83699507caf0ac09f31e97c3920496e6" alt="frame\_callback相关图示" width="1020" height="545" data-path="images/legacy/dcfb097e-444d-4f01-a692-9e8891bfba41/dc01ff2f-2dc7-4281-8dec-6180c84f3eb6.avif" />
</Frame>

#### 5.1.5 multi\_cameras

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/0a1977bc-995c-4464-84fc-57336863900c/3a1a3566-bc2f-41a0-b7a7-bbd9ecd73158.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=e5162308d5c0edab015d1fa31af62b18" alt="multi\_cameras相关图示" width="1009" height="757" data-path="images/legacy/0a1977bc-995c-4464-84fc-57336863900c/3a1a3566-bc2f-41a0-b7a7-bbd9ecd73158.avif" />
</Frame>

#### 5.1.6 single\_camera

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/4aa2b8fa-c63b-4f2e-aae6-42174af778cc/7f12e999-296b-4616-b211-048442848c35.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=24f18f29579d50a534694cb1508ae36c" alt="single\_camera相关图示" width="1017" height="840" data-path="images/legacy/4aa2b8fa-c63b-4f2e-aae6-42174af778cc/7f12e999-296b-4616-b211-048442848c35.avif" />
</Frame>

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/sF5769lvvJTqdETT/images/legacy/cf5af400-d17d-477e-854f-b28faaef994e/ac88bcee-068f-484a-be28-08647bf50d40.avif?fit=max&auto=format&n=sF5769lvvJTqdETT&q=85&s=11544f12e133c7ee3f9c886a225f813c" alt="single\_camera相关图示 2" width="1021" height="729" data-path="images/legacy/cf5af400-d17d-477e-854f-b28faaef994e/ac88bcee-068f-484a-be28-08647bf50d40.avif" />
</Frame>

#### 5.1.7 single\_camera2

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/6612e917-ca5d-4ad6-94ac-459bef88bf95/88762255-edb5-40b0-b814-cbf3d3afc12d.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=4c30756fcd25997d745667ad9c554ab0" alt="single\_camera2相关图示" width="1019" height="725" data-path="images/legacy/6612e917-ca5d-4ad6-94ac-459bef88bf95/88762255-edb5-40b0-b814-cbf3d3afc12d.avif" />
</Frame>

### 5.2 java

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/4a627533-f792-4fe1-ac64-cff92e99125d/031f79f9-c0e5-48be-8ad8-774882c69f05.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=66cbbc1d731702a7bea1e945734f9068" alt="java相关图示" width="1259" height="724" data-path="images/legacy/4a627533-f792-4fe1-ac64-cff92e99125d/031f79f9-c0e5-48be-8ad8-774882c69f05.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/1f61f9eb-bb6c-4cb3-8b99-b114595e5f8b/a69ee0c0-7f68-475c-a796-ab326d0b31c2.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=fb165cfb5b52653b67dd316c911d5bdb" alt="java相关图示 2" width="641" height="522" data-path="images/legacy/1f61f9eb-bb6c-4cb3-8b99-b114595e5f8b/a69ee0c0-7f68-475c-a796-ab326d0b31c2.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/50ee2ffa-b3d3-4097-8df6-b1a09b49475f/0272dea8-0fb1-4dc0-8d01-d4eeff648600.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=3a482fb19769b5837957a0377718de30" alt="java相关图示 3" width="527" height="217" data-path="images/legacy/50ee2ffa-b3d3-4097-8df6-b1a09b49475f/0272dea8-0fb1-4dc0-8d01-d4eeff648600.avif" />
</Frame>

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

* log\_path：日志输出的路径

* print\_level：日志打印的等级

* enable\_screen\_print：日志是否在控制台打印

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

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

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/57bdf94d-11de-4023-a76b-4e4695b8264d/305d71b3-1c29-4041-a264-4127ae5d9000.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=42a43dac5a6147c5d0b5a4b22a1ccc62" alt="java相关图示 4" width="342" height="190" data-path="images/legacy/57bdf94d-11de-4023-a76b-4e4695b8264d/305d71b3-1c29-4041-a264-4127ae5d9000.avif" />
</Frame>

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

* param：打开相机的参数

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/5aee4343-16d5-42f5-ad24-2e190e10e42b/7fffa12c-87fd-41c5-95c3-76d08f7ec6a0.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=668ea797334d58da6823be7286e27c03" alt="java相关图示 5" width="506" height="134" data-path="images/legacy/5aee4343-16d5-42f5-ad24-2e190e10e42b/7fffa12c-87fd-41c5-95c3-76d08f7ec6a0.avif" />
</Frame>

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

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/50500d5f-4288-4f8f-93ed-194f3c2cc03f/9b3e44b2-c0a2-4d28-b266-e5edb0f93e38.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=7d38c5194bfd037d2d64f8d9710c05fa" alt="java相关图示 6" width="531" height="182" data-path="images/legacy/50500d5f-4288-4f8f-93ed-194f3c2cc03f/9b3e44b2-c0a2-4d28-b266-e5edb0f93e38.avif" />
</Frame>

* handle：要设置的相机的句柄

* cmd：指令编号

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

* handle：要设置的相机的句柄

* cmd：指令编号

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/kNk2cPO_S_XIpvDn/images/legacy/3ddedf1d-403d-4939-83af-bd6daaf4eda7/f13e456a-5c27-4e75-889b-c18855e7b8f6.avif?fit=max&auto=format&n=kNk2cPO_S_XIpvDn&q=85&s=d9d9594e60245e21389bb07f684949e7" alt="java相关图示 7" width="489" height="175" data-path="images/legacy/3ddedf1d-403d-4939-83af-bd6daaf4eda7/f13e456a-5c27-4e75-889b-c18855e7b8f6.avif" />
</Frame>

* 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 文件夹中有如下文件：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/TF-TfIsh_fVqVeCP/images/legacy/bbacec9a-738e-411b-8bc9-c6da357de38e/0e3138ad-8898-480d-8a55-6e0cecf99c30.avif?fit=max&auto=format&n=TF-TfIsh_fVqVeCP&q=85&s=06eedba39af804c4ad84e7b8bc5fa8dd" alt="所有的 launch 文件相关图示" width="942" height="219" data-path="images/legacy/bbacec9a-738e-411b-8bc9-c6da357de38e/0e3138ad-8898-480d-8a55-6e0cecf99c30.avif" />
</Frame>

* 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、流配置、工作模式配置、点云单位等

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/TF-TfIsh_fVqVeCP/images/legacy/c3b4a958-5e09-48de-82e5-fbb890bdfd9d/3de2b204-1f42-489d-9e8a-94c2e872f898.avif?fit=max&auto=format&n=TF-TfIsh_fVqVeCP&q=85&s=5ba22d4d08637838a86a88cba2a82314" alt="相机 ip、流配置、工作模式配置、点云单位等相关图示" width="1227" height="429" data-path="images/legacy/c3b4a958-5e09-48de-82e5-fbb890bdfd9d/3de2b204-1f42-489d-9e8a-94c2e872f898.avif" />
</Frame>

* 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 相机位姿配置

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/14a3684d-4237-4609-b70b-7d94fef1553c/aa3384e1-4eda-4569-b314-57539347ed31.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=966b4511560856c746f3d931179d82c3" alt="相机位姿配置相关图示" width="1239" height="334" data-path="images/legacy/14a3684d-4237-4609-b70b-7d94fef1553c/aa3384e1-4eda-4569-b314-57539347ed31.avif" />
</Frame>

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

* X：相机距离点云中心的 X 平移量

* Y：相机距离点云中心的 Y 平移量

* Z：相机距离点云中心的 Z 平移量

* Yaw：点云绕 Z 轴旋转的角度

* Roll：点云绕 X 轴旋转的角度

* Pitch：点云绕 Y 轴旋转的角度

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/56fa8515-59aa-435b-83b0-61332e05c8b1/287157eb-0ab5-47c5-a5cd-8f7dd39a4659.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=3cfe5050cf4467a9fee21a1a4176be09" alt="是否使用 launch 配置相关图示" width="1220" height="92" data-path="images/legacy/56fa8515-59aa-435b-83b0-61332e05c8b1/287157eb-0ab5-47c5-a5cd-8f7dd39a4659.avif" />
</Frame>

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

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

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

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/p8TYWsai56GIOIxs/images/legacy/c8909add-b29b-46f4-9046-767b987ed002/da1b1d43-3f85-4753-aae9-e880e365df9f.avif?fit=max&auto=format&n=p8TYWsai56GIOIxs&q=85&s=9e0561c94de238965b6aacd8d909434a" alt="2D 参数配置相关图示" width="1206" height="344" data-path="images/legacy/c8909add-b29b-46f4-9046-767b987ed002/da1b1d43-3f85-4753-aae9-e880e365df9f.avif" />
</Frame>

* 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 参数配置

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/7344b5e5-4aab-48d2-b3e6-778a7cd6f536/858ffe25-af33-4a1d-a834-a3c538097c0c.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=5057ecfb9c70f454bf42056aaefc21ad" alt="3D 参数配置相关图示" width="1189" height="522" data-path="images/legacy/7344b5e5-4aab-48d2-b3e6-778a7cd6f536/858ffe25-af33-4a1d-a834-a3c538097c0c.avif" />
</Frame>

* 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 最大最小深度

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/v6LV3HuYyMJV7gn5/images/legacy/fbbc4656-2050-4cf5-b591-442df08f785c/a9a3ca5e-c11e-4f8a-855c-25cb2b964b22.avif?fit=max&auto=format&n=v6LV3HuYyMJV7gn5&q=85&s=f3ec9e22b86db1e8ba260eb150e3eebf" alt="最大最小深度相关图示" width="1209" height="137" data-path="images/legacy/fbbc4656-2050-4cf5-b591-442df08f785c/a9a3ca5e-c11e-4f8a-855c-25cb2b964b22.avif" />
</Frame>

* lx\_min\_depth：最小深度

* lx\_max\_depth：最大深度

#### 5.3.2 ROS2 launch 文件说明

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

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/kNk2cPO_S_XIpvDn/images/legacy/39cfeba3-9697-4b30-a9da-6c25d4862ec8/9a27552b-9363-4335-909c-57e2f12418cb.avif?fit=max&auto=format&n=kNk2cPO_S_XIpvDn&q=85&s=2d62558455f4a8cf6590c086cb67fd15" alt="所有的 launch 文件相关图示" width="1280" height="308" data-path="images/legacy/39cfeba3-9697-4b30-a9da-6c25d4862ec8/9a27552b-9363-4335-909c-57e2f12418cb.avif" />
</Frame>

* 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、流配置、工作模式配置、点云单位等

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/sF5769lvvJTqdETT/images/legacy/ce77d606-fb78-49d8-9b5c-5ef6bd320c51/b4c285fd-b11b-486d-81e8-f8b79ff8fb7f.avif?fit=max&auto=format&n=sF5769lvvJTqdETT&q=85&s=f1a16b39731adcc5b3a4619360ecbc3f" alt="相机 ip、流配置、工作模式配置、点云单位等相关图示" width="1219" height="374" data-path="images/legacy/ce77d606-fb78-49d8-9b5c-5ef6bd320c51/b4c285fd-b11b-486d-81e8-f8b79ff8fb7f.avif" />
</Frame>

* 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 相机位姿配置

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/7408241d-dd28-42b7-bc1d-e5998c2d692d/4824b62e-8d79-4e07-b72a-88213adfc0dc.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=12db6e8ae51065f964ab427ece5a90cc" alt="相机位姿配置相关图示" width="1170" height="347" data-path="images/legacy/7408241d-dd28-42b7-bc1d-e5998c2d692d/4824b62e-8d79-4e07-b72a-88213adfc0dc.avif" />
</Frame>

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

* X：相机距离点云中心的 X 平移量

* Y：相机距离点云中心的 Y 平移量

* Z：相机距离点云中心的 Z 平移量

* Yaw：点云绕 Z 轴旋转的角度

* Roll：点云绕 X 轴旋转的角度

* Pitch：点云绕 Y 轴旋转的角度

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/kNk2cPO_S_XIpvDn/images/legacy/43fd4f62-1e51-4eff-8c1f-37c909894eec/d384fcd0-4c19-4550-8ed1-b0ba50130276.avif?fit=max&auto=format&n=kNk2cPO_S_XIpvDn&q=85&s=4a97944041afea4cb988997091cc8b22" alt="是否使用 launch 配置相关图示" width="1225" height="131" data-path="images/legacy/43fd4f62-1e51-4eff-8c1f-37c909894eec/d384fcd0-4c19-4550-8ed1-b0ba50130276.avif" />
</Frame>

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

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

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

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/1dd95c53-9c6d-4f68-a31c-3d3bf19325cb/09877c87-80c3-48ee-9597-724df69e46b8.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=ac91431ee71911c985247cece1be71a4" alt="2D 参数配置相关图示" width="1279" height="374" data-path="images/legacy/1dd95c53-9c6d-4f68-a31c-3d3bf19325cb/09877c87-80c3-48ee-9597-724df69e46b8.avif" />
</Frame>

* 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 参数配置

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/sF5769lvvJTqdETT/images/legacy/ea1c2ec1-ca58-43e2-9f17-6dd55aa062f7/2550eeb4-acc3-4ce6-8b38-7c79198c632e.avif?fit=max&auto=format&n=sF5769lvvJTqdETT&q=85&s=5138bddc99695b5c4cf697e5d6ae0594" alt="3D 参数配置相关图示" width="1216" height="446" data-path="images/legacy/ea1c2ec1-ca58-43e2-9f17-6dd55aa062f7/2550eeb4-acc3-4ce6-8b38-7c79198c632e.avif" />
</Frame>

* 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 最大最小深度

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/533ba914-7077-416a-8ff7-ec4497dbf8ca/ef9df399-1e28-41a9-a833-757da2810424.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=0ce7a98045d8f8b5b7f369d7608a2358" alt="最大最小深度相关图示" width="886" height="155" data-path="images/legacy/533ba914-7077-416a-8ff7-ec4497dbf8ca/ef9df399-1e28-41a9-a833-757da2810424.avif" />
</Frame>

* lx\_min\_depth：最小深度

* lx\_max\_depth：最大深度

#### 5.3.3 特有主题说明

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/sF5769lvvJTqdETT/images/legacy/e19a12ad-8542-4cc2-9b43-58c96adad478/a1bde694-ddac-46db-91bc-d2f3f5dcf6bc.avif?fit=max&auto=format&n=sF5769lvvJTqdETT&q=85&s=3b2021ffb4b82122bbc42aacf8d9e489" alt="特有主题说明相关图示" width="1189" height="409" data-path="images/legacy/e19a12ad-8542-4cc2-9b43-58c96adad478/a1bde694-ddac-46db-91bc-d2f3f5dcf6bc.avif" />
</Frame>

##### 5.3.3.1 FrameRate.msg

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/87f292b9-4a30-4305-99b1-9129d3251d0c/c0aa96ff-b772-4a62-9c24-721490ae37f8.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=c07d1a8d46bb8164a3adfe773567435e" alt="FrameRate.msg相关图示" width="532" height="244" data-path="images/legacy/87f292b9-4a30-4305-99b1-9129d3251d0c/c0aa96ff-b772-4a62-9c24-721490ae37f8.avif" />
</Frame>

* header：当前数据的帧信息以及时间戳

* depth：当深度图开启时，输出深度图帧率

* amp：当强度图开启时，输出强度图帧率

* rgb：当 rgb 开启时，输出 rgb 帧率

* temperature：输出相机温度

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/69299d83-1e9a-411e-815e-0c66637fddab/fdca1748-6538-4f4b-9c9f-4110daa63264.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=b8ad2448907bbcd199fd93ab669c72d0" alt="FrameRate.msg相关图示 2" width="1009" height="486" data-path="images/legacy/69299d83-1e9a-411e-815e-0c66637fddab/fdca1748-6538-4f4b-9c9f-4110daa63264.avif" />
</Frame>

##### 5.3.3.2 Obstacle.msg

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/sF5769lvvJTqdETT/images/legacy/e515393a-fea8-46a8-835a-31d7a017e366/dfd6c9df-e2ed-455a-bf29-fe40fcbba1ee.avif?fit=max&auto=format&n=sF5769lvvJTqdETT&q=85&s=12f8767e3687a87720ab0e6c95159bb1" alt="Obstacle.msg相关图示" width="530" height="222" data-path="images/legacy/e515393a-fea8-46a8-835a-31d7a017e366/dfd6c9df-e2ed-455a-bf29-fe40fcbba1ee.avif" />
</Frame>

* header：当前数据的帧信息以及时间戳

* status：避障返回的状态信息

0：正常避障

-1：未设置地面

-2：未设置输入

-3：范围内无点云

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

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

-6：未得到分割结果

-99：未定义的错误

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

0：正常

1：警告

2：停障

* box\_number：障碍物数量

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

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/49474ef4-a3b4-46c1-853a-3ca625791f46/87fbd1ad-7855-4bfb-95cf-3f9082a746f6.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=de9566900a7150266e8470b98a2bba29" alt="Obstacle.msg相关图示 2" width="1154" height="779" data-path="images/legacy/49474ef4-a3b4-46c1-853a-3ca625791f46/87fbd1ad-7855-4bfb-95cf-3f9082a746f6.avif" />
</Frame>

##### 5.3.3.3 Obstacle\_box.msg

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/732d6549-38d7-414f-8bc6-5e2882db6058/eeabb8c0-02ee-4976-90da-44803108622e.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=81e0628c7068f812dde549078928bea9" alt="Obstacle\_box.msg相关图示" width="559" height="260" data-path="images/legacy/732d6549-38d7-414f-8bc6-5e2882db6058/eeabb8c0-02ee-4976-90da-44803108622e.avif" />
</Frame>

* center：障碍物在点云中的质心

* rotation：障碍物点云的旋转矩阵

* translation：障碍物点云的平移向量

* width：障碍物框的宽

* height：障碍物框的高

* depth：障碍物框的深度

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/001c456c-b01d-469d-8837-736f766e6bfc/aaf0d95b-c33e-4b03-b0ff-66da17c59b07.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=e5efdbf097f166413c5938698b5f2ba9" alt="Obstacle\_box.msg相关图示 2" width="1280" height="153" data-path="images/legacy/001c456c-b01d-469d-8837-736f766e6bfc/aaf0d95b-c33e-4b03-b0ff-66da17c59b07.avif" />
</Frame>

##### 5.3.3.4 Result.msg

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/0114b485-85df-4c03-a251-13a97146f545/eeefb26d-8b9d-477d-9287-6b8e77f3c01d.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=bc2e58d25418702c52c0276f247a9c89" alt="Result.msg相关图示" width="362" height="110" data-path="images/legacy/0114b485-85df-4c03-a251-13a97146f545/eeefb26d-8b9d-477d-9287-6b8e77f3c01d.avif" />
</Frame>

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

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

##### 5.3.3.5 Pallet.msg

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/0c48fce6-71f8-4339-ba3d-ca419821fb92/5292c83c-4cff-4204-bc15-ce7b69916c2f.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=a284c12be2934f6b6708f36da7deaa7a" alt="Pallet.msg相关图示" width="407" height="246" data-path="images/legacy/0c48fce6-71f8-4339-ba3d-ca419821fb92/5292c83c-4cff-4204-bc15-ce7b69916c2f.avif" />
</Frame>

* header：当前数据的帧信息以及时间戳

* status：托盘识别返回的状态信息：

0：检测成功

-1：未检测到地面

-2：未检测到托盘腿

-3：托盘距离过远

-4：未知错误

* x：托盘距离相机光心的 X 距离

* y：托盘距离相机光心的 Y 距离

* yaw：托盘中心相对于相机光心的 theta 夹角

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/89bbf348-5adf-4865-abd3-92bdf33f2e56/9aca1203-534c-41a2-95f0-82aa56ccd148.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=2a0665ca90f8a4213b91e4ac0768f942" alt="Pallet.msg相关图示 2" width="972" height="712" data-path="images/legacy/89bbf348-5adf-4865-abd3-92bdf33f2e56/9aca1203-534c-41a2-95f0-82aa56ccd148.avif" />
</Frame>

#### 5.3.4 特有服务说明

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/v6LV3HuYyMJV7gn5/images/legacy/f1c49f4e-3874-4d14-8fa6-db4ebb2e945e/df9cd97d-5264-4c49-a9dc-cd24541cf811.avif?fit=max&auto=format&n=v6LV3HuYyMJV7gn5&q=85&s=874fc7b06d48b7ef9c76c43bd90c5583" alt="特有服务说明相关图示" width="870" height="310" data-path="images/legacy/f1c49f4e-3874-4d14-8fa6-db4ebb2e945e/df9cd97d-5264-4c49-a9dc-cd24541cf811.avif" />
</Frame>

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

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

##### 5.3.4.1 LxBool.srv

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/sF5769lvvJTqdETT/images/legacy/dbe0c517-33f2-4d2a-b4d0-b4bfe383a132/6498e0b6-346a-413a-bcfa-7480e7c69fbb.avif?fit=max&auto=format&n=sF5769lvvJTqdETT&q=85&s=eb5f3034b70337980c3a8d80494ab661" alt="LxBool.srv相关图示" width="719" height="202" data-path="images/legacy/dbe0c517-33f2-4d2a-b4d0-b4bfe383a132/6498e0b6-346a-413a-bcfa-7480e7c69fbb.avif" />
</Frame>

* cmd：需要获取或者设置的参数编号

* val：设置时设置的值

* is\_set：是否设置参数，为 true 时会将 val 中的值设置到相机中，为 false 时会从相机中把这个参数的值读取并显示出来

* val：获取或者设置时返回的相机当先参数的值

* result：调用 SDK 接口返回的值和信息

##### 5.3.4.2 LxCmd.srv

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/sF5769lvvJTqdETT/images/legacy/d9fb3489-1feb-476f-846e-a0e5a5f88e68/4c263047-9b20-4ed7-be1a-74046a141294.avif?fit=max&auto=format&n=sF5769lvvJTqdETT&q=85&s=eeefb78b6c3378be022e74b0bf7158ef" alt="LxCmd.srv相关图示" width="281" height="105" data-path="images/legacy/d9fb3489-1feb-476f-846e-a0e5a5f88e68/4c263047-9b20-4ed7-be1a-74046a141294.avif" />
</Frame>

* cmd：需要获取或者设置的参数编号，当为 0 时会返回所有的参数编号

* result：调用 SDK 接口返回的值和信息，cmd 可能会有多个返回值

##### 5.3.4.3 LxFloat.srv

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/v6LV3HuYyMJV7gn5/images/legacy/faf8eb2e-9fb9-4a2a-a2bd-c35749ed8fe5/b757fe7d-a811-4a98-aaa4-4873384918cd.avif?fit=max&auto=format&n=v6LV3HuYyMJV7gn5&q=85&s=39cf662454af061c7ddef2cce0e52639" alt="LxFloat.srv相关图示" width="284" height="286" data-path="images/legacy/faf8eb2e-9fb9-4a2a-a2bd-c35749ed8fe5/b757fe7d-a811-4a98-aaa4-4873384918cd.avif" />
</Frame>

* cmd：需要获取或者设置的参数编号

* val：设置时设置的值

* is\_set：是否设置参数，为 true 时会将 val 中的值设置到相机中，为 false 时会从相机中把这个参数的值读取并显示出来

* max\_value：该参数可设置的最大值

* min\_value：该参数可设置的最小值

* cur\_value：该参数在相机中的当前值

* available：该参数是否支持设置

* result：调用 SDK 接口返回的值和信息

##### 5.3.4.4 LxInt.srv

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/kNk2cPO_S_XIpvDn/images/legacy/3c2e3f11-c23e-4907-901c-745f198c8cd9/55d5d286-53c4-4ddf-b970-0848e075576d.avif?fit=max&auto=format&n=kNk2cPO_S_XIpvDn&q=85&s=3ff9bf719f59aedf764584ae14e0f90f" alt="LxInt.srv相关图示" width="354" height="291" data-path="images/legacy/3c2e3f11-c23e-4907-901c-745f198c8cd9/55d5d286-53c4-4ddf-b970-0848e075576d.avif" />
</Frame>

* cmd：需要获取或者设置的参数编号

* val：设置时设置的值

* is\_set：是否设置参数，为 true 时会将 val 中的值设置到相机中，为 false 时会从相机中把这个参数的值读取并显示出来

* max\_value：该参数可设置的最大值

* min\_value：该参数可设置的最小值

* cur\_value：该参数在相机中的当前值

* available：该参数是否支持设置

* result：调用 SDK 接口返回的值和信息

##### 5.3.4.5 LxString.srv

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/sF5769lvvJTqdETT/images/legacy/d660a391-2035-4c86-9b5a-83a58ba31312/565af9c2-f4b6-4474-a0db-a23e48405198.avif?fit=max&auto=format&n=sF5769lvvJTqdETT&q=85&s=e4bc10c9cdcc4d5d8e8378d4aa65e008" alt="LxString.srv相关图示" width="324" height="201" data-path="images/legacy/d660a391-2035-4c86-9b5a-83a58ba31312/565af9c2-f4b6-4474-a0db-a23e48405198.avif" />
</Frame>

* cmd：需要获取或者设置的参数编号

* val：设置时设置的值

* is\_set：是否设置参数，为 true 时会将 val 中的值设置到相机中，为 false 时会从相机中把这个参数的值读取并显示出来

* val：获取或者设置时返回的相机当先参数的值

* result：调用 SDK 接口返回的值和信息

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

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

**订阅帧率**

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/889beb65-12b6-44ac-babb-2111ebce6b52/a6c3aa39-f7a8-4a6a-a0d3-cfcdedc76a3a.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=c5748277284411e764d3d0a9593d4ff0" alt="订阅帧率，托盘算法、避障算法输出数据相关图示" width="959" height="35" data-path="images/legacy/889beb65-12b6-44ac-babb-2111ebce6b52/a6c3aa39-f7a8-4a6a-a0d3-cfcdedc76a3a.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/73515490-0edb-4935-a770-88856bea0121/f492df57-13c2-4658-981b-6fb2fbb9ad43.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=b02e65b7a6cbd091e48db36284cd61dd" alt="订阅帧率，托盘算法、避障算法输出数据相关图示 2" width="560" height="344" data-path="images/legacy/73515490-0edb-4935-a770-88856bea0121/f492df57-13c2-4658-981b-6fb2fbb9ad43.avif" />
</Frame>

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

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/kNk2cPO_S_XIpvDn/images/legacy/32b5bedf-7302-49ba-aa81-9d6cd2c62d2e/ae461ce5-17a2-4007-8b46-308a972fd245.avif?fit=max&auto=format&n=kNk2cPO_S_XIpvDn&q=85&s=41dee38c376d725400f11d99cc515afd" alt="订阅帧率，托盘算法、避障算法输出数据相关图示 3" width="971" height="31" data-path="images/legacy/32b5bedf-7302-49ba-aa81-9d6cd2c62d2e/ae461ce5-17a2-4007-8b46-308a972fd245.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/a7893ae8-bd38-46e2-9d77-6c64cfc48009/d1217eeb-52b8-46fe-964e-5bc51da4b304.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=afeeb27e375b0d923f73fa7de250e38d" alt="订阅帧率，托盘算法、避障算法输出数据相关图示 4" width="965" height="712" data-path="images/legacy/a7893ae8-bd38-46e2-9d77-6c64cfc48009/d1217eeb-52b8-46fe-964e-5bc51da4b304.avif" />
</Frame>

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

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/sF5769lvvJTqdETT/images/legacy/ea99334d-1368-439f-8128-1b5fa7a6d87f/2a7209bc-11fc-4048-9fd3-5c8b41c67444.avif?fit=max&auto=format&n=sF5769lvvJTqdETT&q=85&s=f34e8b35d16e8d997b30aacbb4c59084" alt="订阅帧率，托盘算法、避障算法输出数据相关图示 5" width="945" height="27" data-path="images/legacy/ea99334d-1368-439f-8128-1b5fa7a6d87f/2a7209bc-11fc-4048-9fd3-5c8b41c67444.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/kNk2cPO_S_XIpvDn/images/legacy/3330955d-ef4c-4c1b-b68e-b75b26dee53f/9efe49b2-75d1-42c0-b5c7-e501d99c65cd.avif?fit=max&auto=format&n=kNk2cPO_S_XIpvDn&q=85&s=d42e199f8aa619e80ecab3ce70a0b77e" alt="订阅帧率，托盘算法、避障算法输出数据相关图示 6" width="566" height="657" data-path="images/legacy/3330955d-ef4c-4c1b-b68e-b75b26dee53f/9efe49b2-75d1-42c0-b5c7-e501d99c65cd.avif" />
</Frame>

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

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

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

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/TF-TfIsh_fVqVeCP/images/legacy/af141870-a000-48f6-b668-d9e36f6f9b52/dd1a0bb5-d8c3-4d34-904a-c7f828cf43da.avif?fit=max&auto=format&n=TF-TfIsh_fVqVeCP&q=85&s=02d9f4aa5fdf9beb250deeb4de3aa8e5" alt="订阅图像数据（ROS1）相关图示" width="1280" height="697" data-path="images/legacy/af141870-a000-48f6-b668-d9e36f6f9b52/dd1a0bb5-d8c3-4d34-904a-c7f828cf43da.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/TF-TfIsh_fVqVeCP/images/legacy/ae848874-51cb-4e2e-b371-fa02f3bc8ac2/9ab51d8d-8fec-418c-bf87-2f1e0ef94f5f.avif?fit=max&auto=format&n=TF-TfIsh_fVqVeCP&q=85&s=10a34c6f6f59b4bb77c41b22c8ee3109" alt="订阅图像数据（ROS1）相关图示 2" width="687" height="691" data-path="images/legacy/ae848874-51cb-4e2e-b371-fa02f3bc8ac2/9ab51d8d-8fec-418c-bf87-2f1e0ef94f5f.avif" />
</Frame>

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

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/238df48e-8a1f-44bc-9ee0-9816f068f550/bdfc18e2-fd9f-413f-8a68-0b8ce120752a.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=332bbec87fead3d8e5fdc6ee3e8f4f81" alt="订阅图像数据（ROS1）相关图示 3" width="1280" height="887" data-path="images/legacy/238df48e-8a1f-44bc-9ee0-9816f068f550/bdfc18e2-fd9f-413f-8a68-0b8ce120752a.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/kNk2cPO_S_XIpvDn/images/legacy/438605fe-3480-435d-acbd-e828d2565a11/85bf82cb-efc5-413b-8a2d-4ddcbd2162d4.avif?fit=max&auto=format&n=kNk2cPO_S_XIpvDn&q=85&s=cdd081f1f5033c73a43991e94b1083ee" alt="订阅图像数据（ROS1）相关图示 4" width="566" height="882" data-path="images/legacy/438605fe-3480-435d-acbd-e828d2565a11/85bf82cb-efc5-413b-8a2d-4ddcbd2162d4.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/TF-TfIsh_fVqVeCP/images/legacy/abe265f8-1e54-4166-876b-50c3eb03494d/df41a7c4-d0de-4160-9a01-81650af1d0c0.avif?fit=max&auto=format&n=TF-TfIsh_fVqVeCP&q=85&s=451b7bef97dbc0bef1b9c263c10cd0d7" alt="订阅图像数据（ROS1）相关图示 5" width="1280" height="880" data-path="images/legacy/abe265f8-1e54-4166-876b-50c3eb03494d/df41a7c4-d0de-4160-9a01-81650af1d0c0.avif" />
</Frame>

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

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

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/057d5b85-4d0d-4aec-8be9-e852bd52acf0/5c60df34-bfbf-403f-a79f-d753569dbbad.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=619f6e862b0e1138d3025aa1a8f1c02f" alt="订阅图像数据（ROS2）相关图示" width="1280" height="785" data-path="images/legacy/057d5b85-4d0d-4aec-8be9-e852bd52acf0/5c60df34-bfbf-403f-a79f-d753569dbbad.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/8dd57192-0204-49bd-84ff-c771e42df732/27352ea7-fda8-41dd-a0ab-aeffb4251a6e.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=eabd897d219af26e9195538f5556b900" alt="订阅图像数据（ROS2）相关图示 2" width="1280" height="789" data-path="images/legacy/8dd57192-0204-49bd-84ff-c771e42df732/27352ea7-fda8-41dd-a0ab-aeffb4251a6e.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/99011d5f-e042-4f9c-b213-794c86c9c8f1/e8f45ab4-7cac-403b-8e49-91efaabc9be6.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=966a3df2f33af3bd7bc9a927cced71aa" alt="订阅图像数据（ROS2）相关图示 3" width="467" height="309" data-path="images/legacy/99011d5f-e042-4f9c-b213-794c86c9c8f1/e8f45ab4-7cac-403b-8e49-91efaabc9be6.avif" />
</Frame>

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

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/p8TYWsai56GIOIxs/images/legacy/cbae4c6c-9490-4e9e-98db-ed65e6567bec/c8f44a46-6c9e-4200-b85d-74a533c1153b.avif?fit=max&auto=format&n=p8TYWsai56GIOIxs&q=85&s=c1ecc259b53d267d037fbebb7a166f4d" alt="订阅图像数据（ROS2）相关图示 4" width="1031" height="711" data-path="images/legacy/cbae4c6c-9490-4e9e-98db-ed65e6567bec/c8f44a46-6c9e-4200-b85d-74a533c1153b.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/88e7b3df-17c0-4128-a089-cb12a3360be9/d19bdc43-8e9e-4d0c-ae7f-fed540802ea1.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=bf2e643ade3e1c8cff2bef3221dd6ad3" alt="订阅图像数据（ROS2）相关图示 5" width="531" height="831" data-path="images/legacy/88e7b3df-17c0-4128-a089-cb12a3360be9/d19bdc43-8e9e-4d0c-ae7f-fed540802ea1.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/620c5b94-ecb4-4c5a-bb1f-34821bc3baf1/701ff51b-b871-4559-bd3b-84bae49b2ffe.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=603a78b4b769a35575ddcffecb6da6e4" alt="订阅图像数据（ROS2）相关图示 6" width="1251" height="856" data-path="images/legacy/620c5b94-ecb4-4c5a-bb1f-34821bc3baf1/701ff51b-b871-4559-bd3b-84bae49b2ffe.avif" />
</Frame>

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

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

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

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

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/p8TYWsai56GIOIxs/images/legacy/cb5ff2be-b87c-4281-ad34-bdae86a383fd/7bd8c23b-2a65-475f-8dbd-65ec6ecc1c1c.avif?fit=max&auto=format&n=p8TYWsai56GIOIxs&q=85&s=f884a5666e14599b2d2bbd05c1d10769" alt="订阅点云数据相关图示" width="906" height="647" data-path="images/legacy/cb5ff2be-b87c-4281-ad34-bdae86a383fd/7bd8c23b-2a65-475f-8dbd-65ec6ecc1c1c.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/21150a54-23ca-4b59-adc3-9f553539beed/22265287-d908-4b27-ab7a-cfb4585be332.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=ab9a3e56d4de7fd4a93442bbd6e3c07a" alt="订阅点云数据相关图示 2" width="609" height="799" data-path="images/legacy/21150a54-23ca-4b59-adc3-9f553539beed/22265287-d908-4b27-ab7a-cfb4585be332.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/kNk2cPO_S_XIpvDn/images/legacy/3006e5a5-4fe7-4259-9e2a-95e1bb363845/1044f605-6247-44c3-8d8e-c3c121f4cb47.avif?fit=max&auto=format&n=kNk2cPO_S_XIpvDn&q=85&s=3ffa39efe3d9ea9c4c522531c3c5fb5a" alt="订阅点云数据相关图示 3" width="1252" height="927" data-path="images/legacy/3006e5a5-4fe7-4259-9e2a-95e1bb363845/1044f605-6247-44c3-8d8e-c3c121f4cb47.avif" />
</Frame>

（ROS1 界面）

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/910637d7-5dbc-4c94-81a4-50e644121e4a/1b4d9da2-af03-4f73-9fa3-1cb57b61f783.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=2b5861871ef15c02c96de25a4a1a2d48" alt="订阅点云数据相关图示 4" width="1217" height="885" data-path="images/legacy/910637d7-5dbc-4c94-81a4-50e644121e4a/1b4d9da2-af03-4f73-9fa3-1cb57b61f783.avif" />
</Frame>

（ROS2 界面）

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/kNk2cPO_S_XIpvDn/images/legacy/2aa2b75e-e517-44ab-b4cb-e2667133cfc6/4d96f1fd-3ba9-475a-b140-dae7dc00a2b9.avif?fit=max&auto=format&n=kNk2cPO_S_XIpvDn&q=85&s=4261e5d899a4a6e8412135043856c90d" alt="订阅点云数据相关图示 5" width="1211" height="882" data-path="images/legacy/2aa2b75e-e517-44ab-b4cb-e2667133cfc6/4d96f1fd-3ba9-475a-b140-dae7dc00a2b9.avif" />
</Frame>

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"

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/sF5769lvvJTqdETT/images/legacy/d164d829-293d-4390-abab-22d35d509cbb/db9d34a3-5184-4d47-a33d-f37e0244d9b4.avif?fit=max&auto=format&n=sF5769lvvJTqdETT&q=85&s=edd5f360e991184c578330429f87c8f0" alt="获取所有参数编号列表（Lx\_Cmd）相关图示" width="1240" height="47" data-path="images/legacy/d164d829-293d-4390-abab-22d35d509cbb/db9d34a3-5184-4d47-a33d-f37e0244d9b4.avif" />
</Frame>

可以看到输出：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/5ecde466-61e9-4b4a-bf1b-8ec51c0c0169/fa7f556f-1716-4f56-b40d-e42fb5fbbbd2.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=cc75f94e61eeb4504a097e9e71d55422" alt="获取所有参数编号列表（Lx\_Cmd）相关图示 2" width="597" height="731" data-path="images/legacy/5ecde466-61e9-4b4a-bf1b-8ec51c0c0169/fa7f556f-1716-4f56-b40d-e42fb5fbbbd2.avif" />
</Frame>

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

**ros2**

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/8a802613-c024-4020-bc72-29b3174557ed/d78e9647-5fbc-4dfe-9778-2a0ce30882e0.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=382cb6ebaac8aee8befd8aab7865df48" alt="获取所有参数编号列表（Lx\_Cmd）相关图示 3" width="941" height="27" data-path="images/legacy/8a802613-c024-4020-bc72-29b3174557ed/d78e9647-5fbc-4dfe-9778-2a0ce30882e0.avif" />
</Frame>

可以看到如下输出：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/kNk2cPO_S_XIpvDn/images/legacy/41eea7fc-e3d7-4346-846c-72152dc4a25a/c86dccb8-a04e-48ce-9c90-29fa38d990c1.avif?fit=max&auto=format&n=kNk2cPO_S_XIpvDn&q=85&s=5bc1a59980b916f6d56d4759c4e34399" alt="获取所有参数编号列表（Lx\_Cmd）相关图示 4" width="1280" height="333" data-path="images/legacy/41eea7fc-e3d7-4346-846c-72152dc4a25a/c86dccb8-a04e-48ce-9c90-29fa38d990c1.avif" />
</Frame>

因在 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"

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/aa54e83e-f079-4b4e-b616-bb2bb5632557/1bfd71b1-a406-4e20-9fae-0db32a5b93aa.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=49ef3760b9c7186e8c8b41964189c0a2" alt="获取 Int 参数（Lx\_Int）相关图示" width="829" height="50" data-path="images/legacy/aa54e83e-f079-4b4e-b616-bb2bb5632557/1bfd71b1-a406-4e20-9fae-0db32a5b93aa.avif" />
</Frame>

可以看到输出：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/TF-TfIsh_fVqVeCP/images/legacy/bab5ad18-94b3-46c3-8b91-9c88fdaa94e5/0a3c9501-06db-4d47-81be-35331ebcdef4.avif?fit=max&auto=format&n=TF-TfIsh_fVqVeCP&q=85&s=68789d5fa6716287d3e873eda83d250a" alt="获取 Int 参数（Lx\_Int）相关图示 2" width="826" height="155" data-path="images/legacy/bab5ad18-94b3-46c3-8b91-9c88fdaa94e5/0a3c9501-06db-4d47-81be-35331ebcdef4.avif" />
</Frame>

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

<br />

**ROS2**

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/6d2117ae-d6c3-4afc-b646-6dbfbb6c2f3e/bb13c4c1-0f41-459f-ae52-dbb46cb0e54a.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=dc6e3343afe897142dd230414c2bb221" alt="获取 Int 参数（Lx\_Int）相关图示 3" width="822" height="20" data-path="images/legacy/6d2117ae-d6c3-4afc-b646-6dbfbb6c2f3e/bb13c4c1-0f41-459f-ae52-dbb46cb0e54a.avif" />
</Frame>

可以看到输出：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/541a0283-4507-409c-b3e1-20519ab2b5ca/55f6cd89-2619-463f-bc80-10dcb7699c26.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=a754b2a458697a25dc5bfa0daf7549d6" alt="获取 Int 参数（Lx\_Int）相关图示 4" width="1197" height="91" data-path="images/legacy/541a0283-4507-409c-b3e1-20519ab2b5ca/55f6cd89-2619-463f-bc80-10dcb7699c26.avif" />
</Frame>

图中获取的是高积分时间，根据返回结果可以看到，最大值是 **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"

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/740f493c-b629-4f56-a1b2-657160e65dd1/223a551a-7aa9-44fd-a0f7-55aadbb2e7e8.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=c3c6ad4603f72de751fa82e4ca2afff7" alt="设置 Int 参数（Lx\_Int）相关图示" width="1117" height="66" data-path="images/legacy/740f493c-b629-4f56-a1b2-657160e65dd1/223a551a-7aa9-44fd-a0f7-55aadbb2e7e8.avif" />
</Frame>

可以看到输出：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/0af02830-0186-4647-bfab-d262c1928aa9/0771f3d5-9e06-4f9f-8655-3e4fbcc44fa4.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=b6e924ea254192bb6dd67783c93e9bbc" alt="设置 Int 参数（Lx\_Int）相关图示 2" width="1134" height="217" data-path="images/legacy/0af02830-0186-4647-bfab-d262c1928aa9/0771f3d5-9e06-4f9f-8655-3e4fbcc44fa4.avif" />
</Frame>

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

<br />

**ROS2**

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/TF-TfIsh_fVqVeCP/images/legacy/bda87587-abf9-41f1-baf0-1601252e740b/5d8c4cee-1e25-44fc-9b20-1418754d3846.avif?fit=max&auto=format&n=TF-TfIsh_fVqVeCP&q=85&s=9a34b3c974b7761851cb4d0b7dfd3e07" alt="设置 Int 参数（Lx\_Int）相关图示 3" width="1130" height="31" data-path="images/legacy/bda87587-abf9-41f1-baf0-1601252e740b/5d8c4cee-1e25-44fc-9b20-1418754d3846.avif" />
</Frame>

可以看到输出：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/v6LV3HuYyMJV7gn5/images/legacy/fc6e22e4-33fb-4021-8cbe-d3d37858b463/54820a62-ae52-4c94-bf2b-8b43b6fc8b1f.avif?fit=max&auto=format&n=v6LV3HuYyMJV7gn5&q=85&s=1e24772ea2d9d54ee62e8f982f6cf862" alt="设置 Int 参数（Lx\_Int）相关图示 4" width="1280" height="107" data-path="images/legacy/fc6e22e4-33fb-4021-8cbe-d3d37858b463/54820a62-ae52-4c94-bf2b-8b43b6fc8b1f.avif" />
</Frame>

图中获取的是高积分时间，根据返回结果可以看到，最大值是 **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"

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/961244d1-9a2d-4423-a796-e34fc46bb459/c0296495-26d5-42f2-aea9-7dae69e58fd4.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=19931d859248450f5175b6d4afbd0bdd" alt="获取 Float 参数（Lx\_Float）相关图示" width="982" height="55" data-path="images/legacy/961244d1-9a2d-4423-a796-e34fc46bb459/c0296495-26d5-42f2-aea9-7dae69e58fd4.avif" />
</Frame>

可以看到输出：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/v6LV3HuYyMJV7gn5/images/legacy/efedad09-aa95-4186-bac1-82dbcc0247c9/c07ce897-0b4c-46a0-a9b6-23c4f5551d28.avif?fit=max&auto=format&n=v6LV3HuYyMJV7gn5&q=85&s=0c5a97ef8a3ee09de2c7ab63ad3c5b62" alt="获取 Float 参数（Lx\_Float）相关图示 2" width="1237" height="226" data-path="images/legacy/efedad09-aa95-4186-bac1-82dbcc0247c9/c07ce897-0b4c-46a0-a9b6-23c4f5551d28.avif" />
</Frame>

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

**ROS2**

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/v6LV3HuYyMJV7gn5/images/legacy/fec32229-96f1-49df-8ad4-c32b2e2d4319/68f93c4b-2258-43b6-bbec-67bcead69e04.avif?fit=max&auto=format&n=v6LV3HuYyMJV7gn5&q=85&s=1d76593b1041c7680e8aa9f1ca901233" alt="获取 Float 参数（Lx\_Float）相关图示 3" width="1245" height="26" data-path="images/legacy/fec32229-96f1-49df-8ad4-c32b2e2d4319/68f93c4b-2258-43b6-bbec-67bcead69e04.avif" />
</Frame>

可以看到输出：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/sF5769lvvJTqdETT/images/legacy/dce3f459-b08e-4593-acdf-677d6fbf6944/6a4c92d8-cf4f-4e3f-91dc-205b77d50614.avif?fit=max&auto=format&n=sF5769lvvJTqdETT&q=85&s=07fa02264003690068d1765f4ca10ab2" alt="获取 Float 参数（Lx\_Float）相关图示 4" width="1280" height="109" data-path="images/legacy/dce3f459-b08e-4593-acdf-677d6fbf6944/6a4c92d8-cf4f-4e3f-91dc-205b77d50614.avif" />
</Frame>

图中获取的是相机温度，根据返回结果可以看到，最大值是 **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"

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/v6LV3HuYyMJV7gn5/images/legacy/fc65906a-26b1-4926-8683-0c63c4bda205/0b2816b4-3824-471e-849a-19418b4e1347.avif?fit=max&auto=format&n=v6LV3HuYyMJV7gn5&q=85&s=13e12db0331e097b8603ed0408a9e3db" alt="设置 Float 参数（Lx\_Float）相关图示" width="1280" height="71" data-path="images/legacy/fc65906a-26b1-4926-8683-0c63c4bda205/0b2816b4-3824-471e-849a-19418b4e1347.avif" />
</Frame>

可以看到输出：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/64b4ccc2-3a32-4290-bfe8-5f1a16b39e7b/22a193ef-c078-4d18-8089-25c043c945a1.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=809658f207ee3ffe9fc643045826545f" alt="设置 Float 参数（Lx\_Float）相关图示 2" width="1280" height="263" data-path="images/legacy/64b4ccc2-3a32-4290-bfe8-5f1a16b39e7b/22a193ef-c078-4d18-8089-25c043c945a1.avif" />
</Frame>

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

**ROS2**

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/v6LV3HuYyMJV7gn5/images/legacy/ffb19412-efb4-4d85-b0f3-109070dfaf11/95302d5c-71ea-4209-a439-67bc9141f867.avif?fit=max&auto=format&n=v6LV3HuYyMJV7gn5&q=85&s=cf93355b400d900cb2be49994b04d82b" alt="设置 Float 参数（Lx\_Float）相关图示 3" width="1280" height="29" data-path="images/legacy/ffb19412-efb4-4d85-b0f3-109070dfaf11/95302d5c-71ea-4209-a439-67bc9141f867.avif" />
</Frame>

可以看到输出：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/5adb01fe-521c-40e2-824d-6c3877ff1fa1/f53329f3-47d0-4597-85d5-527c2877a216.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=b5cdfa33c329990826b70bbdb03f19be" alt="设置 Float 参数（Lx\_Float）相关图示 4" width="1280" height="111" data-path="images/legacy/5adb01fe-521c-40e2-824d-6c3877ff1fa1/f53329f3-47d0-4597-85d5-527c2877a216.avif" />
</Frame>

图中设置的是相机温度，根据返回结果可以看到，最大值是 **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"

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/93e8afe5-8d20-4406-8b41-e31907fd216a/73dbf8cb-7bc5-4a65-9e0b-02b8b9976648.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=6987170a8737d0cb5924c67a7ac30201" alt="获取 Bool 参数（Lx\_Bool）相关图示" width="1280" height="66" data-path="images/legacy/93e8afe5-8d20-4406-8b41-e31907fd216a/73dbf8cb-7bc5-4a65-9e0b-02b8b9976648.avif" />
</Frame>

可以看到输出：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/p8TYWsai56GIOIxs/images/legacy/cc19e476-6351-4685-a4ed-ba55273ae753/31834fd4-610d-4c49-a59c-6ec8f5019e1c.avif?fit=max&auto=format&n=p8TYWsai56GIOIxs&q=85&s=3ab5dc9a33b1ca935903755e37ff52ab" alt="获取 Bool 参数（Lx\_Bool）相关图示 2" width="1280" height="160" data-path="images/legacy/cc19e476-6351-4685-a4ed-ba55273ae753/31834fd4-610d-4c49-a59c-6ec8f5019e1c.avif" />
</Frame>

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

<br />

**ROS2**

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/v6LV3HuYyMJV7gn5/images/legacy/f476d582-5c88-4af1-9ef9-296993a31ae3/e29edc53-15a7-47a8-bb80-eb620f8431fd.avif?fit=max&auto=format&n=v6LV3HuYyMJV7gn5&q=85&s=81c4107f7085adeb2ffcf33b77186945" alt="获取 Bool 参数（Lx\_Bool）相关图示 3" width="1280" height="32" data-path="images/legacy/f476d582-5c88-4af1-9ef9-296993a31ae3/e29edc53-15a7-47a8-bb80-eb620f8431fd.avif" />
</Frame>

可以看到输出：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/6d73a81b-e785-4f8f-a732-fa4287df78a8/a7a8dae4-f76d-4f02-a9bb-04803115741d.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=7e23489b961391d5c1b2414de73f6747" alt="获取 Bool 参数（Lx\_Bool）相关图示 4" width="1280" height="115" data-path="images/legacy/6d73a81b-e785-4f8f-a732-fa4287df78a8/a7a8dae4-f76d-4f02-a9bb-04803115741d.avif" />
</Frame>

图中获取的是 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"

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/607387d3-60d5-4958-af77-0abfb71facb5/f6271f66-6f11-4315-bf02-03f8733ec7aa.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=b1cbc7a60ff8f10824bc9f365e7d612a" alt="设置 Bool 参数（Lx\_Bool）相关图示" width="1280" height="65" data-path="images/legacy/607387d3-60d5-4958-af77-0abfb71facb5/f6271f66-6f11-4315-bf02-03f8733ec7aa.avif" />
</Frame>

可以看到输出：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/59b92496-6fc1-4252-ac13-96bcb071dd91/5aefcdf8-ce88-462f-9c1b-240879301714.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=1d97d8f8f57f4eb8fc69b516c1816142" alt="设置 Bool 参数（Lx\_Bool）相关图示 2" width="1280" height="161" data-path="images/legacy/59b92496-6fc1-4252-ac13-96bcb071dd91/5aefcdf8-ce88-462f-9c1b-240879301714.avif" />
</Frame>

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

<br />

**ROS2**

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/9748edef-61b1-4014-be36-dff20a825cee/3d3dcbae-6b6e-4332-b4c1-0833a3bf9503.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=f2e787171188c560665b00e60b83c67a" alt="设置 Bool 参数（Lx\_Bool）相关图示 3" width="1280" height="49" data-path="images/legacy/9748edef-61b1-4014-be36-dff20a825cee/3d3dcbae-6b6e-4332-b4c1-0833a3bf9503.avif" />
</Frame>

可以看到输出：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/a57623c2-7926-4b6c-b6fe-484c6d142302/b5f7f39f-7c48-47b8-becd-3b4431189a1f.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=f3d7ddfae09f107dbac245b25950a4c1" alt="设置 Bool 参数（Lx\_Bool）相关图示 4" width="1280" height="108" data-path="images/legacy/a57623c2-7926-4b6c-b6fe-484c6d142302/b5f7f39f-7c48-47b8-becd-3b4431189a1f.avif" />
</Frame>

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

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

**ROS1**

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

val: ''

is\_set: false"

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/TF-TfIsh_fVqVeCP/images/legacy/bbc24940-9d3d-472f-8bcc-d035c90d30fc/17570b75-4c86-4f11-a838-66755a7842dd.avif?fit=max&auto=format&n=TF-TfIsh_fVqVeCP&q=85&s=b743fac7d72ba8210ba3985a140e44b9" alt="获取 String 参数（Lx\_String）相关图示" width="1280" height="70" data-path="images/legacy/bbc24940-9d3d-472f-8bcc-d035c90d30fc/17570b75-4c86-4f11-a838-66755a7842dd.avif" />
</Frame>

可以看到输出：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/6c141b40-d264-4dc1-a5ed-75df668f1be5/34c346c4-c172-4b8b-a61b-f229d3d1ebed.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=8eb71592a992d66245c8983f95da8133" alt="获取 String 参数（Lx\_String）相关图示 2" width="1280" height="160" data-path="images/legacy/6c141b40-d264-4dc1-a5ed-75df668f1be5/34c346c4-c172-4b8b-a61b-f229d3d1ebed.avif" />
</Frame>

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

<br />

**ROS2**

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/9bf79522-e2ee-4f7e-ad7e-c239fcf00be5/7eb63a63-e6fe-4988-8d11-68f008672b36.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=e2172470d23ffcb7e4a0a7a9182a0c7a" alt="获取 String 参数（Lx\_String）相关图示 3" width="1280" height="36" data-path="images/legacy/9bf79522-e2ee-4f7e-ad7e-c239fcf00be5/7eb63a63-e6fe-4988-8d11-68f008672b36.avif" />
</Frame>

可以看到输出：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/032dbc26-0ad2-435b-ad24-7b57a9553a9e/c24d4d4b-6002-4ce5-bec4-9677545dd341.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=96a950ca2ef3941032ca0627cdc97d15" alt="获取 String 参数（Lx\_String）相关图示 4" width="1280" height="91" data-path="images/legacy/032dbc26-0ad2-435b-ad24-7b57a9553a9e/c24d4d4b-6002-4ce5-bec4-9677545dd341.avif" />
</Frame>

图中获取的是设备版本号，根据返回结果可以看到，当前值是 **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"

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/7753aa87-a255-48b1-97a6-eba2473a31fc/7224317e-c644-48bc-bf93-21c21027d0fa.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=111dba0d24320b618f13372fedbbdc95" alt="设置 String 参数（Lx\_String）相关图示" width="1280" height="67" data-path="images/legacy/7753aa87-a255-48b1-97a6-eba2473a31fc/7224317e-c644-48bc-bf93-21c21027d0fa.avif" />
</Frame>

可以看到输出：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/6ff71fce-5a6c-469d-8304-5d6770085595/610f2d35-888a-448b-a826-d942a1c4ed59.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=57d514ca1d2c15b51f678fb6ab7f7ac2" alt="设置 String 参数（Lx\_String）相关图示 2" width="1280" height="170" data-path="images/legacy/6ff71fce-5a6c-469d-8304-5d6770085595/610f2d35-888a-448b-a826-d942a1c4ed59.avif" />
</Frame>

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

**ROS2**

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/kNk2cPO_S_XIpvDn/images/legacy/43aa6748-bd74-4e5d-845f-551543fc4260/c39e1ef9-4892-4579-8fef-d41c3622df7b.avif?fit=max&auto=format&n=kNk2cPO_S_XIpvDn&q=85&s=d37bfc9c2f75d97d2e09034a66a1bb4a" alt="设置 String 参数（Lx\_String）相关图示 3" width="1280" height="27" data-path="images/legacy/43aa6748-bd74-4e5d-845f-551543fc4260/c39e1ef9-4892-4579-8fef-d41c3622df7b.avif" />
</Frame>

可以看到输出：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/a117648a-c042-4800-95b2-1fef0bbacc8a/41657cf8-22c9-46ce-be17-366e082c8b9a.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=33e7911660a8986fa24f6df1d813bd3f" alt="设置 String 参数（Lx\_String）相关图示 4" width="1280" height="85" data-path="images/legacy/a117648a-c042-4800-95b2-1fef0bbacc8a/41657cf8-22c9-46ce-be17-366e082c8b9a.avif" />
</Frame>

图中设置的是设备版本号，根据返回结果可以看到，当前值是 **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，会有部分算法在上位机计算，所以导致资源占用量大，属于正常现象。<br />

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

* 单流：指开启 RGB、深度、强度任意一个流

* 双流：指开启 RGB、深度、强度任意两个流

* 三流：指 RGB、深度、强度三个流全部开启

* 四流：指 RGB、深度、强度、点云全部开启

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

* 开启托盘算法则必须开启深度

* 开启避障算法则必须开启深度

* 开启定位算法则必须开启 RGB

<br />

表格中浅蓝色背景为开启点云的运行配置，无色背景为不开启点云的运行配置。**以下所有测试数据默认为算法下移，因此对于 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，会有部分算法在上位机计算，所以导致资源占用量大，属于正常现象。<br />

**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 |

<br />

| 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： [https://cmake.org/download/解压下载的包：tar](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")

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/sF5769lvvJTqdETT/images/legacy/d3e046da-7815-4104-b3a1-adf631bafe51/2d28d6a9-5d74-4359-81ce-05c52472893f.avif?fit=max&auto=format&n=sF5769lvvJTqdETT&q=85&s=18189fce9c66cef39f7384e3d8048067" alt="Opencv 指定版本安装方法相关图示" width="774" height="346" data-path="images/legacy/d3e046da-7815-4104-b3a1-adf631bafe51/2d28d6a9-5d74-4359-81ce-05c52472893f.avif" />
</Frame>

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 已经正确安装：

<img src="https://mintcdn.com/ruiyangliu/kNk2cPO_S_XIpvDn/images/legacy/3d11257d-8a56-4528-9adf-48a67ba0bf1a/8d373554-c663-433d-9777-a7513a35ac18.avif?fit=max&auto=format&n=kNk2cPO_S_XIpvDn&q=85&s=d3e3740a62c47ec73c2a3b7950c6712a" alt="安装 ROS相关图示" width="1280" height="618" data-path="images/legacy/3d11257d-8a56-4528-9adf-48a67ba0bf1a/8d373554-c663-433d-9777-a7513a35ac18.avif" />

<br />

**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 已经正确安装：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/v6LV3HuYyMJV7gn5/images/legacy/f26533a7-6cb6-4b2e-acc1-73b29d6be0c0/69dc44fe-daa1-4f18-b8b7-2cfa263eba56.avif?fit=max&auto=format&n=v6LV3HuYyMJV7gn5&q=85&s=4dc155fb14eda3df259ac1164836489e" alt="安装 ROS相关图示 2" width="1280" height="615" data-path="images/legacy/f26533a7-6cb6-4b2e-acc1-73b29d6be0c0/69dc44fe-daa1-4f18-b8b7-2cfa263eba56.avif" />
</Frame>

**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 已经正确安装：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/p8TYWsai56GIOIxs/images/legacy/c8bfbdc9-0afd-492c-8cb6-b120620de403/b86be7d4-19c9-4e07-84d9-8fff9ca86784.avif?fit=max&auto=format&n=p8TYWsai56GIOIxs&q=85&s=3540f0474ee1ff4e07d648a77874a999" alt="安装 ROS相关图示 3" width="1280" height="617" data-path="images/legacy/c8bfbdc9-0afd-492c-8cb6-b120620de403/b86be7d4-19c9-4e07-84d9-8fff9ca86784.avif" />
</Frame>

**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，如下图（注意看路径）：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/v6LV3HuYyMJV7gn5/images/legacy/ee08a349-2fff-4dd3-b863-f274d9c29dc3/1ae48041-e02b-4d47-a60e-2b96e1139c48.avif?fit=max&auto=format&n=v6LV3HuYyMJV7gn5&q=85&s=ce5125d64c861e81122bc33a64763466" alt="Ros 如何创建一个新的测试包相关图示" width="765" height="232" data-path="images/legacy/ee08a349-2fff-4dd3-b863-f274d9c29dc3/1ae48041-e02b-4d47-a60e-2b96e1139c48.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/50c938eb-24b1-4e23-a5b3-b514cf345318/3a756c2e-f7c7-4638-8066-53fda788669d.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=9f8bcf7748d4a930f2be359089ace17b" alt="Ros 如何创建一个新的测试包相关图示 2" width="949" height="220" data-path="images/legacy/50c938eb-24b1-4e23-a5b3-b514cf345318/3a756c2e-f7c7-4638-8066-53fda788669d.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/a0ed2fe3-bfde-4578-827c-ac7ad8abc037/91074ddf-541e-4889-b5d4-f7abc025f022.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=c56eed692aff77feff59125fdc2c0713" alt="Ros 如何创建一个新的测试包相关图示 3" width="955" height="239" data-path="images/legacy/a0ed2fe3-bfde-4578-827c-ac7ad8abc037/91074ddf-541e-4889-b5d4-f7abc025f022.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/v6LV3HuYyMJV7gn5/images/legacy/feb3446d-3ec4-43f4-9cc8-d4f1df209c32/b59894a1-17b5-4acd-9ee4-1d3fd1829e87.avif?fit=max&auto=format&n=v6LV3HuYyMJV7gn5&q=85&s=ef4e05e5b48c6e26a33d640eef38bad2" alt="Ros 如何创建一个新的测试包相关图示 4" width="937" height="122" data-path="images/legacy/feb3446d-3ec4-43f4-9cc8-d4f1df209c32/b59894a1-17b5-4acd-9ee4-1d3fd1829e87.avif" />
</Frame>

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

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

source devel/setup.bash

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/725e5d72-2f1d-4ebd-acf3-27579745f4c6/a8859a9f-e2a8-462f-a9c6-117a67b8407f.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=a14bac5074def3fce5bc4b562e68e606" alt="Ros 如何创建一个新的测试包相关图示 5" width="941" height="125" data-path="images/legacy/725e5d72-2f1d-4ebd-acf3-27579745f4c6/a8859a9f-e2a8-462f-a9c6-117a67b8407f.avif" />
</Frame>

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

rosrun example example

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/92b5ba9d-a46e-4a76-a64e-d3bc9f30fd85/2b3a3a35-ad76-41a0-a913-c5fdb14faf8b.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=ec2fa56859fac94d1070645ac48c4469" alt="Ros 如何创建一个新的测试包相关图示 6" width="819" height="129" data-path="images/legacy/92b5ba9d-a46e-4a76-a64e-d3bc9f30fd85/2b3a3a35-ad76-41a0-a913-c5fdb14faf8b.avif" />
</Frame>

### 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，将内容拷贝到文件中，拷贝完成后如下：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/v6LV3HuYyMJV7gn5/images/legacy/eb472a71-b8d3-4dbf-9cce-fdf92f2e45cd/fbc3fcf1-5772-4fbe-9f61-283841222501.avif?fit=max&auto=format&n=v6LV3HuYyMJV7gn5&q=85&s=f6b96d427114959faf6d9607700c93df" alt="安装 ROS2相关图示" width="1280" height="566" data-path="images/legacy/eb472a71-b8d3-4dbf-9cce-fdf92f2e45cd/fbc3fcf1-5772-4fbe-9f61-283841222501.avif" />
</Frame>

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.终端输出如下则证明安装成功：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/6300cf50-e7ee-44ca-bf76-dfc90bb2023e/5dec0721-d4fe-4663-b8bc-9af8bd5652d3.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=28a13f3d5724f75937c94f9b4caf7882" alt="安装 ROS2相关图示 2" width="1280" height="416" data-path="images/legacy/6300cf50-e7ee-44ca-bf76-dfc90bb2023e/5dec0721-d4fe-4663-b8bc-9af8bd5652d3.avif" />
</Frame>

**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.如果此步骤报错如下：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/9NwIk117B61f2MKh/images/legacy/660825ae-43a4-40e9-9ae4-183e6c0b1423/53f54e64-41ea-4342-9f85-bd68f3f6b68a.avif?fit=max&auto=format&n=9NwIk117B61f2MKh&q=85&s=2499c4ab0b8a828045e6606166fd1db6" alt="安装 ROS2相关图示 3" width="1280" height="82" data-path="images/legacy/660825ae-43a4-40e9-9ae4-183e6c0b1423/53f54e64-41ea-4342-9f85-bd68f3f6b68a.avif" />
</Frame>

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

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/p8TYWsai56GIOIxs/images/legacy/c8abece0-d058-4ef3-a421-6d4860d7226e/2ee8fca9-e7ed-48ef-8374-09591a96e223.avif?fit=max&auto=format&n=p8TYWsai56GIOIxs&q=85&s=e991c600d19a4e78c873d898aea9490f" alt="安装 ROS2相关图示 4" width="1280" height="567" data-path="images/legacy/c8abece0-d058-4ef3-a421-6d4860d7226e/2ee8fca9-e7ed-48ef-8374-09591a96e223.avif" />
</Frame>

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.终端输出如下则证明安装成功：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/p8TYWsai56GIOIxs/images/legacy/c50b5dd8-70b2-4f89-b0e4-5027fe5be13b/08fe8eb2-4571-4661-afa7-4677cb4edb89.avif?fit=max&auto=format&n=p8TYWsai56GIOIxs&q=85&s=cb639d72afc8a9cfc6242a2f27a11cb7" alt="安装 ROS2相关图示 5" width="1280" height="419" data-path="images/legacy/c50b5dd8-70b2-4f89-b0e4-5027fe5be13b/08fe8eb2-4571-4661-afa7-4677cb4edb89.avif" />
</Frame>

**Ubuntu20.04**

1.添加软件源

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

sudo curl -sSL [https://raw.githubusercontent.com/ros/rosdistro/master/ros.key-o](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:拒绝连接”

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/nxqv_xAQEjmfOVcO/images/legacy/16d8d901-e09b-48ac-8ae9-da5d3b863635/6a891b3e-2997-42bb-9ab1-fc8a0d3d593c.avif?fit=max&auto=format&n=nxqv_xAQEjmfOVcO&q=85&s=dfcb7ce75bd90c549366ee9ee48e0a6d" alt="安装 ROS2相关图示 6" width="1280" height="59" data-path="images/legacy/16d8d901-e09b-48ac-8ae9-da5d3b863635/6a891b3e-2997-42bb-9ab1-fc8a0d3d593c.avif" />
</Frame>

sudo vi /etc/hosts

3.增加下面的解析

185.199.108.133raw\.githubusercontent.com

4.添加后的文件如下：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/Ai2RiaGVEsyzk96D/images/legacy/7bebf4a5-5d39-4e23-b605-ec8b38e65e95/a07bee8b-6342-418b-950b-68dd9ca834ee.avif?fit=max&auto=format&n=Ai2RiaGVEsyzk96D&q=85&s=899624b12828d7f4f3186d8f74b03acb" alt="安装 ROS2相关图示 7" width="1280" height="449" data-path="images/legacy/7bebf4a5-5d39-4e23-b605-ec8b38e65e95/a07bee8b-6342-418b-950b-68dd9ca834ee.avif" />
</Frame>

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.终端输出如下则证明安装成功：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/chmV2dpTffK_RM5U/images/legacy/a153e598-f450-4ac3-841a-36fc9776aec2/50194f24-ca34-4381-903a-2d5a177fa42b.avif?fit=max&auto=format&n=chmV2dpTffK_RM5U&q=85&s=2abf2b79454ecfae4ea4831f0731380f" alt="安装 ROS2相关图示 8" width="1280" height="418" data-path="images/legacy/a153e598-f450-4ac3-841a-36fc9776aec2/50194f24-ca34-4381-903a-2d5a177fa42b.avif" />
</Frame>

**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:拒绝连接”

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/p8TYWsai56GIOIxs/images/legacy/c5a24421-eb52-4af9-9102-33af57a00d3d/0382935f-fa16-4229-bd57-9d38b3e46e18.avif?fit=max&auto=format&n=p8TYWsai56GIOIxs&q=85&s=32f9352f28581776ce70b87861fef08c" alt="安装 ROS2相关图示 9" width="1280" height="59" data-path="images/legacy/c5a24421-eb52-4af9-9102-33af57a00d3d/0382935f-fa16-4229-bd57-9d38b3e46e18.avif" />
</Frame>

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

185.199.108.133raw\.githubusercontent.com

添加后的文件如下：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/p8TYWsai56GIOIxs/images/legacy/c6c35f7f-33d7-4814-9ff6-f8a91befa7b3/296da332-90b4-4556-90f7-d919649c20db.avif?fit=max&auto=format&n=p8TYWsai56GIOIxs&q=85&s=f6d569d9f372719ac760ea06b9f188e8" alt="安装 ROS2相关图示 10" width="1280" height="448" data-path="images/legacy/c6c35f7f-33d7-4814-9ff6-f8a91befa7b3/296da332-90b4-4556-90f7-d919649c20db.avif" />
</Frame>

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.终端输出如下则证明安装成功：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/TF-TfIsh_fVqVeCP/images/legacy/bc04fff4-66a4-4006-8ae5-a26fcf98c644/d77d3f8f-675c-4168-8621-182458b8f9cc.avif?fit=max&auto=format&n=TF-TfIsh_fVqVeCP&q=85&s=8a396bc79bf3f4c93d01d894904cb130" alt="安装 ROS2相关图示 11" width="1280" height="418" data-path="images/legacy/bc04fff4-66a4-4006-8ae5-a26fcf98c644/d77d3f8f-675c-4168-8621-182458b8f9cc.avif" />
</Frame>

### 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

<br />

***

欢迎通过下述方式联系我们：

* 尚未购买产品，请[点我](https://work.weixin.qq.com/ca/cawcdef7e3228b9372 "点我")添加售前工程师/销售企业微信

* 已购买产品的用户，请[点我](https://work.weixin.qq.com/ca/cawcdefa8ca5967bca "点我")添加售后技术支持企业微信

* **官方网站**：[www.mrdvs.cn](https://www.mrdvs.cn "www.mrdvs.cn")

* **Official Website**: [www.mrdvs.cn](https://www.mrdvs.cn "www.mrdvs.cn")

* **B站**：[提供视频教程与应用案例](https://space.bilibili.com/3546755102672963 "提供视频教程与应用案例")

* **Bilibili** : [Provides video tutorials and application cases](https://space.bilibili.com/3546755102672963 " Provides video tutorials and application cases ")

* **Github**：[下载SDK与示例代码](https://github.com/Lanxin-MRDVS/CameraSDK "下载SDK与示例代码")

* **GitHub**: [Download SDK and Sample Code](https://github.com/Lanxin-MRDVS/CameraSDK "Download SDK and Sample Code")

* **邮箱**：[service@mrdvs.com](mailto:service@mrdvs.com "service@mrdvs.com")

* **Email**: [service@mrdvs.com](mailto:service@mrdvs.com "service@mrdvs.com")

* ：400-025-6680

* 关注官方公众号，获取最新资讯：

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/TF-TfIsh_fVqVeCP/images/legacy/b09a1037-0272-4bd7-9e1a-903fef1ae4ba/033d184a-016f-47a7-ae2d-66a7ec774555.avif?fit=max&auto=format&n=TF-TfIsh_fVqVeCP&q=85&s=223423cca10875929ee7a6662523fee3" alt="Ros2 如何创建一个新的测试包相关图示" width="1280" height="1280" data-path="images/legacy/b09a1037-0272-4bd7-9e1a-903fef1ae4ba/033d184a-016f-47a7-ae2d-66a7ec774555.avif" />
</Frame>

***

**感谢您的访问，并希望知识库能成为您深入了解迈尔微视产品和方案的得力助手！**

<br />
