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

# ROS 快速入门

> 介绍 V2 视觉定位模块 ROS SDK 的环境配置、编译、运行与基本建图定位流程。

## 前言

本文介绍视觉定位模块的软件架构、ROS SDK配置方法，以及基本的建图和定位操作流程。

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/QN6k0SB-_GcIFV4g/images/legacy/c450a63a-7b1c-4291-9e40-4cb352361b6e/7ed197c5-c599-4d93-af40-94afbc0a5507.avif?fit=max&auto=format&n=QN6k0SB-_GcIFV4g&q=85&s=0e122d14fe9acc31215825d42690039e" alt="前言相关图示" width="554" height="131" data-path="images/legacy/c450a63a-7b1c-4291-9e40-4cb352361b6e/7ed197c5-c599-4d93-af40-94afbc0a5507.avif" />
</Frame>

本定位模块示意图如上所示。其中，相机内置的定位程序与上位机的ROS SDK 采用UDP 进行交互。此外，定位程序自带一个可配置且能实现定位可视化的WEB 前端（可以使用任意主流浏览器打开，默认访问IP 为192.168.100.201:9998）。该前端主要有两个作用：

1. 运行完整的DEMO 以完成建图与定位流程；

2. 配置与ROS SDK 通讯的目标ID 与PORT。同理，ROS SDK 在启动前也必须配 置好目标相机的IP 与PORT。

完成上述配置后，可通过ROS SDK 调用建图、重定位、下载地图等所有WEB 前端界面具备的功能。

## 编译

### 程序运行环境配置

1． 安装QT

确保上位机中已经安装好了QT5，需要QT5 中的 Core、Network 等功能包，不同linux 版本安装方式可能不同，在此提供安装示例：

```bash theme={null}
sudo apt install qtbase5-dev qtbase5-dev-tools libqt5network5
```

2． 安装libzip 功能包

安装教程 [https://blog.csdn.net/iamhuanyu/article/details/129603632](https://blog.csdn.net/iamhuanyu/article/details/129603632)

3． 编译ROS功能包。在`/V2-ROS-SDK-service`路径下（与`/src`同级）运行`catkin_make`。

## 运行

1\. 进入到/V2-ROS-SDK-service路径下

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/z213gaZOE-H_dEDO/images/legacy/c450a63a-7b1c-4291-9e40-4cb352361b6e/15e7b1f0-5386-423e-85c9-4c433631e49c.avif?fit=max&auto=format&n=z213gaZOE-H_dEDO&q=85&s=61295f819195d2d8d42f6ef2e1e2429c" alt="运行相关图示" width="535" height="38" data-path="images/legacy/c450a63a-7b1c-4291-9e40-4cb352361b6e/15e7b1f0-5386-423e-85c9-4c433631e49c.avif" />
</Frame>

2\. 确认配置文件

a. 确认ROS SDK 文件配置

配置文件目录/V2-ROS-SDK-service/src/lx\_camera\_ros/launch/mapping.launch

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/z213gaZOE-H_dEDO/images/legacy/c450a63a-7b1c-4291-9e40-4cb352361b6e/42a61e00-5e2f-427e-93d0-9b6f2c255397.avif?fit=max&auto=format&n=z213gaZOE-H_dEDO&q=85&s=ac7ea9ba217bb323da2ab8caaabce962" alt="运行相关图示 2" width="554" height="75" data-path="images/legacy/c450a63a-7b1c-4291-9e40-4cb352361b6e/42a61e00-5e2f-427e-93d0-9b6f2c255397.avif" />
</Frame>

相机默认ip 为192.168.100.201（如果需要改变相机IP，请使用相机出厂上位机进行修改，并在此作对应修改IP），端口固定填写8001。

b. 确认相机与电脑处于同一网段，连接至同一个交换机上。 c. 确认相机程序配置正确，进入WEB 点击参数配置，

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/MkEAluefSmo8KsY1/images/legacy/c450a63a-7b1c-4291-9e40-4cb352361b6e/c579b834-e264-488c-9ee6-0e0832bc73f2.avif?fit=max&auto=format&n=MkEAluefSmo8KsY1&q=85&s=03685fe0f5a18300bb5ee7768c8f2f58" alt="运行相关图示 3" width="556" height="352" data-path="images/legacy/c450a63a-7b1c-4291-9e40-4cb352361b6e/c579b834-e264-488c-9ee6-0e0832bc73f2.avif" />
</Frame>

点击左侧菜单栏的“参数配置”按扭，弹出如下窗口，

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/MkEAluefSmo8KsY1/images/legacy/c450a63a-7b1c-4291-9e40-4cb352361b6e/9c78ada8-7eec-447c-9b42-23e298e2017b.avif?fit=max&auto=format&n=MkEAluefSmo8KsY1&q=85&s=db19fe2317dbcb4b62e1e1bf7ff838e3" alt="运行相关图示 4" width="450" height="397" data-path="images/legacy/c450a63a-7b1c-4291-9e40-4cb352361b6e/9c78ada8-7eec-447c-9b42-23e298e2017b.avif" />
</Frame>

将portCode 改为8987(一般固定为该值)，将portName 改为本机与相机连接的网口IP（即运行ROS SDK 上位机的网卡IP）

3\. 启动ROS节点

```bash theme={null}
source devel/setup.bash
roslaunch lx_camera_ros mapping.launch
```

启动后显示如下图所示，则表示启动成功。

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/z213gaZOE-H_dEDO/images/legacy/c450a63a-7b1c-4291-9e40-4cb352361b6e/49dea7d3-7962-4ee7-8168-216378b6ca63.avif?fit=max&auto=format&n=z213gaZOE-H_dEDO&q=85&s=d0f1890c7f844ae494a3feac5d2ee60e" alt="运行相关图示 5" width="555" height="362" data-path="images/legacy/c450a63a-7b1c-4291-9e40-4cb352361b6e/49dea7d3-7962-4ee7-8168-216378b6ca63.avif" />
</Frame>

### 调试

1\. ROS 调试方式

打开新终端，进入`/V2-ROS-SDK-service`路径并运行`source devel/setup.bash`，然后开始调试。

a. 订阅消息

例：获取当前相机存储空间占用

进入调试后，在终端运行`rostopic echo /lx_localization_node/LxCamera_Capacity_Status`。

收到如下消息则表示整个通讯链路正常，同时该消息也可作为心跳包使用，频率为2hz

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/QN6k0SB-_GcIFV4g/images/legacy/c450a63a-7b1c-4291-9e40-4cb352361b6e/8092fa65-76da-46ef-8756-b0e37d673e76.avif?fit=max&auto=format&n=QN6k0SB-_GcIFV4g&q=85&s=811d04ffcea5c9032da4706184c189c6" alt="调试相关图示" width="554" height="175" data-path="images/legacy/c450a63a-7b1c-4291-9e40-4cb352361b6e/8092fa65-76da-46ef-8756-b0e37d673e76.avif" />
</Frame>

2\. 调用服务接口

例： 查看当前选择地图名

在终端运行`rosservice call /lx_localization_node/LxCamera_GetCurMapname_srv "get_cur_mapname: true"`。

收到如下消息则表示整个通讯链路正常，返回消息为当前地图名。

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/p8TYWsai56GIOIxs/images/legacy/c450a63a-7b1c-4291-9e40-4cb352361b6e/efa918a2-6e6e-4191-9627-dfd126ceb610.avif?fit=max&auto=format&n=p8TYWsai56GIOIxs&q=85&s=170033961d8ed99b3829adb629ce7e62" alt="调试相关图示 2" width="554" height="37" data-path="images/legacy/c450a63a-7b1c-4291-9e40-4cb352361b6e/efa918a2-6e6e-4191-9627-dfd126ceb610.avif" />
</Frame>

## 基本操作流程

将相机通电，等待约30s 后，再启动数据转发节点开始使用。

进入调试终端

***1.下发建图指令***

rosservice call /lx\_localization\_node/LxCamera\_Mapping\_srv “status: true mapname: ‘test\_map’”

该指令用于开始一个建图任务，会准备创建一个”test\_map”为名字的地图，下发成功返回true，此时可以拉动小车扫图。

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/QN6k0SB-_GcIFV4g/images/legacy/c450a63a-7b1c-4291-9e40-4cb352361b6e/8a77a9c8-f9df-4c71-a4c9-a4e9d66d6892.avif?fit=max&auto=format&n=QN6k0SB-_GcIFV4g&q=85&s=b84c8e8f00abaa9ce0d6bbfa43294ba2" alt="基本操作流程相关图示" width="554" height="30" data-path="images/legacy/c450a63a-7b1c-4291-9e40-4cb352361b6e/8a77a9c8-f9df-4c71-a4c9-a4e9d66d6892.avif" />
</Frame>

***2.下发结束建图指令***

rosservice call /lx\_localization\_node/LxCamera\_Mapping\_srv “status: false mapname: ‘test\_map’”

该指令用于结束一个建图任务，下发成功后返回true，此时等待建图结束即可收到返回值。

<Frame>
  <img src="https://mintcdn.com/ruiyangliu/MkEAluefSmo8KsY1/images/legacy/c450a63a-7b1c-4291-9e40-4cb352361b6e/9c93beee-a975-4c4a-93d0-31c500a676f4.avif?fit=max&auto=format&n=MkEAluefSmo8KsY1&q=85&s=9e38e3802e876c5580d706eb19d2471f" alt="基本操作流程相关图示 2" width="554" height="28" data-path="images/legacy/c450a63a-7b1c-4291-9e40-4cb352361b6e/9c93beee-a975-4c4a-93d0-31c500a676f4.avif" />
</Frame>

***3.建图完成后等待片刻，切换至新建地图的名字***

rosservice call /lx\_localization\_node/LxCamera\_SwitchMap\_srv “map\_name:“test\_map’”

***4.切完图后下发重定位消息即可***

rosservice call /lx\_localization\_node/LxCamera\_UploadReloc\_srv “pose:

header:

seq: 0

stamp:

secs: 0

nsecs: 0

frame\_id: ‘map’

pose:

pose:

position:

x: 4.5

y: -15.5

z: 0.0

orientation:

x: 0.0

y: 0.0

z: 0.694658

w: 0.71934

covariance: \[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]”

其中orientation 中的x,y,z,w 为角度的四元数表示方法，请注意格式

***5.获取当前的实时定位位置***

rostopic echo /lx\_localization\_node/LxCamera\_LocationPoseResult

### 常见问题与解决方法

***1. ROS*** 程序无法编译

-对依赖库环境检查，确认是否完全安装所有依赖库

***2.ROS SDK***发送消息无回复

-确认相机与本机处于同网段，或者使用相机上位机能否打开相机查看图像。

-确认相机配置文件无问题，确认ROS 配置文件无问题。

***3.ROS*** 调试消息无法发出

-ROS 消息对格式要求严格，在调试的时候请完全按照指令文档的格式，只对值进行修

改调试。
