# 清扫车 ROS2 控制与定位消息接口

## 1. 文档概述

清扫车 ROS2 控制与定位消息接口

## 2. 依赖环境

### 2.1 系统环境

*   **ROS2 版本**：Foxy 
*   **Ubuntu 版本**：20.04

### 2.2 .deb 的安装、启动与卸载

在目标机器上执行安装：

```bash
sudo dpkg -i controller_XXXX_arm64.deb
```

安装完成后主要文件路径：

工作空间：/opt/controller/

启动脚本：/opt/controller/start_all.sh

CAN 配置脚本：/opt/controller/can.sh

日志文件：/var/log/controller/controller.log

systemd 服务：

CAN 配置服务：/etc/systemd/system/controller-can.service

ROS2 节点服务：/etc/systemd/system/controller.service

安装后，CAN 配置服务会先运行，确保 can0 接口可用，然后 ROS2 节点服务会启动。


手动启动 ROS2 节点：
```bash
sudo systemctl start controller.service
```

重启服务：
```bash
sudo systemctl restart controller.service
```

启动 CAN 配置服务（通常自动执行，不需要手动）：
```bash
sudo systemctl start controller-can.service
```

查看运行状态
```bash
sudo systemctl status controller.service
sudo systemctl status controller-can.service
```

实时查看最新日志：
```bash
tail -f /var/log/controller/controller.log
```

也可以使用 journalctl 查看 systemd 输出：
```bash
sudo journalctl -u controller.service -f
```

旧日志会自动轮转，由 logrotate 管理，每天生成一个历史日志，历史日志会压缩 .gz，默认保留最近 14 天日志

轮转后的文件示例：
```bash
/var/log/controller/controller.log          # 当天日志
/var/log/controller/controller.log-20250923.gz  # 历史压缩日志
```

停止服务
```bash
sudo systemctl stop controller.service
sudo systemctl stop controller-can.service
```

禁用开机自启
```bash
sudo systemctl disable controller.service
sudo systemctl disable controller-can.service
```

卸载 deb 包
```bash
sudo dpkg -r controller
```

卸载包后 日志文件会保留，便于调试。

## 3. 消息（msg）文件详情

### 3.1 McCtrl.msg（车辆控制指令消息）


#### 字段定义



| 字段类型 | 字段名称                        | 取值范围 / 说明                                 | 功能描述                                                     |
| -------- | ------------------------------- | ----------------------------------------------- | ------------------------------------------------------------ |
| uint8    | brake                           | 0（不刹）、1（刹）                                | 电磁刹控制：0 表示解除电磁刹，1 表示激活电磁刹               |
| uint8    | gear                            | 0（空挡）、1（后退）、2（前进）、3（保留）      | 车辆挡位控制，3 为预留挡位暂未使用                           |
| uint8    | rpm                             | 0-4000                                          | 电机转速指令，数值直接对应实际电机转速（rpm）                |
| float32  | angle                           | \[-40.0, 40.0] | 轮端转向角度控制，单位为度（°），[-左、+右]                              |
| uint16   | angle\_speed                    | 120-1500                                        | 转向角速度控制，单位为 rpm                                   |
| bool     | sweep | true（清扫）、false（不清扫）               | 清扫                                |


#### 对应 Topic



*   **Topic**：`/auto_mc_ctrl`



### 3.2 Rtk.msg（RTK 定位信息消息）


#### 字段定义



| 字段类型 | 字段名称   | 取值范围 / 说明                           | 功能描述                                                     |
| -------- | ---------- | ----------------------------------------- | ------------------------------------------------------------ |
| float64  | lat        | 无固定范围（符合 WGS84 坐标系经纬度格式） | 车辆所在位置的纬度 |
| float64  | lon        | 无固定范围（符合 WGS84 坐标系经纬度格式） | 车辆所在位置的经度 |
| float32  | head       | 0-360                                     | 车辆航向角（单位：度），0° 表示正北方向，顺时针递增          |
| float32  | speed      |                                         |    |
| int32    | p\_quality | 0-9    | 定位解状态<br />  0初始化， 1单点定位， 2码差分， 3无效PPS， 4固定解， 5浮点解， 6正在估算， 7，人工输入固定值， 8模拟模式， 9WAAS差分;<br />  固定解是最优解                   |
| int32    | h\_quality | 0-9    | 定向解状态<br />  0初始化， 1单点定位， 2码差分， 3无效PPS， 4固定解， 5浮点解， 6正在估算， 7，人工输入固定值， 8模拟模式， 9WAAS差分;<br />  固定解是最优解                   |

#### 对应 Topic



*   **Topic**：`/rtk_message`


