From 5c4d0e7747b146da568b6dc5337ac05da2822fa4 Mon Sep 17 00:00:00 2001 From: Yodel <3114680004@qq.com> Date: Sun, 25 May 2025 20:13:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.md | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 readme.md diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..80d4cfd --- /dev/null +++ b/readme.md @@ -0,0 +1,62 @@ +## 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的代码使之更加规范 + + + + + +目前存在的问题: + +1,配合相机纠正yaw + +2,加前馈pid来改进后轮压力不平衡导致电流过大6020发烫的问题 + +3,改进遥控器控制时6020会小幅度动的问题 + +4,锁死时5065能动,改进一下让5065锁死 + +5,加快导航速度 + +6,加一个防翻虚拟云台 + + + +经证实,后轮压力不平衡导致后轮6020锁死时转不到目标角度导致电流过大引起6020发烫,因为双环pid的out在动的瞬间已经达到最大值25000,但6020转不动,电控已经无能为力了。 + +目标效果: + +1,最理想的情况,视觉相机测量距离以及偏角,距离发送给上层进行速度拟合,偏角发给底盘进行码盘纠正yaw,使得发射朝向篮筐,这样底盘只需要nuc和码盘,不需要sick,并且可以不拘泥于跑点 + +2,更理想的情况,相机不发送偏角而发送像素点,像素点作为vw进行对准,这样码盘和sick都不需要 + +3,跑点,码盘跑到目标点后sick微调位置并且纠正码盘数据(码盘的yaw还是准的,x,y随时间会有误差)(码盘的pos_x,pos_y加个offest,初始为0,矫正之后给个offest随时校准位置)(最好有一个按键能随时切换码盘校准和sick校准,目标位置为当前位置,角度为0这样) +