diff --git a/car/ChassisM2.md b/car/ChassisM2.md
index 491bf5e..797a5bc 100644
--- a/car/ChassisM2.md
+++ b/car/ChassisM2.md
@@ -1,345 +1,117 @@
# Autolabor ROS 驱动模块
-## 1. 介绍
-Autolabor ROS驱动模块包含**CANBus驱动**和**Autolabor CAN系列(PM1/M2) 底盘驱动**,其主要功能包括与Autolabor_CANbus模块通信,并通过线速度和角速度控制Autolabor Can系列底盘行驶。
+## 1. 介绍
-#### 特性
+Autolabor ROS驱动模块包括**CANBus驱动**和**Autolabor CAN系列(PM1/M2) 底盘驱动**,主要用于实现与Autolabor_CANbus模块的通信,并通过线速度和角速度来控制Autolabor CAN系列底盘的行驶。该模块提供了全面的底盘控制策略和状态反馈机制,使得底盘的操作既直观又高效。
-- 可直接获取CANBus网络内数据,并通过CAN指令控制车辆
- - 获取动力轮编码器原始数值
- - 获取转向轮编码器原始数值
- - 分别控制动力轮的转速
- - 控制转向轮的绝对转向角度
-- 可通过线速度与角速度控制移动底盘,无需单独控制后轮转向
-- 提供实时机器人底盘位置信息,方便闭环控制
-- 双动力轮电子差速控制,保证机器人在行驶过程中始终满足阿克曼原理
-- 根据后轮转向优化车辆运动速度,在保证车辆在行驶精度前提下,确保车辆行驶的流畅性
+### 特性
-## 2. 节点
+- **CANBus数据获取和控制**: 直接从CANBus网络获取数据并通过CAN指令控制车辆。能够获取动力轮和转向轮编码器的原始数值,并独立控制动力轮的转速及转向轮的绝对转向角度。
+- **高级速度控制**: 通过线速度和角速度直接控制移动底盘,无需单独控制后轮转向。这一特性简化了驱动操作并增强了操作的直观性。
+- **实时位置信息**: 提供实时的机器人底盘位置信息,便于进行闭环控制,确保导航和定位的精确性。
+- **电子差速控制**: 采用双动力轮电子差速控制,保证机器人在行驶过程中始终满足阿克曼原理,从而提高行驶稳定性和精度。
+- **运动优化**: 根据后轮转向动态优化车辆的运动速度,确保在维持行驶精度的前提下,提升车辆行驶的流畅性。
+- **驻车和急停控制**: 驱动包括了高级的驻车和急停特性,能够在紧急情况下快速响应,立即停车,保障操作安全。
+- **电量反馈和状态监控**: 驱动能够实时监控底盘的电量状态,并反馈至ROS系统,同时持续监控底盘各部件的状态,及时报告任何异常情况,确保系统的可靠运行。
-大多数情况下,不需要修改驱动参数,只配置底盘所链接的串口即可,可直接按照 章节 3 ROS 使用说明即可
+## 2. 编译与安装
-### 2.1 canbus_driver
-
-该节点提供与底层AutoCan的通讯,将CAN网络中的数据进行解析并发布至canbus_msg话题中,并开启canbus_server服务,提供其他节点调用,用以发送CAN指令到CAN网络中。
-
-该节点的结构如图所示:
-
-
-
-
-#### 2.1.1 订阅话题
-
-无
-
-#### 2.1.2 发布话题
-/canbus_msg ([autolabor_canbus_driver/CanBusMessage](doc/CanBusMessage))
-~~~
-将底层CAN网络中的数据发布在ROS话题中,提供其他节点读取
-~~~
-
-#### 2.1.3 服务
-/canbus_server ([autolabor_canbus_driver/CanBusService](doc/CanBusService))
-~~~
-提供其他节点调用,用于往底层CAN网络中发布指令
-~~~
-
-#### 2.1.4 参数
-~port_name (str, default: /dev/ttyUSB0)
-
-~~~
-CANBus串口端口名
-~~~
-
-~baud_rate (int, default: 115200)
-~~~
-CANBus串口波特率
-~~~
-
-~parse_rate (int, default: 100)
-~~~
-数据解析器从串口获取新数据的频率
-~~~
-
-### 2.2 M2底盘驱动
-
-此节点主要用于接收用户发送的速度信息,控制转向轮转动,并根据后轮当前角度结合阿克曼模型优化求解动力轮的转动速度,控制移动底盘进行移动,同时根据动力轮编码器的反馈,输出轮速里程计信息。
-
-该节点结构如下:
-
-
-
-
-
-#### 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))
-
-```
-由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
-```
-
-/left_wheel_vel ([std_msgs/Float64](http://docs.ros.org/api/std_msgs/html/msg/Float64.html))
-
-```
-左轮转速,单位m/s。如果需要获得编码器读取的原始转速,只需要将轮速除以车轮半径0.16m即可。
-```
-
-/right_wheel_vel ([std_msgs/Float64](http://docs.ros.org/api/std_msgs/html/msg/Float64.html))
-
-```
-右轮转速,单位m/s。如果需要获得编码器读取的原始转速,只需要将轮速除以车轮半径0.16m即可。
-```
-
-
-#### 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)
-
-```
-移动底盘坐标系名称
-```
-
-~ecu_left_id (int, default: 0)
-
-```
-左侧动力单元的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)
-
-```
-设置是否发布odom->base_link的TF转换
-```
-
-#### 2.2.5 TF转换信息
-
-odom -> base_link
-
-```
-提供车体坐标系与里程计坐标系间转换关系
-```
-
-## 3 ROS使用说明
-
-### 3.1 底盘连接
-
-将M2的串口线插入笔记本电脑或工控机,打开底盘电源和急停开关
-
-打开Terminal输入
-
-```
-ll /dev/ttyUSB*
-```
-查看是否有设备列表,如果没有设备,请检查底盘与电脑的连接情况,如果设备多于一个,请通过拔插其他传感器设备,确定底盘的对应的设备节点名,假设节点名为 /dev/ttyUSB0。
-
-### 3.2 源码编译与执行
-
-获取源码
-
-联系商务人员获得底盘源代码
-
-
-
-安装编译工具
-```
-sudo apt-get install python3-catkin-tools
-```
-
-引入ROS环境变量
-```
+### 2.1 引入ROS环境变量
+在启动ROS相关程序前,确保ROS环境变量已经正确配置。在终端执行以下命令以导入环境变量:
+```bash
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. (接上问)“ 我就想换台计算机,然后把设备用起来,那我该怎么办?”
-
-
-
-确保您的串口已经增加了当前用户的操作权限,可通过以下命令实现。
-
-
-
-```
+### 2.2 添加串口权限或配置udev规则
+为确保程序可以正常访问底盘的串口,需要给予相应的权限。可以通过以下命令临时赋予权限:
+```bash
sudo chmod 666 /dev/ttyUSB0
```
+或者设置udev规则,为串口设定固定的设备名称,详情参见[Autolabor官方文档](http://www.autolabor.com.cn/usedoc/navigationKit2/common/q_a/doc1#1)。
-
-
-```
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+### 2.3 修改launch文件
+在启动底盘前,需要在launch文件中指定正确的串口地址。编辑`m2keyboard.launch`文件,确保`port_name`的值反映了当前设备的串口地址:
+```xml
+
```
-
-
-cd ~/catkin_ws/src
-
-
-编译源代码
-```
-catkin build
-```
-
-引入环境变量
-
-```
-source ~/catkin_ws/devel/setup.bash
-```
-
-启动底盘键盘控制
-
-注意需要在桌面环境下的控制台运行,远程 SSH 没有桌面环境会因无法找到 X11Server 报错
-
-```
+### 2.4 启动launch
+编译并加载ROS工作环境后,使用以下命令启动底盘:
+```bash
roslaunch autolabor_canbus_driver m2keyboard.launch
+```
+确保在图形界面的终端运行以避免X11Server相关的错误。
-```
\ No newline at end of file
+
+## 3. 节点使用详细信息
+
+### 3.1 启动launch
+完成配置后,通过`roslaunch`命令启动底盘控制程序。这将激活包括底盘驱动、键盘控制以及其他必要节点。确保在图形用户界面的终端中运行此命令,以避免遇到X11Server相关的错误。
+
+### 3.2 控制运动
+
+#### a. 键盘控制
+运行键盘控制节点后,使用键盘上的指令控制底盘前进、后退、左转和右转。观察RViz中的`base_link`是否根据指令正确移动。此外,监测各轮的运动是否平滑且响应及时。
+
+#### b. cmd_vel vs ackerman_vel
+- **`cmd_vel`(标准速度控制)**:
+ 使用`geometry_msgs/Twist`消息类型发送线速度和角速度指令,控制底盘的整体移动方向和速度。
+
+- **`ackerman_vel`(阿克曼转向速度控制)**:
+ 除了标准的线速度和角速度外,额外控制前轮的转角,适用于需要精确转向控制的场景。
+
+### 3.3 使用rqt_gui工具发送指令和服务
+
+#### a. 发送控制指令
+通过`rqt_gui`发送以下指令:
+- **紧急停车** (`/emergency_stop`): 立即停止底盘运动。
+- **刹车** (`/brake_set`): 控制底盘的刹车系统。
+- **里程计清零** (`/reset_odom`): 重置底盘的里程计数据。
+- **转向中心对齐** (`/steer_center_bias`): 调整转向轮的中心位置。
+
+#### b. 调用服务节点
+- **查询底盘参数** (`/chassis_parameter`): 获取或设置底盘的配置参数,如轮间距、轮直径等。
+
+#### c. 绘图监听
+使用rqt的绘图功能来实时监控和分析以下数据:
+- **前轮转角** (`/wheel_angle`): 显示实时转向角度。
+- **左右轮速度** (`/left_wheel_vel`, `/right_wheel_vel`): 监控各动力轮的速度。
+
+#### d. 话题查看
+关注以下话题以获取底盘状态和电量信息:
+- **车辆状态** (`/chassis_info`): 提供底盘的详细状态,如电量、温度等。
+- **电量信息** (`/chassis_monitor`): 监测底盘的电池电量和健康状态。
+
+### 3.4 参数说明
+在底盘驱动的配置中,可以通过设置以下参数来定制驱动的行为和性能:
+
+- **`odom_frame`**: 用于发布里程计信息的坐标系名称,默认为`"odom"`。这是底盘位置信息的参考坐标系。
+- **`base_frame`**: 底盘的基础坐标系名称,默认为`"base_link"`。这是底盘上各个组件和传感器的相对参考点。
+- **`poller_rate_hz`**: 设置查询CAN总线信息的频率,单位是赫兹(Hz),默认为1Hz。这影响电量及状态数据更新的实时性。
+- **`publish_tf`**: 是否发布TF变换数据,布尔值,用于控制是否在ROS网络中发布从`odom`到`base_link`的转换,默认关闭。
+
+### 3.5 话题订阅与发布
+#### 订阅话题
+底盘驱动节点订阅以下话题,以接收外部控制命令和系统指令:
+
+- **`/cmd_vel`** (`geometry_msgs/Twist`): 接收标凈的速度指令,控制底盘的线速度和角速度。
+- **`/ackerman_vel`** (`geometry_msgs/Twist`): 接收针对阿克曼转向系统的速度和转向角度指令。
+- **`/steer_center_bias`** (`std_msgs/Float64`): 接收用于调整转向中心的偏置值,用于微调转向准确性。
+- **`/brake_set`** (`std_msgs/Bool`): 接收制动指令,用于控制底盘的停止和启动。
+- **`/reset_odom`** (`std_msgs/Empty`): 接收里程计重置指令,用于归零里程计数据。
+- **`/emergency_stop`** (`std_msgs/Bool`): 接收紧急停车指令,用于立即停止所有底盘运动。
+
+#### 发布话题
+底盘驱动节点发布以下话题,提供底盘的状态信息和运动反馈:
+
+- **`/odom`** (`nav_msgs/Odometry`): 发布底盘的里程计信息,包括位置和速度。
+- **`/chassis_info`** (`autolabor_canbus_driver/ChassisStatusInfo`): 发布底盘的状态信息,如电量、温度等。
+- **`/chassis_monitor`** (`autolabor_canbus_driver/ChassisMonitorInfo`): 发布底盘的监控信息,提供实时的健康状况和性能数据。
+- **`/wheel_angle`** (`std_msgs/Float64`): 发布当前前轮的转角,单位为弧度。
+- **`/left_wheel_vel`** (`std_msgs/Float64`): 发布左轮的速度,单位为米/秒。
+- **`/right_wheel_vel`** (`std_msgs/Float64`): 发布右轮的速度,单位为米/秒。
+
+### 3.6 服务节点
+底盘驱动提供以下ROS服务以支持参数查询和配置:
+
+- **`/chassis_parameter`** (`autolabor_canbus_driver/ChassisParameterServer`): 这个服务端点用于查询或设置底盘的参数。如果参数已经设置,则返回当前参数;如果未设置,则返回失败。这使得用户可以动态地调整底盘配置,以适应不同的工作条件和需求。
\ No newline at end of file