7.2 KiB
Autolabor ROS 驱动模块
1. 介绍
Autolabor ROS驱动模块包括CANBus驱动和Autolabor CAN系列(PM1/M2) 底盘驱动,主要用于实现与Autolabor_CANbus模块的通信,并通过线速度和角速度来控制Autolabor CAN系列底盘的行驶。该模块提供了全面的底盘控制策略和状态反馈机制,使得底盘的操作既直观又高效。
特性
- CANBus数据获取和控制: 直接从CANBus网络获取数据并通过CAN指令控制车辆。能够获取动力轮和转向轮编码器的原始数值,并独立控制动力轮的转速及转向轮的绝对转向角度。
- 高级速度控制: 通过线速度和角速度直接控制移动底盘,无需单独控制后轮转向。这一特性简化了驱动操作并增强了操作的直观性。
- 实时位置信息: 提供实时的机器人底盘位置信息,便于进行闭环控制,确保导航和定位的精确性。
- 电子差速控制: 采用双动力轮电子差速控制,保证机器人在行驶过程中始终满足阿克曼原理,从而提高行驶稳定性和精度。
- 运动优化: 根据后轮转向动态优化车辆的运动速度,确保在维持行驶精度的前提下,提升车辆行驶的流畅性。
- 驻车和急停控制: 驱动包括了高级的驻车和急停特性,能够在紧急情况下快速响应,立即停车,保障操作安全。
- 电量反馈和状态监控: 驱动能够实时监控底盘的电量状态,并反馈至ROS系统,同时持续监控底盘各部件的状态,及时报告任何异常情况,确保系统的可靠运行。
2. 编译与安装
2.1 引入ROS环境变量
在启动ROS相关程序前,确保ROS环境变量已经正确配置。在终端执行以下命令以导入环境变量:
source /opt/ros/noetic/setup.bash
2.2 添加串口权限或配置udev规则
为确保程序可以正常访问底盘的串口,需要给予相应的权限。可以通过以下命令临时赋予权限:
sudo chmod 666 /dev/ttyUSB0
或者设置udev规则,为串口设定固定的设备名称,详情参见Autolabor官方文档。
2.3 修改launch文件
在启动底盘前,需要在launch文件中指定正确的串口地址。编辑m2keyboard.launch
文件,确保port_name
的值反映了当前设备的串口地址:
<param name="port_name" value="/dev/ttyUSB0" />
2.4 启动launch
编译并加载ROS工作环境后,使用以下命令启动底盘:
roslaunch autolabor_canbus_driver m2keyboard.launch
确保在图形界面的终端运行以避免X11Server相关的错误。
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
): 这个服务端点用于查询或设置底盘的参数。如果参数已经设置,则返回当前参数;如果未设置,则返回失败。这使得用户可以动态地调整底盘配置,以适应不同的工作条件和需求。