diff --git a/.DS_Store b/.DS_Store
index 44b772d..2ea5890 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/car/.DS_Store b/car/.DS_Store
index c8cba2f..08fc43d 100644
Binary files a/car/.DS_Store and b/car/.DS_Store differ
diff --git a/car/ChassisM2.md b/car/ChassisM2.md
index 3238def..1bba479 100644
--- a/car/ChassisM2.md
+++ b/car/ChassisM2.md
@@ -1,23 +1,26 @@
-# Autolabor M2 ROS 驱动模块
+# Autolabor ROS 驱动模块
## 1. 介绍
-Autolabor ROS驱动模块包含**CANBus驱动**和**Autolabor M2底盘驱动**,其主要功能包括与Autolabor_CANbus模块通信,并通过线速度和角速度控制Autolabor M2底盘行驶。
+Autolabor ROS驱动模块包含**CANBus驱动**和**Autolabor CAN系列(PM1/M2) 底盘驱动**,其主要功能包括与Autolabor_CANbus模块通信,并通过线速度和角速度控制Autolabor Can系列底盘行驶。
#### 特性
- 可直接获取CANBus网络内数据,并通过CAN指令控制车辆
- - 获取动力轮编码器原始数值(角速度)
- - 获取转向轮编码器原始数值(角速度)
- - 分别控制动力轮的转速(角速度)
+ - 获取动力轮编码器原始数值
+ - 获取转向轮编码器原始数值
+ - 分别控制动力轮的转速
- 控制转向轮的绝对转向角度
-- 可通过线速度与角速度控制移动底盘,无需单独控制前轮转向
+- 可通过线速度与角速度控制移动底盘,无需单独控制后轮转向
- 提供实时机器人底盘位置信息,方便闭环控制
- 双动力轮电子差速控制,保证机器人在行驶过程中始终满足阿克曼原理
-- 根据前轮转向优化车辆运动速度,在保证车辆在行驶精度前提下,确保车辆行驶的流畅性
+- 根据后轮转向优化车辆运动速度,在保证车辆在行驶精度前提下,确保车辆行驶的流畅性
## 2. 节点
+大多数情况下,不需要修改驱动参数,只配置底盘所链接的串口即可,可直接按照 章节 3 ROS 使用说明即可
+
### 2.1 canbus_driver
+
该节点提供与底层AutoCan的通讯,将CAN网络中的数据进行解析并发布至canbus_msg话题中,并开启canbus_server服务,提供其他节点调用,用以发送CAN指令到CAN网络中。
该节点的结构如图所示:
@@ -30,13 +33,13 @@ Autolabor ROS驱动模块包含**CANBus驱动**和**Autolabor M2底盘驱动**
无
#### 2.1.2 发布话题
-/canbus_msg ([autolabor_canbus_driver/CanBusMessage](doc/CanBusMessage.md))
+/canbus_msg ([autolabor_canbus_driver/CanBusMessage](doc/CanBusMessage))
~~~
将底层CAN网络中的数据发布在ROS话题中,提供其他节点读取
~~~
#### 2.1.3 服务
-/canbus_server ([autolabor_canbus_driver/CanBusService](doc/CanBusService.md))
+/canbus_server ([autolabor_canbus_driver/CanBusService](doc/CanBusService))
~~~
提供其他节点调用,用于往底层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消息,其中包含转向轮当前绝对编码器以及动力轮的编码器信息
@@ -93,7 +96,7 @@ CANBus串口波特率
/wheel_angle ([std_msgs/Float64](http://docs.ros.org/api/std_msgs/html/msg/Float64.html))
```
-前阿克曼转向轮实时绝对转角,单位rad
+转向轮实时绝对转角,单位rad
```
#### 2.2.3 服务
@@ -104,6 +107,8 @@ CANBus串口波特率
里程计清零,将里程计的原点放置在执行指令的位置
~~~
+
+
#### 2.2.4 参数
~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)
@@ -142,7 +219,7 @@ odom -> base_link
### 3.1 底盘连接
-将M2的串口线插入笔记本电脑或工控机,打开底盘电源和急停开关
+将PM1的串口线插入笔记本电脑或工控机,打开底盘电源和急停开关
打开Terminal输入
@@ -153,52 +230,103 @@ ll /dev/ttyUSB*
### 3.2 源码编译与执行
-下载源码
+获取源码
-```
-mkdir ~/github_ws
-cd ~/github_ws
-git clone http://git.autolabor.com.cn/Autolabor/autolabor_m2_ros_driver.git
-```
-编译源码
+联系商务人员获得底盘源代码
-```
-cd m2_driver_ros/
-catkin_make
-```
-加载环境变量
-```
-source devel/setup.bash
-```
-修改launch文件参数
+安装编译工具
```
-gedit src/autolabor_canbus_driver/launch/m2_driver.launch
-```
-定位
-```
-
-```
-将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]'
+sudo apt-get install python3-catkin-tools
```
-此时车轮会开始转动,如果想要停止的话,必须在执行命令的terminal中执行Ctrl+C,停止发送。
\ No newline at end of file
+引入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. (接上问)“ 我就想换台计算机,然后把设备用起来,那我该怎么办?”
+
+
+
+确保您的串口已经增加了当前用户的操作权限,可通过以下命令实现。
+
+
+
+```
+sudo chmod 666 /dev/ttyUSB0
+```
+
+
+
+```
+