毕业设计| 球上自平衡机器人

发布时间:2023-04-26  

该机器人根据陀螺仪的位姿数据,通过三个全向轮驱动底部球体调整自己在球上的位置,保持动态平衡的同时实现全向移动。

保持动态平衡过程需要对机器人进行运动学分析

自平衡控制问题转化为三步:输入X、Y角度—控制器计算—输出A、B、C电机转速的控制模型。

# 控制器设计 #

首先考虑参考平衡车控制,球上自平衡机器人本质上依然是一个一阶倒立摆问题

这里参考了飞思卡尔直立车的控制方法,采用串级PID控制器,外环PD角度环,内环速度PI环。


由于我的驱动方案选择的是42步进电机,在速度闭环的时候有些问题。正常的直流电机+编码器的控制方案可以通过编码器将轮子的真实速度计算出来,从而和控制器的理想转速作差,实现速度控制。


而我这里的速度闭环是通过计算上一个时钟周期时给步进电机的控制量,通过运动学方程分解,得到机器人的虚拟速度,与理想转速作差控制。我认为这种速度闭环方式还是存在一定缺陷的,但是在网上查看论文的时候我发现有很多自平衡机器人都是用42步进电机来实现速度闭环的,不知道是什么方法。


这里还可以好好思考一下为什么角度环要用PD控制,速度环要PI控制,角度环的P部分和D部分对机器人控制有什么影响?在很多CSDN调试平衡车的博客中都有解释,这里就留给大家思考了。


# 硬件及结构设计 #

自平衡机器人的硬件清单有:

56mm全向轮 45元/个

42步进电机 25/个

42步进闭环模块 59.8元/个

LM2596S降压模块 20元

STM32F103C8T6-4飞控板 59.8元

GY-521六轴陀螺仪 25元


用到的模块大致如上所示,C8T6的价格随着最近芯片涨价直线上升,我白嫖了实验室的两块板子,现在买一块实在太贵,可以等芯片价格稳定一些再买。其余开关排针等常见元件不再赘述。

机器人使用solidworks设计整体结构,底板可在淘宝定制6050太空铝切割,蓝色件为正常3D打印件。

Image


# 程序部分 #

在keil 5中开发STM32。


控制程序采用定时器0.5ms定时中断的方式进行计算,每触发两次中断计算对电机控制一次,这里还是推荐大家采用外部中断读取GY-521上的INT引脚的方式,控制计算周期。GY-521上的INT引脚每5ms触发一次跳变,采用外部中断的方式可以严格保证读取位姿数据与计算处理同步。

int TIM1_UP_IRQHandler (void)                

{

    u8 key_cal;

    if(TIM_GetITStatus(TIM1,TIM_IT_Update) != RESET)

    {

        TIM_ClearITPendingBit(TIM1,TIM_IT_Update); 

        flag_target=!flag_target;

        key_cal=KEY_Scan(0);

        if(state_flag==1)//矫正结束

        {

            if(flag_target==1)//每读取两次陀螺仪控制一次 

            {

                        Read_DMP();                      //===读取倾角

                        scope();

                        return 0;

            }

        }

        if(key_cal==1)//矫正按键

        {

                        Angle_Zero_X=Angle_Balance_X;

                        Angle_Zero_Y=Angle_Balance_Y;

                        key_cal=0;

                  Flag_Stop=0;

        }

        if(key_cal==2||key_cal==3)//矫正按键

        {

        Flag_Stop=1;//关闭速度环I积分

        key_cal=0;

        }

        Angle_Bias_X =Angle_Balance_X-Angle_Zero_X;     //获取Y方向的偏差

        Angle_Bias_Y =Angle_Balance_Y-Angle_Zero_Y;     //获取Y方向的偏差

        if(control_mode==0)//PID控制模式

        {

        Encoder_Analysis(Motor_A,Motor_B,Motor_C);  //正运动学分析,得到X Y方向的速度

        Balance_Pwm_X= balance_X(Angle_Bias_X,Gyro_Balance_X);//X方向的倾角控制

        Balance_Pwm_Y=-balance_Y(Angle_Bias_Y,Gyro_Balance_Y);  //Y方向的倾角控制

//      if(++flag_target_2==4)//速度环频率慢于加速度环 但是还没加速度环 

//          {

            Velocity_Pwm_X=velocity_X(compute_X);      //X方向的速度控制

            Velocity_Pwm_Y=velocity_Y(compute_Y);     //Y方向的速度控制  

//          flag_target_2=0;

//          }

            Move_X =Balance_Pwm_X+Velocity_Pwm_X;   //===X方向控制量累加   

            Move_Y =Balance_Pwm_Y+Velocity_Pwm_Y;   //===Y方向控制量累加   

            Move_Z=0;                

            Kinematic_Analysis(Move_X,Move_Y,Move_Z);//逆运动学分析得到ABC电机控制量

        }

            Motor_A=Target_A;//直接调节PWM频率 

            Motor_B=Target_B;//直接调节PWM

            Motor_C=Target_C;//直接调节PWM

//以下都是为了速度连续化处理防止突变

            if(Motor_A==0)  Motor_A=motor_a_last;

            if(Motor_B==0)  Motor_B=motor_b_last;

            if(Motor_C==0)  Motor_C=motor_c_last;

            Xianfu_Pwm(2000);

            Set_Pwm(Motor_A,Motor_B,Motor_C);

            Gyro_Balance_X_last=Gyro_Balance_X;

            Gyro_Balance_Y_last=Gyro_Balance_Y;

            Gyro_Balance_Z_last=Gyro_Balance_Z;

            Angle_Balance_X_last=Angle_Balance_X;

            Angle_Balance_Y_last=Angle_Balance_Y;

            Angle_Balance_Z_last=Angle_Balance_Z;

            motor_a_last=Motor_A;

            motor_b_last=Motor_B;

            motor_c_last=Motor_C;

    }

      return 0;

}

对于电机控制,由于采用的驱动方案是步进电机,调速的方式是改变驱动步进电机的脉冲频率。我这里选择了三个定时器,动态调节定时器的频率,具体方式是在初始化时设定好定时器的预分频系数psc的值,然后在程序里动态更改ARR寄存器的值,从而改变定时器的定时频率。


//这里以A电机的速度控制为例 输入为 电机方向和电机速度

void set_motorA_speed(u8 dir,u16 speed)

{

    u32 arr;

    arr=speed;

        TIM_ARRPreloadConfig(TIM3,DISABLE);

        TIM3->ARR=arr;//计数到10000在归零重新计数

        TIM3->CCR4=arr/2;//保持占空比为50%

        TIM_ARRPreloadConfig(TIM3,ENABLE);

        TIM_Cmd(TIM3,ENABLE);

    if(dir==0)

    {

    GPIO_SetBits(GPIOA,GPIO_Pin_1);

    }

  else

  {

    GPIO_ResetBits(GPIOA,GPIO_Pin_1);

  }

}

小车的运动学分解代码实现如下,参考了平衡小车之家的代码:


/**************************************************************************

函数功能:小车运动数学模型

入口参数:X Y Z 三轴速度或者位置

返回  值:无

**************************************************************************/

void Kinematic_Analysis(float Vx,float Vy,float Vz)

{

        Target_A   = Vx + L_PARAMETER*Vz;

        Target_B   = -X_PARAMETER*Vx + Y_PARAMETER*Vy + L_PARAMETER*Vz;

        Target_C   = -X_PARAMETER*Vx - Y_PARAMETER*Vy + L_PARAMETER*Vz;

}

/**************************************************************************

函数功能:小车运动 正运动学分析 

入口参数:A B C三个电机的速度

返回  值:无

**************************************************************************/

void Encoder_Analysis(float Va,float Vb,float Vc)

{

    compute_X=(Va*2-Vb-Vc);

    compute_Y=((Vb-Vc)*sqrt(3));

    compute_Z=(Va+Vb+Vc);  

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    Sciences)国际商务关系专业,拥有 30 年的财务和管理经验,包括在汽车、机械工程以及银行业。在此期间,Steinacher 先生担任过多个管理职位,领导了新市场的拓展工作,并在......
    人员在开发新的通信技术时正在与疲劳和倦怠作斗争。 所有电子工程毕业生都会接受一些射频课程,但射频工程师却异常罕见——射频是一种特殊类型的模拟电路,需要自己的一套工具和方法进行分析。工程师们不约而同地表示,变量太多,反复试验和错误是射频设计......
    传感器有朝一日可用于检测器官微小变形从而预测疾病,也可用于可穿戴设备和柔性机器人。论文发表在最新一期《科学进展》上。 该论文通讯作者、南加州大学航空航天、机械工程和生物医学工程助理教授赵航波指出,创建......
    觉上用弧形延伸了标志性的星环摄像头模块。华为Mate60 Pro+则采用创新的纳米级金属双染技术,呈现无缝双色效果,凸显其独特的同心设计。”iF这样评价道。 自创立以来,德国iF设计奖由德国历史最悠久的工业设计机构——汉诺威工业设计论......
    Ternus,图片来源:苹果官网) John Ternus同样是苹果公司的老兵。据介绍,John Ternus毕业于宾夕法尼亚大学机械工程专业,拥有理学学士学位,于2001年加入苹果产品设计团队,后于......
    远古生物以软机器人形式“复活”;侧囊虫是一种海洋生物,存在于近4.5亿年前,远早于第一批恐龙。据最新发表在《美国国家科学院院刊》上的论文,美国卡内基梅隆大学机械工程......
    的是要提升技术员工的专业技能,由于德国工业大部分依赖机械工程师,他们的设计过程须符合特殊与弹性化产品需求,因此动的非常慢,德国弗劳恩霍夫应用研究进展协会结合政府与企业资金,帮助企业发展科技创新。 德国......
    中国联通第一任董事长赵维臣去世:享年88岁;今天,告赵维臣因病医治无效于2016年10月11日在北京逝世,享年88岁。 赵维臣,1929年生,满族,黑龙江阿城人。 1962年毕业于清华大学机械......
    系统的研究现状与发展前景; 软硬件设计法:通过软硬件设计实现硬件,最后测试各项功能是否满足要求。 单片机类设计论文参考模板: 毕设无忧|单片机类毕设论文模板 设计内容 仿真图(protues8.7) 本设计......
    查看。   适用范围 ●  低转速机械工业设备,振动和温度数据采集 ●  低频响范围设备的结构和基础测量 ●  可完全代替点检仪器,具备......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>