main
parent
f2e82ca8d9
commit
1da290fcac
Binary file not shown.
230
car/ChassisM2.md
230
car/ChassisM2.md
|
@ -1,23 +1,26 @@
|
||||||
# Autolabor M2 ROS 驱动模块
|
# Autolabor ROS 驱动模块
|
||||||
|
|
||||||
## 1. 介绍
|
## 1. 介绍
|
||||||
Autolabor ROS驱动模块包含**CANBus驱动**和**Autolabor M2底盘驱动**,其主要功能包括与Autolabor_CANbus模块通信,并通过线速度和角速度控制Autolabor M2底盘行驶。
|
Autolabor ROS驱动模块包含**CANBus驱动**和**Autolabor CAN系列(PM1/M2) 底盘驱动**,其主要功能包括与Autolabor_CANbus模块通信,并通过线速度和角速度控制Autolabor Can系列底盘行驶。
|
||||||
|
|
||||||
#### 特性
|
#### 特性
|
||||||
|
|
||||||
- 可直接获取CANBus网络内数据,并通过CAN指令控制车辆
|
- 可直接获取CANBus网络内数据,并通过CAN指令控制车辆
|
||||||
- 获取动力轮编码器原始数值(角速度)
|
- 获取动力轮编码器原始数值
|
||||||
- 获取转向轮编码器原始数值(角速度)
|
- 获取转向轮编码器原始数值
|
||||||
- 分别控制动力轮的转速(角速度)
|
- 分别控制动力轮的转速
|
||||||
- 控制转向轮的绝对转向角度
|
- 控制转向轮的绝对转向角度
|
||||||
- 可通过线速度与角速度控制移动底盘,无需单独控制前轮转向
|
- 可通过线速度与角速度控制移动底盘,无需单独控制后轮转向
|
||||||
- 提供实时机器人底盘位置信息,方便闭环控制
|
- 提供实时机器人底盘位置信息,方便闭环控制
|
||||||
- 双动力轮电子差速控制,保证机器人在行驶过程中始终满足阿克曼原理
|
- 双动力轮电子差速控制,保证机器人在行驶过程中始终满足阿克曼原理
|
||||||
- 根据前轮转向优化车辆运动速度,在保证车辆在行驶精度前提下,确保车辆行驶的流畅性
|
- 根据后轮转向优化车辆运动速度,在保证车辆在行驶精度前提下,确保车辆行驶的流畅性
|
||||||
|
|
||||||
## 2. 节点
|
## 2. 节点
|
||||||
|
|
||||||
|
大多数情况下,不需要修改驱动参数,只配置底盘所链接的串口即可,可直接按照 章节 3 ROS 使用说明即可
|
||||||
|
|
||||||
### 2.1 canbus_driver
|
### 2.1 canbus_driver
|
||||||
|
|
||||||
该节点提供与底层AutoCan的通讯,将CAN网络中的数据进行解析并发布至canbus_msg话题中,并开启canbus_server服务,提供其他节点调用,用以发送CAN指令到CAN网络中。
|
该节点提供与底层AutoCan的通讯,将CAN网络中的数据进行解析并发布至canbus_msg话题中,并开启canbus_server服务,提供其他节点调用,用以发送CAN指令到CAN网络中。
|
||||||
|
|
||||||
该节点的结构如图所示:
|
该节点的结构如图所示:
|
||||||
|
@ -30,13 +33,13 @@ Autolabor ROS驱动模块包含**CANBus驱动**和**Autolabor M2底盘驱动**
|
||||||
无
|
无
|
||||||
|
|
||||||
#### 2.1.2 发布话题
|
#### 2.1.2 发布话题
|
||||||
/canbus_msg ([autolabor_canbus_driver/CanBusMessage](doc/CanBusMessage.md))
|
/canbus_msg ([autolabor_canbus_driver/CanBusMessage](doc/CanBusMessage))
|
||||||
~~~
|
~~~
|
||||||
将底层CAN网络中的数据发布在ROS话题中,提供其他节点读取
|
将底层CAN网络中的数据发布在ROS话题中,提供其他节点读取
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
#### 2.1.3 服务
|
#### 2.1.3 服务
|
||||||
/canbus_server ([autolabor_canbus_driver/CanBusService](doc/CanBusService.md))
|
/canbus_server ([autolabor_canbus_driver/CanBusService](doc/CanBusService))
|
||||||
~~~
|
~~~
|
||||||
提供其他节点调用,用于往底层CAN网络中发布指令
|
提供其他节点调用,用于往底层CAN网络中发布指令
|
||||||
~~~
|
~~~
|
||||||
|
@ -58,7 +61,7 @@ CANBus串口波特率
|
||||||
数据解析器从串口获取新数据的频率
|
数据解析器从串口获取新数据的频率
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
### 2.2 M2_driver
|
### 2.2 M2底盘驱动
|
||||||
|
|
||||||
此节点主要用于接收用户发送的速度信息,控制转向轮转动,并根据后轮当前角度结合阿克曼模型优化求解动力轮的转动速度,控制移动底盘进行移动,同时根据动力轮编码器的反馈,输出轮速里程计信息。
|
此节点主要用于接收用户发送的速度信息,控制转向轮转动,并根据后轮当前角度结合阿克曼模型优化求解动力轮的转动速度,控制移动底盘进行移动,同时根据动力轮编码器的反馈,输出轮速里程计信息。
|
||||||
|
|
||||||
|
@ -76,7 +79,7 @@ CANBus串口波特率
|
||||||
外部节点发送的速度信息
|
外部节点发送的速度信息
|
||||||
```
|
```
|
||||||
|
|
||||||
/canbus_msg ([autolabor_canbus_driver/CanBusMessage](doc/CanBusMessage.md))
|
/canbus_msg ([autolabor_canbus_driver/CanBusMessage](doc/CanBusMessage))
|
||||||
|
|
||||||
```
|
```
|
||||||
由canbus_driver发送的底层CANBus消息,其中包含转向轮当前绝对编码器以及动力轮的编码器信息
|
由canbus_driver发送的底层CANBus消息,其中包含转向轮当前绝对编码器以及动力轮的编码器信息
|
||||||
|
@ -93,7 +96,7 @@ CANBus串口波特率
|
||||||
/wheel_angle ([std_msgs/Float64](http://docs.ros.org/api/std_msgs/html/msg/Float64.html))
|
/wheel_angle ([std_msgs/Float64](http://docs.ros.org/api/std_msgs/html/msg/Float64.html))
|
||||||
|
|
||||||
```
|
```
|
||||||
前阿克曼转向轮实时绝对转角,单位rad
|
转向轮实时绝对转角,单位rad
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 2.2.3 服务
|
#### 2.2.3 服务
|
||||||
|
@ -104,6 +107,8 @@ CANBus串口波特率
|
||||||
里程计清零,将里程计的原点放置在执行指令的位置
|
里程计清零,将里程计的原点放置在执行指令的位置
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#### 2.2.4 参数
|
#### 2.2.4 参数
|
||||||
|
|
||||||
~odom_frame (str, default: odom)
|
~odom_frame (str, default: odom)
|
||||||
|
@ -118,10 +123,82 @@ CANBus串口波特率
|
||||||
移动底盘坐标系名称
|
移动底盘坐标系名称
|
||||||
```
|
```
|
||||||
|
|
||||||
~poller_rate_hz (int, default: 20)
|
~ecu_left_id (int, default: 0)
|
||||||
|
|
||||||
```
|
```
|
||||||
查询底盘参数的频率,单位 Hz
|
左侧动力单元的CAN节点编号(出厂已设置好,无需修改)
|
||||||
|
```
|
||||||
|
|
||||||
|
~ecu_right_id (int, default: 1)
|
||||||
|
|
||||||
|
```
|
||||||
|
右侧动力单元的CAN节点编号(出厂已设置好,无需修改)
|
||||||
|
```
|
||||||
|
|
||||||
|
~tcu_id (int, default: 0)
|
||||||
|
|
||||||
|
```
|
||||||
|
转向单元的CAN节点编号(出厂已设置好,无需修改)
|
||||||
|
```
|
||||||
|
|
||||||
|
~rate (int, default: 10)
|
||||||
|
|
||||||
|
```
|
||||||
|
速度控制以及里程计更新频率,单位 Hz
|
||||||
|
```
|
||||||
|
|
||||||
|
~reduction_ratio (double, default: 20.0)
|
||||||
|
|
||||||
|
```
|
||||||
|
动力单元编码器与车轮转速比例(和机械结构相关,无需修改)
|
||||||
|
```
|
||||||
|
|
||||||
|
~encoder_resolution (double, default: 1600.0)
|
||||||
|
|
||||||
|
```
|
||||||
|
动力单元编码器转动一圈产生的脉冲数(与编码器参数相关,无需修改)
|
||||||
|
```
|
||||||
|
|
||||||
|
~wheel_diameter (double, default: 0.211)
|
||||||
|
|
||||||
|
```
|
||||||
|
动力轮车轮直径,单位 m
|
||||||
|
```
|
||||||
|
|
||||||
|
~wheel_spacing (double, default: 0.412)
|
||||||
|
|
||||||
|
```
|
||||||
|
动力轮轮间距(两个动力轮中心之间的距离),单位 m
|
||||||
|
```
|
||||||
|
|
||||||
|
~shaft_spacing (double, default: 0.324)
|
||||||
|
|
||||||
|
```
|
||||||
|
前后轮轴间距(转向轮中心到动力轮连线的距离),单位 m
|
||||||
|
```
|
||||||
|
|
||||||
|
~max_speed (double, default: 2.0)
|
||||||
|
|
||||||
|
```
|
||||||
|
机器人底盘直线行驶最大速度,单位 m/s
|
||||||
|
```
|
||||||
|
|
||||||
|
~twist_timeout (double, default: 1.0)
|
||||||
|
|
||||||
|
```
|
||||||
|
速度控制超时时间,底盘的保护策略,最近一次的速度控制信息距当前时间超过这个时间,则强制移动底盘停止,单位 s
|
||||||
|
```
|
||||||
|
|
||||||
|
~optimize_limit (double, default: 0.785)
|
||||||
|
|
||||||
|
```
|
||||||
|
底盘行驶控制优化参数,用于设置底盘控制流畅程度,可设置范围为[0,PI/2],值越小表示执行越精确,但行驶流畅程度越低;值越大表示执行流畅程度越高,但精确度越低(如果没有特殊需求,一般保持默认值)
|
||||||
|
```
|
||||||
|
|
||||||
|
~smooth_coefficient (double, default: 0.1)
|
||||||
|
|
||||||
|
```
|
||||||
|
底盘行驶控制平滑参数,用于设置底盘速度变化平滑程度,可设置范围为(0,1],其中值越小表示速度变化越平缓;反之速度变化越剧烈。值为1时,表示对速度信息不进行平滑处理
|
||||||
```
|
```
|
||||||
|
|
||||||
~publish_tf (bool, default: true)
|
~publish_tf (bool, default: true)
|
||||||
|
@ -142,7 +219,7 @@ odom -> base_link
|
||||||
|
|
||||||
### 3.1 底盘连接
|
### 3.1 底盘连接
|
||||||
|
|
||||||
将M2的串口线插入笔记本电脑或工控机,打开底盘电源和急停开关
|
将PM1的串口线插入笔记本电脑或工控机,打开底盘电源和急停开关
|
||||||
|
|
||||||
打开Terminal输入
|
打开Terminal输入
|
||||||
|
|
||||||
|
@ -153,52 +230,103 @@ ll /dev/ttyUSB*
|
||||||
|
|
||||||
### 3.2 源码编译与执行
|
### 3.2 源码编译与执行
|
||||||
|
|
||||||
下载源码
|
获取源码
|
||||||
|
|
||||||
|
联系商务人员获得底盘源代码
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
安装编译工具
|
||||||
|
```
|
||||||
|
sudo apt-get install python3-catkin-tools
|
||||||
|
```
|
||||||
|
|
||||||
|
引入ROS环境变量
|
||||||
|
```
|
||||||
|
source /opt/ros/noetic/setup.bash
|
||||||
|
```
|
||||||
|
|
||||||
|
将源代码复制到工作空间 src 目录下
|
||||||
|
|
||||||
|
包含两个目录
|
||||||
|
|
||||||
|
autolabor_m2_ros_driver
|
||||||
|
|
||||||
|
autolabor_keyboard_control
|
||||||
|
|
||||||
|
进入工作空间源代码目录
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
修改 launch 文件(autolabor_canbus_driver/launch/m2keyboard.launch )中的底盘串口地址
|
||||||
|
|
||||||
|
将 port_name 项的值,修改为您的底盘串口地址。
|
||||||
|
|
||||||
|
可通过 ls /dev/ttyUSB* 查找。
|
||||||
|
|
||||||
|
建议您设定 udev 规则,将其设定成固定名字,以防止串口地址变化
|
||||||
|
|
||||||
|
关于串口 udev 规则的修改,可参考
|
||||||
|
|
||||||
|
http://www.autolabor.com.cn/usedoc/navigationKit2/common/q_a/doc1#1
|
||||||
|
|
||||||
|
章节 7. (接上问)“ 我就想换台计算机,然后把设备用起来,那我该怎么办?”
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
确保您的串口已经增加了当前用户的操作权限,可通过以下命令实现。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
mkdir ~/github_ws
|
sudo chmod 666 /dev/ttyUSB0
|
||||||
cd ~/github_ws
|
|
||||||
git clone http://git.autolabor.com.cn/Autolabor/autolabor_m2_ros_driver.git
|
|
||||||
```
|
```
|
||||||
编译源码
|
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
cd m2_driver_ros/
|
<launch>
|
||||||
catkin_make
|
|
||||||
```
|
|
||||||
加载环境变量
|
|
||||||
|
|
||||||
```
|
<node name="canbus_driver" pkg="autolabor_canbus_driver" type="canbus_driver" output="screen">
|
||||||
source devel/setup.bash
|
|
||||||
```
|
|
||||||
修改launch文件参数
|
|
||||||
|
|
||||||
```
|
|
||||||
gedit src/autolabor_canbus_driver/launch/m2_driver.launch
|
|
||||||
```
|
|
||||||
定位
|
|
||||||
```
|
|
||||||
<param name="port_name" value="/dev/ttyUSB0" />
|
<param name="port_name" value="/dev/ttyUSB0" />
|
||||||
```
|
</node>
|
||||||
将value值改为之前查看的车底盘的设备节点名,修改后保存并关闭
|
|
||||||
|
<node name="m2_driver" pkg="autolabor_canbus_driver" type="m2_driver" output="screen" />
|
||||||
|
|
||||||
|
<node name="keyboard_control" pkg="autolabor_keyboard_control" type="keyboard_control_node" output="screen">
|
||||||
|
<param name="linear_min" value="0.2" />
|
||||||
|
<param name="linear_max" value="0.75" />
|
||||||
|
<param name="linear_step" value="0.1" />
|
||||||
|
<param name="angular_min" value="0.314" />
|
||||||
|
<param name="angular_max" value="1.57" />
|
||||||
|
<param name="angular_step" value="0.314" />
|
||||||
|
</node>
|
||||||
|
</launch>
|
||||||
|
|
||||||
执行launch文件
|
|
||||||
|
|
||||||
```
|
```
|
||||||
roslaunch autolabor_canbus_driver m2_driver.launch
|
|
||||||
|
|
||||||
|
|
||||||
|
cd ~/catkin_ws/src
|
||||||
|
|
||||||
|
|
||||||
|
编译源代码
|
||||||
```
|
```
|
||||||
如果成功执行到这一步,并且没有发现任何错误,则车底层驱动就已经启动完毕,这个时候只要启动相应的控制节点就可以控制车底盘行走了。
|
catkin build
|
||||||
|
|
||||||
### 3.3 控制向前直行
|
|
||||||
|
|
||||||
打开一个terminal
|
|
||||||
|
|
||||||
执行 rostopic list 查看有无/cmd_vel 话题
|
|
||||||
|
|
||||||
如果有的话,执行:
|
|
||||||
|
|
||||||
```
|
|
||||||
rostopic pub -r 10 /cmd_vel geometry_msgs/Twist -- '[1.0,0.0,0.0]' '[0.0,0.0,0]'
|
|
||||||
```
|
```
|
||||||
|
|
||||||
此时车轮会开始转动,如果想要停止的话,必须在执行命令的terminal中执行Ctrl+C,停止发送。
|
引入环境变量
|
||||||
|
|
||||||
|
```
|
||||||
|
source ~/catkin_ws/devel/setup.bash
|
||||||
|
```
|
||||||
|
|
||||||
|
启动底盘键盘控制
|
||||||
|
|
||||||
|
注意需要在桌面环境下的控制台运行,远程 SSH 没有桌面环境会因无法找到 X11Server 报错
|
||||||
|
|
||||||
|
```
|
||||||
|
roslaunch autolabor_canbus_driver m2keyboard.launch
|
||||||
|
|
||||||
|
```
|
|
@ -0,0 +1,16 @@
|
||||||
|
# autolabor_canbus_driver/CanBusMessage Message
|
||||||
|
## Raw Message Definition
|
||||||
|
~~~
|
||||||
|
uint8 node_type # 节点类型
|
||||||
|
uint8 node_seq # 节点序号
|
||||||
|
uint8 msg_type # CAN消息类型
|
||||||
|
uint8[] payload # CAN消息内容(指令数据时为空)
|
||||||
|
~~~
|
||||||
|
|
||||||
|
## Compact Message Definition
|
||||||
|
~~~
|
||||||
|
uint8 node_type
|
||||||
|
uint8 node_seq
|
||||||
|
uint8 msg_type
|
||||||
|
uint8[] payload
|
||||||
|
~~~
|
|
@ -0,0 +1,11 @@
|
||||||
|
# autolabor_canbus_driver/CanBusService Message
|
||||||
|
## Raw Message Definition
|
||||||
|
```
|
||||||
|
autolabor_canbus_driver/CanBusMessage[] requests # CANBus指令列表
|
||||||
|
---
|
||||||
|
```
|
||||||
|
## Compact Message Definition
|
||||||
|
~~~
|
||||||
|
autolabor_canbus_driver/CanBusMessage[] requests
|
||||||
|
---
|
||||||
|
~~~
|
|
@ -0,0 +1,204 @@
|
||||||
|
# Autolabor M2 ROS 驱动模块
|
||||||
|
|
||||||
|
## 1. 介绍
|
||||||
|
Autolabor ROS驱动模块包含**CANBus驱动**和**Autolabor M2底盘驱动**,其主要功能包括与Autolabor_CANbus模块通信,并通过线速度和角速度控制Autolabor M2底盘行驶。
|
||||||
|
|
||||||
|
#### 特性
|
||||||
|
|
||||||
|
- 可直接获取CANBus网络内数据,并通过CAN指令控制车辆
|
||||||
|
- 获取动力轮编码器原始数值(角速度)
|
||||||
|
- 获取转向轮编码器原始数值(角速度)
|
||||||
|
- 分别控制动力轮的转速(角速度)
|
||||||
|
- 控制转向轮的绝对转向角度
|
||||||
|
- 可通过线速度与角速度控制移动底盘,无需单独控制前轮转向
|
||||||
|
- 提供实时机器人底盘位置信息,方便闭环控制
|
||||||
|
- 双动力轮电子差速控制,保证机器人在行驶过程中始终满足阿克曼原理
|
||||||
|
- 根据前轮转向优化车辆运动速度,在保证车辆在行驶精度前提下,确保车辆行驶的流畅性
|
||||||
|
|
||||||
|
## 2. 节点
|
||||||
|
|
||||||
|
### 2.1 canbus_driver
|
||||||
|
该节点提供与底层AutoCan的通讯,将CAN网络中的数据进行解析并发布至canbus_msg话题中,并开启canbus_server服务,提供其他节点调用,用以发送CAN指令到CAN网络中。
|
||||||
|
|
||||||
|
该节点的结构如图所示:
|
||||||
|
<div align=left>
|
||||||
|
<img src="img/canbus_driver.png" width = 70% height = 70% />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
#### 2.1.1 订阅话题
|
||||||
|
|
||||||
|
无
|
||||||
|
|
||||||
|
#### 2.1.2 发布话题
|
||||||
|
/canbus_msg ([autolabor_canbus_driver/CanBusMessage](doc/CanBusMessage.md))
|
||||||
|
~~~
|
||||||
|
将底层CAN网络中的数据发布在ROS话题中,提供其他节点读取
|
||||||
|
~~~
|
||||||
|
|
||||||
|
#### 2.1.3 服务
|
||||||
|
/canbus_server ([autolabor_canbus_driver/CanBusService](doc/CanBusService.md))
|
||||||
|
~~~
|
||||||
|
提供其他节点调用,用于往底层CAN网络中发布指令
|
||||||
|
~~~
|
||||||
|
|
||||||
|
#### 2.1.4 参数
|
||||||
|
~port_name (str, default: /dev/ttyUSB0)
|
||||||
|
|
||||||
|
~~~
|
||||||
|
CANBus串口端口名
|
||||||
|
~~~
|
||||||
|
|
||||||
|
~baud_rate (int, default: 115200)
|
||||||
|
~~~
|
||||||
|
CANBus串口波特率
|
||||||
|
~~~
|
||||||
|
|
||||||
|
~parse_rate (int, default: 100)
|
||||||
|
~~~
|
||||||
|
数据解析器从串口获取新数据的频率
|
||||||
|
~~~
|
||||||
|
|
||||||
|
### 2.2 pm1_driver
|
||||||
|
|
||||||
|
此节点主要用于接收用户发送的速度信息,控制转向轮转动,并根据后轮当前角度结合阿克曼模型优化求解动力轮的转动速度,控制移动底盘进行移动,同时根据动力轮编码器的反馈,输出轮速里程计信息。
|
||||||
|
|
||||||
|
该节点结构如下:
|
||||||
|
|
||||||
|
<div align=left>
|
||||||
|
<img src="img/pm1_driver.png" width = 70% height = 70% />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
#### 2.2.1 订阅话题
|
||||||
|
|
||||||
|
/cmd_vel ([geometry_msgs/Twist](http://docs.ros.org/api/geometry_msgs/html/msg/Twist.html))
|
||||||
|
|
||||||
|
```
|
||||||
|
外部节点发送的速度信息
|
||||||
|
```
|
||||||
|
|
||||||
|
/canbus_msg ([autolabor_canbus_driver/CanBusMessage](doc/CanBusMessage.md))
|
||||||
|
|
||||||
|
```
|
||||||
|
由canbus_driver发送的底层CANBus消息,其中包含转向轮当前绝对编码器以及动力轮的编码器信息
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2.2.2 发布话题
|
||||||
|
|
||||||
|
/odom ([nav_msgs/Odometry](http://docs.ros.org/api/nav_msgs/html/msg/Odometry.html))
|
||||||
|
|
||||||
|
```
|
||||||
|
根据动力轮以及转向轮的编码器信息,依据车辆运动模型,计算出的轮速里程计信息
|
||||||
|
```
|
||||||
|
|
||||||
|
/wheel_angle ([std_msgs/Float64](http://docs.ros.org/api/std_msgs/html/msg/Float64.html))
|
||||||
|
|
||||||
|
```
|
||||||
|
前阿克曼转向轮实时绝对转角,单位rad
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2.2.3 服务
|
||||||
|
|
||||||
|
/reset_odom ([std_srvs::Empty](http://docs.ros.org/api/std_srvs/html/srv/Empty.html))
|
||||||
|
|
||||||
|
~~~
|
||||||
|
里程计清零,将里程计的原点放置在执行指令的位置
|
||||||
|
~~~
|
||||||
|
|
||||||
|
#### 2.2.4 参数
|
||||||
|
|
||||||
|
~odom_frame (str, default: odom)
|
||||||
|
|
||||||
|
```
|
||||||
|
里程计坐标系名称
|
||||||
|
```
|
||||||
|
|
||||||
|
~base_frame (str, default: base_link)
|
||||||
|
|
||||||
|
```
|
||||||
|
移动底盘坐标系名称
|
||||||
|
```
|
||||||
|
|
||||||
|
~poller_rate_hz (int, default: 20)
|
||||||
|
|
||||||
|
```
|
||||||
|
查询底盘参数的频率,单位 Hz
|
||||||
|
```
|
||||||
|
|
||||||
|
~publish_tf (bool, default: true)
|
||||||
|
|
||||||
|
```
|
||||||
|
设置是否发布odom->base_link的TF转换
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2.2.5 TF转换信息
|
||||||
|
|
||||||
|
odom -> base_link
|
||||||
|
|
||||||
|
```
|
||||||
|
提供车体坐标系与里程计坐标系间转换关系
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3 ROS使用说明
|
||||||
|
|
||||||
|
### 3.1 底盘连接
|
||||||
|
|
||||||
|
将M2的串口线插入笔记本电脑或工控机,打开底盘电源和急停开关
|
||||||
|
|
||||||
|
打开Terminal输入
|
||||||
|
|
||||||
|
```
|
||||||
|
ll /dev/ttyUSB*
|
||||||
|
```
|
||||||
|
查看是否有设备列表,如果没有设备,请检查底盘与电脑的连接情况,如果设备多于一个,请通过拔插其他传感器设备,确定底盘的对应的设备节点名,假设节点名为 /dev/ttyUSB0。
|
||||||
|
|
||||||
|
### 3.2 源码编译与执行
|
||||||
|
|
||||||
|
下载源码
|
||||||
|
|
||||||
|
```
|
||||||
|
mkdir ~/github_ws
|
||||||
|
cd ~/github_ws
|
||||||
|
git clone http://git.autolabor.com.cn/Autolabor/autolabor_m2_ros_driver.git
|
||||||
|
```
|
||||||
|
编译源码
|
||||||
|
|
||||||
|
```
|
||||||
|
cd autolabor_m2_ros_driver/
|
||||||
|
catkin_make
|
||||||
|
```
|
||||||
|
加载环境变量
|
||||||
|
|
||||||
|
```
|
||||||
|
source devel/setup.bash
|
||||||
|
```
|
||||||
|
修改launch文件参数
|
||||||
|
|
||||||
|
```
|
||||||
|
gedit src/autolabor_canbus_driver/launch/m2_driver.launch
|
||||||
|
```
|
||||||
|
定位
|
||||||
|
```
|
||||||
|
<param name="port_name" value="/dev/ttyUSB0" />
|
||||||
|
```
|
||||||
|
将value值改为之前查看的车底盘的设备节点名,修改后保存并关闭
|
||||||
|
|
||||||
|
执行launch文件
|
||||||
|
|
||||||
|
```
|
||||||
|
roslaunch autolabor_canbus_driver m2_driver.launch
|
||||||
|
```
|
||||||
|
如果成功执行到这一步,并且没有发现任何错误,则车底层驱动就已经启动完毕,这个时候只要启动相应的控制节点就可以控制车底盘行走了。
|
||||||
|
|
||||||
|
### 3.3 控制向前直线行走
|
||||||
|
|
||||||
|
打开一个terminal
|
||||||
|
|
||||||
|
执行 rostopic list 查看有无/cmd_vel 话题
|
||||||
|
|
||||||
|
如果有的话,执行:
|
||||||
|
|
||||||
|
```
|
||||||
|
rostopic pub -r 10 /cmd_vel geometry_msgs/Twist -- '[1.0,0.0,0.0]' '[0.0,0.0,0]'
|
||||||
|
```
|
||||||
|
|
||||||
|
此时车轮会开始转动,如果想要停止的话,必须在执行命令的terminal中执行Ctrl+C,停止发送。
|
|
@ -0,0 +1,23 @@
|
||||||
|
# AUTOLABOR PM1 底盘控制原理
|
||||||
|
|
||||||
|
Autolabor PM1机器人底盘采用动力转向驱动方式,车辆的前侧由两个动力单元组成,其给机器人地盘提供行进动力,后侧由一个转向单元组成,控制车辆的转向半径。动力转向相比与其他转向方式,其更具有大的优势:
|
||||||
|
|
||||||
|
| | 动力转向 | 两轮差速 | 四轮差速 | 舵机转向 |
|
||||||
|
| :--------: | :------: | :------: | :------: | :------: |
|
||||||
|
| 越障能力 | ★★ | ★ | ★★★ | ★★ |
|
||||||
|
| 控制精度 | ★★★ | ★★★ | ★★ | ★★★ |
|
||||||
|
| 能源利用率 | ★★★ | ★★★ | ★ | ★★★ |
|
||||||
|
| 灵活性 | ★★★ | ★★★ | ★★★ | ★ |
|
||||||
|
|
||||||
|
动力转向需要同时控制转向单元和动力单元的运动,在运动的过程中,这两部分还需要满足阿克曼模型的约束,所以对底盘的控制相对其他转向形式会稍微复杂一些,下文详细介绍一下如何控制动力转向底盘。
|
||||||
|
|
||||||
|
## 1 两轮差速
|
||||||
|
|
||||||
|
### 1.1 两轮差速介绍
|
||||||
|
|
||||||
|
动力转向模型可以由两轮差速模型推导而来,所以首先先介绍一下两轮差速模型,两轮差速顾名思义就是由两个轮提供动力实现前进以及转向。通常为了保证底盘的稳定性,装有若干偏心万向轮用于提供支撑。
|
||||||
|
|
||||||
|
万向轮如果选择过小,会导致整个机器人底盘的越障能力较弱,其只能用于平整的地面;万向轮过大,移动底盘在控制过程中会受到万向轮惯性的影响,影响控制精度。
|
||||||
|
|
||||||
|
|
||||||
|
|
Reference in New Issue