autolabor-c1-doc/node/serial.md

127 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## pantilt_camera_serial
### 简介
Pantilt_camera_serial节点是一个为 ROS 开发的包,用于控制和管理与相机云台相关的硬件接口。该节点允许用户通过 ROS
控制云台的方向和角度,同时通过摄像头捕获视频数据。
![ControlPanel](./imgs/control-panel.png)
### 功能
- 控制云台的方向和角度。
- 从摄像头捕获视频。
- 提供视频流和云台控制的 ROS 话题和服务。
### 使用方法
#### 1. 编译和安装
确保已安装 `pantilt_camera_serial`, `cv_camera`, 和 `rviz_pantilt_plugin` 包。首先,将这些包克隆到你的 ROS
工作空间的 `src` 目录下,然后使用以下命令编译:
```bash
cd ~/catkin_ws # 或你的工作空间目录
catkin_make # 或使用 catkin build如果你使用 catkin_tools
```
#### 2. 修改 launch 文件
`pantiltcamera.launch` 文件中,修改 `device_path``port_name` 参数:
- `device_path`:视频设备的路径,如 `/dev/v4l/by-path/pci-...`
- `port_name`:云台控制的串口路径,如 `/dev/ttyUSB0`
#### 3. 添加设备操作权限
为了让 ROS 节点能够访问硬件设备,你可能需要为当前用户添加设备操作权限:
```bash
sudo usermod -a -G dialout $USER
sudo chmod a+rw /dev/ttyUSB0 # 云台控制的串口
sudo chmod a+rw /dev/video0 # 摄像头设备
```
#### 4. 启动 launch 文件
使用以下命令启动系统:
```bash
roslaunch pantilt_camera_serial pantiltcamera.launch
```
#### 5. 订阅和发布话题
此节点与其他 ROS 节点交互主要通过以下话题:
##### 发布话题
- **/node_name/pantilt_angle_info**
- **类型**: `pantilt_camera_serial/PantiltAngleInfo`
- **描述**: 发布云台当前的角度信息,包括对地航向角、横滚角和俯仰角,以及对应的相对基座读数。
- **单位**角度单位均为度degrees
- **消息结构**:
- `heading`: 对地航向角degrees
- `roll`: 对地横滚角degrees
- `pitch`: 对地俯仰角degrees
- `encoder_heading`: 相对基座航向角读数
- `encoder_roll`: 相对基座横滚角读数
- `encoder_pitch`: 相对基座俯仰角读数
##### 订阅话题
- **/node_name/pantilt_vel**
- **类型**: `geometry_msgs/Twist`
- **描述**: 接收控制云台的速度和方向的指令。`linear.x` 和 `angular.z` 分别用于控制航向heading和俯仰pitch轴的速度。
- **消息用法**:
- `linear.x`: 控制航向轴的速度,取值范围 [0,2]
- `angular.z`: 控制俯仰轴的速度,取值范围 [0,2]
#### 示例
发送云台控制命令示例:
```bash
rostopic pub /pantilt_camera_serial/pantilt_vel geometry_msgs/Twist '{linear: {x: 0.5}, angular: {z: 0.3}}'
```
#### 6. 服务节点
提供服务 `/node_name/send_command`,允许用户发送具体的控制命令到云台。
- **SetLockMode**
- 描述:锁定当前云台的方向,使其不随输入改变。
- **SetHeadingFollow**
- 描述:设置云台仅跟随航向(水平方向),俯仰方向(垂直方向)保持锁定。
- **SetHeadingPitchFollow**
- 描述:设置云台跟随航向和俯仰方向,即云台将根据输入完全动态调整。
- **SetFullFollowMode**
- 描述:云台将完全跟随输入的方向移动,包括水平和垂直方向的全方位跟随。
- **BackToCenter**
- 描述:命令云台回到中心位置,即所有方向重置为初始状态。
- **SetPantiltSpeed**
- 描述:设置云台的运动速度,适用于需要控制运动快慢的场景。
- **SetPantiltAngle**
- 描述直接设置云台的目标角度参数为三个角度值Head角度、Roll角度和Pitch角度如果有
- 需要添加参数data[0]: Head角度data[1]: Roll角度data[2]: Pitch角度。
- 取值范围分别为Head角度[-160,160]Roll角度[-40,40]Pitch角度[-90,90]。
- **使用示例**
```bash
rosservice call /pantilt_camera_serial/send_command "{command_name: 'SetLockMode', data: []}"
rosservice call /pantilt_camera_serial/send_command "{command_name: 'SetPantiltAngle', data: [10.0,0.0,0.0]}"
```
#### 7. 使用 rviz_pantilt_plugins
在 RViz 中加载 `rviz_pantilt_plugin` 来实时查看和控制云台及摄像头。确保在 RViz 配置中加载了正确的 `.rviz`
配置文件,以查看相应的视图和控制界面。
> 注:详细说明参考(http://www.autolabor.com.cn/usedoc/c1/node/rviz)
### 注意
在使用之前,请确保所有硬件设备都已正确连接,并且系统上已正确安装了所有依赖的 ROS 包和库。
```