首页 > 其他分享 >麦克纳姆轮控制

麦克纳姆轮控制

时间:2024-08-13 20:25:49浏览次数:10  
标签:控制 PI 纳姆轮 GUARD CHASSIS MOTOR output 麦克 data

如下是麦克纳姆轮工作机制,使用全力矩控制,附pid

把每一个轮子拿出来都是一个承受三个方向上的力的单一物体,根据力矩平衡,四个不同方向上的力会形成四轮平衡,以移动

不懂的话没关系

后附控制代码

void Chassis_Ctrl(void)
{
  
    

        f_ang=DOUBLE_ECHO.GM_UP_ECHO.yaw_curangle-ORIN_ANGLE;
   
      cha_goal_angle=f_ang;
    
        if(RC_CtrlData.rc.s2==2)cha_goal_angle+=800;

            wv=(cha_goal_angle)*0.3;
 
        r_vx=RC_CtrlData.rc.ch0;    
        r_vy=RC_CtrlData.rc.ch1;
   
        vx=(r_vx*cos(f_ang*PI/180.f)-r_vy*sin(f_ang*PI/180.f)) / 220;
            vy=(r_vy*cos(f_ang*PI/180.f)+r_vx*sin(f_ang*PI/180.f)) / 220;

            vw2 = -(+vx - vy - wv * MOTOR_TO_CENTER) / (WHEEL_RADIUS * 2 * PI) * REDUCE_RATIO * 60;
            vw3 = -(+vx + vy - wv * MOTOR_TO_CENTER) / (WHEEL_RADIUS * 2 * PI) * REDUCE_RATIO * 60;
            vw4 = (+vx - vy + wv * MOTOR_TO_CENTER) / (WHEEL_RADIUS * 2 * PI) * REDUCE_RATIO * 60;
            vw1 = (+vx + vy + wv * MOTOR_TO_CENTER) / (WHEEL_RADIUS * 2 * PI) * REDUCE_RATIO * 60;
    
        if(vw1>=1800)vw1=1800;
            if(vw2>=1800)vw2=1800;
            if(vw3>=1800)vw3=1800;
            if(vw4>=1800)vw4=1800;
            
            if(vw1<=-1800)vw1=-1800;
            if(vw2<=-1800)vw2=-1800;
            if(vw3<=-1800)vw3=-1800;
            if(vw4<=-1800)vw4=-1800;
  
      GUARD_CHASSIS_MOTOR.data.output_current1= pidProcess(&hpid3508, vw1, m3508.m1.speed);
      GUARD_CHASSIS_MOTOR.data.output_current2 = pidProcess(&hpid3508, vw2, m3508.m2.speed);
      GUARD_CHASSIS_MOTOR.data.output_current3 = pidProcess(&hpid3508, vw3, m3508.m3.speed);
      GUARD_CHASSIS_MOTOR.data.output_current4 = pidProcess(&hpid3508, vw4, m3508.m4.speed);

    //通过can来控制电机
      ctrl.pack = M3508_PACK_1_4;
      ctrl.setcur[0] = (int16_t)GUARD_CHASSIS_MOTOR.data.output_current1;
      ctrl.setcur[1] = (int16_t)GUARD_CHASSIS_MOTOR.data.output_current2;
      ctrl.setcur[2] = (int16_t)GUARD_CHASSIS_MOTOR.data.output_current3;
      ctrl.setcur[3] = (int16_t)GUARD_CHASSIS_MOTOR.data.output_current4;
      m3508SetCurrent(&ctrl, &CAN1Handle);
            
        vw1=vw2=vw3=vw4=0;
        control_on++;
    
}
 

标签:控制,PI,纳姆轮,GUARD,CHASSIS,MOTOR,output,麦克,data
From: https://blog.csdn.net/HeDouet/article/details/141172614

相关文章

  • Linuxu-引导过程与服务控制
    系列文章目录`提示:仅用于个人学习,进行查漏补缺使用。1.Linux介绍、目录结构、文件基本属性、Shell2.Linux常用命令3.Linux文件管理4.Linux命令安装(rpm、install)5.Linux账号管理6.Linux文件/目录权限管理7.Linux磁盘管理/文件系统8.Linux逻辑卷管理LVM9.Li......
  • 摘要生成—通过摘要风格控制摘要的生成/抽取,原文阅读与理解:GEMINI: Controlling The S
    GEMINI:ControllingTheSentence-LevelSummaryStyleinAbstractiveTextSummarizationGEMINI:在抽象文本摘要中控制句子级摘要风格paper:https://arxiv.org/abs/2304.03548github:https://github.com/baoguangsheng/gemini本文介绍了一种自适应摘要抽取/生成方......
  • 控制SD图片生成的神经网络模型--ControlNet
    ControlNet是一个通过添加额外条件来控制SD中图像生成的神经网络,可以使用ControlNet来做以下事情:指定人体姿势。从另一幅图像复制图片的构图。生成参考图片类似的图像。将涂鸦图片变成专业的图像。ControlNet是用于控制SD的神经网络模型。您可以将ControlNet......
  • 为什么自动控制原理中要采用对数频率特性曲线(伯德图)进行绘制?
    什么是伯德图?伯德图是系统频率响应的一种图示方法。也称为开环对数频率特性曲线。可以根据伯德图系统频率的角度分析系统性能,包括稳定性,动态品质,稳态误差。伯德图分为两张图,幅频特性和相频特性。1.幅频特性图横坐标为lgw:实际工程中低频成分较多,采用此坐标形式可以扩展低频......
  • 11、java程序流程控制之三:循环结构(while循环)、循环结构(do-while循环)、break 与 co
    java程序流程控制之三:Ⅰ、循环结构:while循环1、while循环结构:其一、描述:其二、代码为:其三、截图为:Ⅱ、循环结构:do-while循环1、do-while循环结构:其一、描述:其二、代码为:其三、截图为:2、do-while循环结构的案例1:输出正数或负数的个数其一、描述:其二、代码为:其三、......
  • 单元训练01:LED指示灯的基本控制
    #include"stc15f2k60s2.h"#include<intrins.h>#defineLED(x)\ {\ P2=P2&0x1f|0x80;\ P0=x;\ P2&=0x1f;\ }typedefunsignedcharu8;//定......
  • 微服务安全加固:Spring Cloud的细粒度权限控制策略
    标题:微服务安全加固:SpringCloud的细粒度权限控制策略在微服务架构中,服务的细粒度权限控制是保障系统安全的关键。SpringCloud作为一个微服务架构的解决方案集合,提供了多种工具和策略来实现这一目标。本文将详细介绍如何利用SpringCloud中的各种组件,如SpringCloudSecur......
  • 【学术会议征稿】第七届电力电子与控制工程国际学术会议(ICPECE 2024)
    第七届电力电子与控制工程国际学术会议(ICPECE2024)20247th InternationalConferenceonPowerElectronicsandControlEngineering第七届电力电子与控制工程国际学术会议(ICPECE2024)由华东交通大学与辽宁科技学院联合主办,将于2024年10月18日至20日在中国·本溪举行。本......
  • Android网页投屏控制从入门到放弃
    背景业务需要采集在app上执行任务的整个过程,原始方案相对复杂,修改需要协调多方人员,因而考虑是否有更轻量级的方案。原始需求:记录完成任务的每一步操作(点击、滑动、输入等)记录操作前后的截图和布局xml基于Adb的方案最容易考虑到的方案是就是通过adb去实现,要获取到当前页面......
  • 掌握NPM版本控制:项目维护与依赖管理的艺术
    在软件开发过程中,版本控制是确保项目稳定发展的关键。NPM(NodePackageManager)作为Node.js的包管理工具,不仅提供了包的安装和管理功能,还内置了一套版本控制机制,帮助开发者管理项目的不同版本。本文将详细介绍如何使用NPM进行项目的版本控制。版本控制的重要性在多人协作的......