.vscode | ||
Core | ||
Drivers | ||
MDK-ARM | ||
Middlewares | ||
USB_DEVICE | ||
User | ||
.mxproject | ||
AUTO_CHASSIS.ioc | ||
readme.md |
25/R1底盘
4.11修改了navi循迹函数,增加了20,100双重码盘距离判断
4.12码盘低速正常高速串口丢失原因:码盘主板和编码器的接线外皮裸露互相短路
4.13测试了与nuc的通信,能发送能接收
4.15更改了舵轮运动学逆解算,现在能一边小陀螺一边走直线
4.16加上了sick接收
4.17更改了导航代码,能在目标点附近调整角度
4.24优化了代码,把所有的extern换成了消息队列,使代码更加规范,更改了代码栏,使得页面更加清晰
发现了一个很有意思的现象,我的calc_task和chassis_task里都从消息队列接收cmd的数据,但是两个如果同时接的话chassis会把calc里的接收给卡死掉。恶补了一下消息队列,发现发送的一个消息只能被一个接收者接收,
单次消费:默认情况下,当一个任务从消息队列获取(osMessageQueueGet
)一条消息后,这条消息会从队列中移除,其他任务无法再获取同一条消息。
先进先出(FIFO):消息按照发送顺序排队,最先发送的消息会被最先接收。
这也解释了为什么can_task中会发这么多条同样的can的消息队列,而不合并成一个can消息队列发送出去
4.28增加了sick的微分代码,但还出现sick数据跳变时微分数据更新不及时以及噪声问题
4.30改进了sick的微分代码,通过降低采样频率得以实现
5.1测试sick纠正底盘成功
5.5遥控器一键切换成功,更改了remote_control和cmd的代码使之更加规范
5.28历时5天把相机纠正yaw给搞出来了
6.14雷达sick校准代码改完了,发现了同一个数据不能创建两个消息队列发送给两个任务
6.16发现每次遥控器回正时6020会小幅度抖动是因为底盘保持模式的keepangle我一直给的是反馈值,改成jiesuan1后就好了
这个问题在接收频率为500hz时的处理方法,对雷达的数据进行滤波,效果非常显著
6.21bsp.pwm里加了个功能强大的蜂鸣器
6.23sick校准大致调好了,pid还得调,配合视觉那块也做好了
6.24后轮发烫已经烧坏3个6020了,很费解的一件事,6020明明有过热保护,而且之前40kg的时候后两个轮天天发烫都没有一个坏的,第一次减重到29kg后左后轮已经烧坏了两个6020了,其中第二个6020才用了3天。全车换完碳之后右后轮也在今天凌晨2点寄掉了。我们分析了一波原因,一个是重量分布不均匀,重量全压在一个轮子上,另一个就是本身场地是胶皮,轮子还是包胶轮,摩擦力太大了,而且debug里显示6020一瞬间的输出就达到了25000,电控这边已经无能为力了。我们最后想出的办法是给后两个轮贴透明胶带,以减小摩擦力,效果非常显著,今天跑了一天轮子最高温才40多。
6.25简单加了一个乐迪的上电保护,蜂鸣器完成
6.26两车通信,r1锁r2成功
6.27加了个防翻保护
7.4加了利用陀螺仪yaw来纠正只有vx,vy时的角度误差
7.5由于我5065用的是占空比控制,受电池电量电压影响大,所以这就是我之前调好一套pid之后过了一会电量下去之后就不好用了的原因,而换成转速控制的话因为启动速度太高不好控制,但今天通过邪修i给到20调了一套适用于半格电池到满电的pid
目前存在的问题:
1,5065发0时锁不死,没有阻尼感
2,锁框pid现场地面更滑,i和d都大了
3,运球赛篮球到达点位会左右晃动
校准方法:
1,sick跑同一直线上的两点,然后把值发给雷达,纠正雷达yaw
2,码盘sick全场定位
3,雷达扫描-----------目前方法
4,二维雷达1,低配版:+c板2,+三位雷达3,+码盘
之前不成熟的目标效果:
1,雷达精准定位篮筐,sick辅助雷达校准
2,相机动态调试时由于帧率太低导致车体震荡,但是静态调试时又比较呆,而且相机可能会在今年赛题比较受限
3,码盘+sick,我觉得码盘负责调整yaw为0,sick至少两个呈直角把模拟量与实际距离相拟合来得到自身距离进而实现全场定位
第二种是码盘和sick配合跑点,也是比较受限
赛场上运球赛r1打,码盘自动跑点,投篮赛r2打,正赛大部分都是r1持球,先用sick跑点校准并且运完球之后进入进攻区,在进攻区内找准时机锁框发射,实在不行传球。