STM32三轮全向底盘

最近在实验室培训,玩过麦克纳姆四轮底盘后,玩三轮全向底盘也有一段时间了,于是来分享一下自己的心得。

附图
这是去年参加robocon的底盘,三个大疆3508电机,一个全场定位模块,一个实验室焊的遥控器[^1]: (怕出问题所以没用DEVO10)。

1.底盘公式

三轮全向底盘论坛上已经有很多的前辈写了很多好的文章,自己就不再重复论述了。

附上一篇前辈的博文:https://blog.csdn.net/qq_40696002/article/details/107856908

同样附上视频链接:https://v.youku.com/v_show/id_XMjY2NTIxMjUyNA==.html?qq-pf-to=pcqq.c2c

链接的视频我个人觉得是非常好的,我当初看很多博客都看不懂,是看了这个视频才懂的。

关于三轮底盘的功能,特殊性在上视频中都有详细的阐述,唯一注意的是电机的序号。

2.程序实现手动模式

1.总体思路:遥控拨杆发送底盘整体的速度——通过底盘公式分解出个个电机的速度——各电机的速度通过PID计算发送各电机。
2.遥控器部分:通过CAN发送拨杆的通道值各底盘公式。

#define  w1                 (3.14159f/3.0f)               /*60度弧度*/
#define  w2                 (IMU.REAL.A*3.1415926f/180.0f)/*全场定位输出弧度*/ for (motor_num=1;motor_num<4;motor_num++) //清除程序之前的PID参数{PID_SPEED[motor_num].I_OUT = 0;PID_SPEED[motor_num].OUT = 0;}speed[1]   = (-my_cos(w1 + w2)*RC.CH3*1.5f + my_sin(w1 + w2)*RC.CH4*2.5f - RC.CH1 )*2.0f; //*1***********2*/speed[2]   = (-my_cos(w1 - w2)*RC.CH3*1.5f - my_sin(w1 - w2)*RC.CH4*2.5f - RC.CH1 )*2.0f;speed[3]   = (+my_cos(w2     )*RC.CH3*1.5f - my_sin(w2     )*RC.CH4*2.5f - RC.CH1 )*2.0f;       //3}

如没有传感器计算角度,则 w2 = 0。

3.PID计算电机速度

  p[1] = 3.4;       // leftp[2] = 3.2; //rightp[3] = 10;  //behindPID_Cal( &PID_SPEED[1], MOTOR_FEEDBACK[1].speed_rpm, speed[1], p[1], 5000);PID_Cal( &PID_SPEED[2], MOTOR_FEEDBACK[2].speed_rpm, speed[2], p[2], 5000);PID_Cal( &PID_SPEED[3], MOTOR_FEEDBACK[3].speed_rpm, speed[3], p[3], 9000); //3号速度>1号2号Motor_Set_Current(PID_SPEED[1].OUT,PID_SPEED[2].OUT,PID_SPEED[3].OUT,0);

p[ ] 是PID的比例系数,我自己微调了一下P目的是让电机跑的更直。
关于大疆电机的使用方法可以看我之前的博客。

3.程序实现自动模式

1.总体思路:位置式PID通过距离先计算出底盘整体的移动速度——通过底盘公式分解出个个电机的速度——各电机的速度通过PID计算发送各电机。

  1. 位置式PID计算底盘的移动速度
    关于位置式PID的程序在论坛上同样有很多,我自己弄的也不是明明白白,就不献丑了。
void MOVE_SET(float goal_X,float goal_Y,float goal_A,unsigned short int mode) //(x,y,angle.mode)
{i = mode;MOVE.GOAL_A = goal_A;MOVE.GOAL_Y = goal_Y;MOVE.GOAL_X = goal_X;
}
MOVE_SET(0,8000,0,0); //通过自己写的MOVE——SET程序发送坐标给全场定位。if(MOVE.Mode==0)//Y是主轴,X是辅助轴:X,Y都是位置式PID; 在通过位置PID计算出底盘在X.Y轴的速度
{MOVE.VX = PID_Cal(&VXPID,X_LONG,MOVE.GOAL_X,3,3000);//4,2000MOVE.VY = PID_Cal(&VYPID,Y_LONG,MOVE.GOAL_Y,3,5000);//(8.2000)MOVE.VZ = PID_Cal(&VAPID,IMU.REAL.A,MOVE.GOAL_A,65,1500);//110,2500
}

3.底盘公式计算电机速度

speed[1]   = ( my_cos((60+IMU.REAL.A)*Angle_To_Rad)*MOVE.VX + my_sin((60+IMU.REAL.A)*Angle_To_Rad)*MOVE.VY - MOVE.VZ );speed[2]   = ( my_cos((60-IMU.REAL.A)*Angle_To_Rad)*MOVE.VX - my_sin((60-IMU.REAL.A)*Angle_To_Rad)*MOVE.VY - MOVE.VZ );speed[3]   = (-my_cos(    IMU.REAL.A *Angle_To_Rad)*MOVE.VX - my_sin(    IMU.REAL.A *Angle_To_Rad)*MOVE.VY - MOVE.VZ );

4.PID速度环计算各电机速度

 V_Limit();      /* 限  速 */p[1] = 3.4;      // leftp[2] = 3.2; //rightp[3] = 10;  //behindPID_Cal( &PID_SPEED[1], MOTOR_FEEDBACK[1].speed_rpm, speed[1], p[1], 5000);PID_Cal( &PID_SPEED[2], MOTOR_FEEDBACK[2].speed_rpm, speed[2], p[2], 5000);PID_Cal( &PID_SPEED[3], MOTOR_FEEDBACK[3].speed_rpm, speed[3], p[3], 9000); //3号速度>1号2号Motor_Set_Current(PID_SPEED[1].OUT,PID_SPEED[2].OUT,PID_SPEED[3].OUT,0);

4.底盘自动跑点

1.思路:通过位置式PID定坐标,再通过全场定位模块反馈底盘实际坐标来实现自动跑点。

if(step == 1){MOVE_SET(0,8000,0,0);//      MOVE_SET(Profile_SET(R0.X0,0),R1.Y0,0,2);       //跑曲线       if(Y_LONG >= 7975){step = 2;}}else if( step == 2){       MOVE_SET(-4000,8000,0,10);if( X_LONG <= -3950){step = 3;}}

上文若有所错误,敬请指出,共同学习,共同进步。
ps:感谢实验室的学长

STM32三轮全向底盘相关推荐

  1. 三轮全向底盘小车制作 STM32主控 串口无线遥控器

    使用3D打印材料制作全向轮 STM32作为主控使用HAL库 制作简单手柄并使用串口无线模块和主控进行通信 主要是第一次见到三轮全向底盘,进行全向移动对他的算法什么很感兴趣,如果能自己制作一辆全向轮底盘 ...

  2. 三轮全向底盘实现绘图功能

    1. 功能说明 本文示例将实现R313a样机三轮全向底盘绘图(三角形.矩形.三叶草.正弦曲线)的功能.三轮全向底盘绘制图形有两种模式:第一种是自主选择模式(即通过按下开关进行模式的选项):第二种是上位 ...

  3. 三轮全向底盘实现SLAM导航功能

    1. 功能说明 本文我们将利用键盘控制三轮全向底盘(R313b)小车运动完成slam建图,并能在已建好的地图里进行自主导航.slam导航可以拆分为三步: 第一步:能用键盘控制底盘的运动: 第二步:基于 ...

  4. 里程计模型(1):两轮差分底盘和三轮全向底盘

    两轮差分底盘运动学模型 目前使用最为广泛的底盘可以说就是两轮差分底盘,此类底盘具有结构简单.成本低.模型简单的特点. 1.差分底盘运动模型 差分底盘运动模型如图. 轮子到底盘中心的距离:ddd 底盘中 ...

  5. 三轮全向底盘:运动学性能分析

    速度分析 建立三轮底盘的速度物理学模型如图所示. 其中v1v_1v1​.v2v_2v2​.v3v_3v3​分别为三个轮子的转速,ωωω为旋转角速度,vxv_xvx​.vyv_yvy​为车身坐标系中的速 ...

  6. 1.三轮全向移动底盘运动学解析

    三轮图片示意图 2.三轮理解 三轮全向移动底盘因其良好的运动性并且结构简单,近年来备受欢迎.三个轮子互相间隔120°,每个全向轮由若干个小滚轮组成,各个滚轮的母线组成一个完整的圆.机器人既可以沿轮面的 ...

  7. 浅谈三轮全向移动平台之——运动学逆解

    0.三轮全向移动平台简介 在机器人硬件的大家族中,移动平台算是占据了一席之地,近几年在各类大大小小的机器人比赛中使用三轮全向移动平台的频率越来越高,这种有意思的结构似乎越来越受机器人爱好者的青睐. 三 ...

  8. 全向移动小车运动控制_三轮全向移动机器人的运动控制

    三轮全向移动机器人的运动控制 彭亚雪 ; 王尊 ; 杨婷君 [期刊名称] <南方农机> [年 ( 卷 ), 期] 2019(050)006 [摘要] 移动机器人是一种可以自动执行工作的机器 ...

  9. Arduino三轮全向小车(一):编码马达的使用

    Arduino三轮全向小车(一):编码马达的使用## 标题 近期准备做一个arduino作为下位机的底盘,看了很多,还是不知所以然,干脆直接开始动手,变搞边学习.然而查阅网上各种资料高深莫测,看得我云 ...

最新文章

  1. JavaScript Switch 语句
  2. php pdo获取查询数据_php使用PDO获取结果集的方法
  3. 基于高德地图Windows Phone API 快速开发地图相关APP(二)
  4. ast抽象语法树_新抽象语法树(AST)给 PHP7 带来的变化
  5. 表头大小设置_Excel技巧:单线表头及多线表头的制作方法
  6. Spring在3.1版本后的bean获取方法的改变
  7. 现代程序设计 作业5
  8. C语言 strcat_s 函数 - C语言零基础入门教程
  9. Xtrabackup备份与恢复
  10. windows 2008 R2系统安装拨号v p n详细配置
  11. 智能化服务器怎么调,怎么设置dns 智能dns设置方法 【图文】
  12. python xlrd 读取excel
  13. C语言谭浩强版本学习笔记(1)
  14. 设计模式(一) 简单工厂模式
  15. 浅谈 NCSI 及其在 Linux 上的实现--IBM Developer社区文章
  16. 设计模式之策略模式(Strategy)
  17. java版我的世界怎么疾跑,我的世界怎么疾跑?疾跑快捷键介绍
  18. 苹果Apple Pay优缺点全解析
  19. MySQL---建表添加语句
  20. 数学英语不好能学php吗,英语和数学基础不好,还能学好编程吗?

热门文章

  1. FlashLight在Android5.0上的使用方法
  2. 烧心吃什么马上能缓解11 oracle,【烧心吃什么马上能缓解】_烧心_怎么缓解_怎样缓解-大众养生网...
  3. 胃病患者的福音:一个治疗胃病的特效偏方
  4. 抢鲜看“嫦娥一号”探月卫星成功发射全过程!!!!!!!
  5. 什么是css选择器?css3中5种常见的基本选择器-web前端教程
  6. javascript--苹果系统底部菜单--详细分析
  7. 应对深度学习人才缺口,百度黄埔学院发起深度学习架构师培养计划
  8. 采集平台-大数据平台数据采集系统
  9. 作为Lombok的信徒,我这次翻车了,啪啪打脸~
  10. 网易 java社招面试_《最新面经》—网易Java岗社招面试经历分享