ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

最简洁的麦克纳姆轮控制原理

2021-09-06 20:33:57  阅读:288  来源: 互联网

标签:ab vw4 vw3 纳姆轮 简洁 轮子 output 麦克 speed


最简洁的麦克纳姆轮控制原理

1.物理原理

1.1两种轮

对于四轮小车来说,一套麦克纳姆轮至少因含有两种不同的轮子,民间叫法右很多,百度上将他们称为:“麦克纳姆轮左和麦克纳姆轮右”

下面简称左轮和右轮

左轮:正转可以向左前方运动,反转向右前方的轮
在这里插入图片描述

右轮:正转向右前方运动,反转向左前方的轮
在这里插入图片描述
你可以尝试着进行受力分析,不是很复杂,但是——
只需知道麦轮这些基本的物理特性就足够控制麦轮了。

1.2一种可行的安装方式

对于四轮小车来说;一般来说的安装方式是:

图为一辆麦轮小车的俯视图,其中左前方和右后方的轮为左轮,其余两个为右轮
图为一辆麦轮小车的俯视图,其中左前方和右后方的轮为左轮,其余两个为右轮

以下的讲解均以此安装方式为例,其他的控制方式可以以相同的方式分析。

2.控制

2.1.1前进/后退

以上述方式安装的麦轮同时正转时,前部两个轮与后方两个轮的侧方的力都可以抵消,只剩下向前方的力。小车就可以向前运动

后退反转即可,分析同理

2.1.2左右平移

原理是将小车同一侧的两个麦轮以相反的方向旋转,这样沿前后方的力就会抵消,而横向的力有恰好是同一方向。

例如向左移动就所有右轮全反转,左轮全正转。

2.1.3自旋

原理就是一侧的轮子向后,另一侧的轮子向前;这样对于同一侧的两个轮子来说,横向的力还是可以抵消

如左侧两个轮子正转,右侧两个轮子反转就可以使小车顺势针旋转,反之则逆时针

以上这几种运动方式需要注意的是,四个轮子虽然转的方向不同,但是转速需要严格相同,不然四个轮子所受摩擦力的功率就不再一样,运动就会不精准。

2.1.4转弯

这个对于可以做到全向移动的麦轮小车不是很有必要,不过原理不麻烦,和普通的车轮一样,就是让一侧的速度大于另一侧就行了,因为同侧的两个轮子速度是相同的,所以横向(向心)的力还是可以抵消,只是原来的直线力/速度变成了切线而已。

2.2代码示例

(还在更新中。。。)

void CM_Control(void)
{
//对遥控器数据进行处理
	states=rcdata.rc.s1;//拨杆1是控制运动模式
	
  switch(rcdata.rc.s2)//拨杆2控制油门/刹车
	{
	  case 0 : ab_v++;
	  case 1 : ;
	  case 2 : ab_v--;
	}
//vw1为左前轮,vw2为左后轮,vw3为右前轮,vw4为右后轮	

//稳定速度//暂时用不到									
//		vw1 = filter1Process(&brake_filter_s1,vw1);
//		vw2	= filter1Process(&brake_filter_s2,vw2);
//		vw3 = filter1Process(&brake_filter_s3,vw3);
//		vw4 = filter1Process(&brake_filter_s4,vw4);

//保持四个轮子速度一致
//    ab_v=(fabs(vw1)+fabs(vw2)+fabs(vw3)+fabs(vw4))/4;
	
	  if(ab_v>500) ab_v=500;//限速
	
	  if(states==0)//前后
		{
		vw1 = ab_v;
		vw2 = ab_v;
		vw3 = ab_v;
		vw4 = ab_v;
		}
    else 	
		 if(states==1)//左右
		{
		vw1 = ab_v;
		vw2 = -ab_v;
		vw3 = ab_v;
		vw4 = -ab_v;
		}
    else 	
		 if(states==2)//旋转
		{
		vw1 = ab_v;
		vw2 = ab_v;
		vw3 = -ab_v;
		vw4 = -ab_v;
		}	
		
    output_current1 = pidProcess(&s1_speed, vw1, m3508.m1.speed);
    output_current2 = pidProcess(&s2_speed, vw2, m3508.m2.speed);
    output_current3 = pidProcess(&s3_speed, vw3, m3508.m3.speed);
    output_current4 = pidProcess(&s4_speed, vw4, m3508.m4.speed);

		//通过can来控制电机
    ctrl.pack = M3508_PACK_1_4;
    ctrl.setcur[0] = (int16_t)output_current1;
    ctrl.setcur[1] = (int16_t)output_current2;
    ctrl.setcur[2] = (int16_t)output_current3;
    ctrl.setcur[3] = (int16_t)output_current4;

    m3508SetCurrent(&ctrl, &CAN1Handle);
		
		control_on++;
	
}

标签:ab,vw4,vw3,纳姆轮,简洁,轮子,output,麦克,speed
来源: https://blog.csdn.net/handsome_Ares/article/details/120140997

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有