主要介绍怎么通过配置yaml参数文件对控制器的参数进行修改
参数解析:
车型参数配置在starrobot/starrobot_bringup/param/robot中,只需要根据实际的需求进行修改即可。
LoadRosParam:通过ROS加载控制器参数
robot_base:(机器人车型配置参数,可以选填d2、d4、t2、t4、o3、o4、m4、a1、a2),根据自己的实际车型进行修改
imu_type:(机器人使用的IMU配置参数,可以选GY85、MPU6050、MPU9250_N、MPU9250_W、MPU6500_N、MPU6500_W),MPU6050_N是板载的IMU使用的参数。IMU外接口可以接GY85、MPU6050、MPU9250、MPU6500,其中外接口使用MPU9250或者MPU6500对应的参数是MPU9250_W、MPU6500_W。
starrobot_motor_drive:机器人使用的电机驱动配置参数,可以选择(A4950、BTN79xx 、ESC、ESC_ENCODER),驱动板板载的驱动是A4950、大功率驱动板是BTN79xx、如果使用电调作为驱动器,并且没有编码器,那么应该是ESC、如果使用电调作为驱动器,带有编码器,那么应该是ESC_ENCODER。
ROS_SIO:控制器与ROS通信端口
motor_debug:控制器电机调试标志位试标志位,可以填(1/0),这个标志位主要用于第一次搭建机器人,因为首次搭建不能确定电机的转动方向和编码器的计算方向是否正确,如果这两个是不正确的情况下使用PID调节则会出现电机无法停止的情况,因此第一次搭建机器人时我们需要把这个标志位赋值为1(不使用PID),具体的过程参考第九章,调试完电机转动方向和编码器计数方向后把这个标志位赋值为0(使用PID),重启一下底层控制板即可。
control_mode:控制模式1是点动,收到一次指令运行一段时间 0是持续运行,保持上时刻收到的指令运行。
initial_turning_angle:舵机转向车型初始角度设置(A1/A2)车型设置有效
max_steering_angle:舵机转向车型转向舵机最大转向角度设置(A1/A2)车型设置有效
esc_median_value:电调中位值设置,针对电机是电调驱动用户设置有效
pwm_psc:PWM分频值 pwm_arr:PWM计数值
pwm_max:PWM最大值,它应该小于等于PWM计数值
mxk_p:电机PID Kp值 mxk_i:电机PID Ki值 mxk_d:电机PID Kd值
max_rpm:电机最大RPM
counts_per_rev:(float类型)电机输出轴转一圈编码器计数值 = 电机减速比*编码器分辨率*4
wheel_diameter:轮子直径
robot_radius:车子旋转半径,全向车型(M4,O4,O3)设置有效
lr_wheels_distance:车子宽度,左右轮子中心距离
fr_wheels_distance:车子长度,前后轮子中心距离
mxDir:电机转动方向标志位(1/-1) exDir:编码器计数方向标志位(1/-1)
low_battery_wang:电池低压报警使能标志位
EnabledInfoShow:电机调试信息显示标志位
EnabledWs2812:Ws2812灯使能标志位
EnabledOled:OLED显示标志位
sonar_x:超声波使能标志位
servo_x:舵机使能标志位
raw_vel_frequency:电机数据上报发布频率
raw_imu_frequency:IMU数据上报发布频率
raw_bat_frequency:控制器模拟数据采集发布频率
raw_sonar_frequency:超声波数据发布频率
操作步骤:
控制器,默认是使用控制器顶部的USB-TTL(STM32/AT32-UART1)口进行通信,所以大家需要把安卓数据线把顶部的底部miniusb口和Window PC进行连接。
在搭建完硬件和烧写固件后,前置的准备工作就已经完成了,假设你的开发环境和相关的设备别名都已经弄好后,你应该在starrobot_ws/src/starrobot/starrobot_bringup/param/robot里面的车型参数配置robot_type.yaml文件中,把LoadRosParam 赋值为“1”、debug_base赋值为“1”(小车那端),然后启动小车,
- [starrobot] 运行底盘通信节点
- roslaunch starrobot_bringup minimal.launch
- [Remote PC] 运行键盘控制指令
- rosrun teleop_twist_keyboard teleop_twist_keyboard.py
运行底盘通信节点如果出现下面的错误,那么你应该使用
- ls /dev
查看是否识别到starrobotbase,如果设备别名没有弄成功可以使用
- rosed starrobot_bringup minimal.launch
打开文件,把starrobotbase,修改为ttyUSBx(x是底盘设备如0、1),第一次搭建一定要注意看调试状态标志位是否正确,车型是否正确,如果你的是d2车,那么它应该是下面这样的。
启动键盘控制后会出现下面所示,按正常操作它应该是你按“i”键的时候,电机才会转动,不按的时候电机应该是静止的。
下图是我按下“i”键的时候,电机转动了一小会编码器的值,在实际中,我发现电机的转向都是向前的,所以电机转向时没有问题的,但是编码器的计数值却有一个是负的,这说明了编码器部分是没有正确,因此我们只需要修改电机2的标志位即可;如果在你的机器人实际操作中发现按“i”键发现电机的转动方向是不正确的,修改电机转动方向的标志位(mxDir),然后保存,关掉节点,重启STM32控制器,然后再重新启动底盘节点和键盘控制节点继续进行编码器计数方向的调试,最终的情况应该是你按“i”键,电机往前转,编码器的计数值也应该都是正值(或者都应该是往上增加的),切记在修改了标志位候应该关掉节点,重启STM32控制器,然后再重新启动底盘节点和键盘控制节点,这样修改的标志位才会起作用。
在你确认电机转动方向和编码器计数方向都正确后,你应该把~/starrobot_bringup/param/robot里面的车型参数配置robot_type.yaml文件中,LoadRosParam 赋值为“0”、motor_debug赋值为“0”(小车那端),保存后关掉节点,对控制器继续宁复位(节点方式:rostopic pub /handleParam std_msgs/Int8 "data: 8" 硬件方式:按下底层控制板的复位键),先关闭底盘节点后再重新启动底盘节点和键盘控制节点。再次使用键盘控制,看小车电机运行是否正常,正常情况下,应该是你按键盘的时候,电机才会动,不按的时候他应该是静止的。
查看电机调试信息,在电机调试模式motor_debug:1或者使能电机调试数据显示info_show节点才会显示电机调试数据使能电机调试数据显示指令:
- rostopic pub /handleParam std_msgs/Int8 "data: 3"
查看电机调试数据指令:
- rostopic echo /info_show
不依赖底盘节点,单独启动底盘复位节点指令如下:
- rosrun starrobot_bringup starrobot_reboot
修改底盘相关标志位参数你应该使用:
- rosed starrobot_bringup robot_type.yaml