# 使用ROS的demo

### 启动前检查

<p class="callout warning">请查阅[ CAN硬件连接标准](https://odocs.hexfellow.com/books/hexmove/page/f1b6f)和[CAN总线配置](https://odocs.hexfellow.com/books/hexmove/page/can-6Gh)，确保硬件已经正确连接</p>

> **提示** 请先掌握 `ROS` 的基本知识。可以参考 [ROS1教程](https://wiki.ros.org/ROS/Tutorials) 以及 [ROS2教程](https://docs.ros.org/en/iron/Tutorials.html)，了解对 `ROS` 系统的常见约定。

请检查确保完成以下事项：

1. 已经安装完成ROS-SDK，如果是第一次安装SDK，建议在 ***首次安装后重启*** 一次
2. 已经通过了编译并没有报错
3. 已经完成工作空间的source
4. 如果使用CAN-COM HUB，请确定正确连接CAN总线，确定已经能够搜索到设备
    
    
    - 在终端使用lsusb查询可看到以下设备
5. 确保遥控器已经关闭；或者打开时，拨到的是 CAN 模式
    
    > 关于遥控器与模式，请参阅产品用户手册中关于遥控器的部。

---

### 底盘类设备

> **警告** 注意, 首次尝试使用软件控制机器人时，请确保机器人活动范围内没有其他障碍，或将机器人架起。

**底盘的测试demo有以下两个：**

```
* demo_basic_ctrl.launch
* demo_key_ctrl.launch

```

`demo_basic_ctrl.launch`是标准的启动文件，可以配套自动驾驶直接使用，通过使用 `/cmd_vel` 话题来控制机器人的移动。

`demo_key_ctrl.launch`是支持键盘控制的启动文件，使用 `turtle_teleop_key` 来利用键盘控制机器人。如果你还没有看过 ROS 的 `turtlesim` 教程，请先查看 `turtlesim` 教程。

> **提示** 注意并不是使用方向键控制移动，请查看终端打印的使用方式提示,按下提示中的前进按钮。

**成功启动launch后会得到以下终端消息**

[![startup.png](https://odocs.hexfellow.com/uploads/images/gallery/2024-07/scaled-1680-/VY6Ac9VV1j8sNoGA-startup.png)](https://odocs.hexfellow.com/uploads/images/gallery/2024-07/VY6Ac9VV1j8sNoGA-startup.png)

**launch文件中参数设置和通讯`msg`请查阅`src/drivers/xpkg_vehicle/README.md`文件,以下解释几个关键参数：**

- `calc_speed`是设置里程计计算方式，`true`为用速度计算，`false`为用电机码盘值计算，建议采用默认false设置
- `mode_can_lock`是CAN模式锁定设置，`true`为强制CAN模式，如果用遥控器切换到其他模式会警告并等待恢复，设置`false`则由用户选择控制模式

!!!note 如果出现底盘无法控制，可能是`mode_can_lock`设置`false`，并且切换到了其他模式

- `rate_x`是输入速度的倍率控制，1为全速，在测试时建议先设置为0.2以下

**成功启动launch包后可以通过`rostopic list`查看ROS话题，以下为几个关键话题：**

- 底盘节点向话题`/odom`发送消息类型为`nav_msgs/Odometry`。此消息表示底盘里程计信息，包含底盘当前位姿信息以及线速度角速度信息。
- 底盘节点向话题`/tf`发送消息类型为`tf2_msgs/TFMessage`，包含底盘tf变换信息，需要在launch参数中启动。
- 底盘节点从话题`/cmd_vel`订阅消息类型为`geometry_msgs/Twist`。底盘接收到该消息后进行移动，其中`linear.x`/`linear.y`为线速度，`angular.z`为旋转角速度。