|
本帖最后由 lixiang 于 2020-5-29 17:48 编辑
运动底盘是低速无人小车的重要组成部分,然而运动底盘不像IMU、摄像头这些通用部件,很难买到通用的底盘。市面上的底盘在尺寸结构和参数上差别很大,可以根据具体需求选取合适的底盘。
除此之外,底盘包含软硬件整套方案,不同底盘的实现方案也有很大差异。所以,本次不着重讨论底盘实现的算法和原理,而侧重于Nova-09和底盘之间的数据交互。
底盘提供里程计与运动控制,是低速无人小车SLAM建图和导航避障的基础。本次使用的底盘主要由电机控制板和带编码器的减速电机构成。电机控制板通过串口与Nova-09相连接,通过接收Nova-09下发的控制指令,利用PID算法对电机进行控制;同时,将单位采样时间内的编码脉冲累计值作为里程数据发送给Nova-09,Nova-09利用航迹推演算法求解出里程计信息。
通信协议
电机控制板与Nova-09之间采用串口通信。电机左、右轮期望转速被封装到串口的字符串中,作为控制命令发送给电机控制板;单位时间内采样到的电机编码脉冲累计值(等效为实际电机速度)作为里程数据,以同样的方式被封装到串口的字符串中发送给Nova-09。可以看出,控制命令与里程数据遵循一样的封装协议,协议具体形式如下:
数据帧由11个字节组成,如上表所示,从左到右依次定义为:
top[0],top[1]:帧头,固定取值ff ff;
enc1_sig:左轮速度符号位,速度为负时取0,否则取非0值;
enc1_val:左轮速度,依次是高、中、低位,三个字节;
enc2_sig:右轮速度符号位,速度为负时取0,否则取非0值;
enc2_val:右轮速度,依次是高、中、低位,三个字节;
checksum:前面所有字节累加求和取低8位;
使用底盘
底盘通过串口与Nova-09相连接,Nova-09中通过运行底盘控制ROS驱动,来实现读取串口的速度反馈,利用航迹推演算法计算得到里程计并发布到/odom这个主题;底盘控制ROS驱动订阅/cmd_vel主题的运动控制数据,并转换为速度控制指令通过串口发送给底盘。这样其它节点就可以通过发布/cmd_vel主题来对底盘进行控制,通过订阅/odom主题获取底盘的里程计。
将novacar这个驱动包拷贝到~/catkin_ws/src/中,编译后就可以使用了。novacar驱动包中含有两个ROS功能包novacar_bringup和novacar_description,驱动底盘、底盘PID整定、里程计标定这些功能包含在novacar_bringup中,底盘urdf模型包含在novacar_description中。底盘控制可配参数都放在novacar_bringup/launch/minimal.launch中。
- <launch>
- <node name="novacar_bringup_node" pkg="novacar_bringup" type="base_controller" output="screen">
- <!-- serial_com set-->
- <param name="com_port" value="/dev/novacar"/>
- <!-- motor param set -->
- <param name="speed_ratio" value="0.000084"/><!-- unit:m/encode -->
- <param name="wheel_distance" value="0.202"/><!-- unit:m -->
- <param name="encode_sampling_time" value="0.04"/><!-- unit:s -->
- <!-- velocity limit -->
- <param name="cmd_vel_linear_max" value="1.5"/><!-- unit:m/s -->
- <param name="cmd_vel_angular_max" value="2.0"/><!-- unit:rad/s -->
- <!-- other -->
- <param name="cmd_vel_topic" value="cmd_vel"/>
- <param name="odom_pub_topic" value="odom"/>
- <param name="wheel_left_speed_pub_topic" value="wheel_left_speed"/>
- <param name="wheel_right_speed_pub_topic" value="wheel_right_speed"/>
- <param name="odom_frame_id" value="odom"/>
- <param name="odom_child_frame_id" value="base_footprint"/>
- </node>
- </launch>
复制代码
驱动底盘
- roslaunch novacar_bringup minimal.launch
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|