MATLAB Simmechanics/Simscape四旋翼无人机控制仿真(2) Simulink模型调节

2023-05-16

MATLAB Simmechanics/Simscape四旋翼无人机控制仿真(2) Simulink模型调节

  • MATLAB Simmechanics/Simscape四旋翼无人机控制仿真(2) Simulink模型调节
    • 1 前言
    • 2 螺旋桨电机配置
    • 3 推力分配
    • 3 机体的旋转与移动
    • 4 万向节死锁

MATLAB Simmechanics/Simscape四旋翼无人机控制仿真(2) Simulink模型调节

本来笔者一直调不好,已经准备放弃,没想到最后发现是转动惯量参数写错了,不得不说SimScape还是非常强大的。
上一篇详细介绍了如何构建并导入模型:
MATLAB Simmechanics/Simscape四旋翼无人机控制仿真(1) SolidWorks模型的导入.
这篇博客将从导入到Simulink的SolidWorks模型开始,对这个模型进行调节,为旋翼机添加动力,为后面的控制设计做准备。
因为参考了许多别人的模型,最后我的MATLAB升级为了2019a。
模型详见:
https://github.com/mkb9559/Simscape-Quadrotor
MATLAB Simmechanics/Simscape四旋翼无人机控制仿真(3) 无人机控制器设计.
MATLAB Simmechanics/Simscape四旋翼无人机控制仿真(4) 串级姿态控制.
Demo视频.
最近更新了第二代模型,可以参考:
MATLAB Simmechanics/Simscape四旋翼无人机控制仿真(5) F250旋翼仿真搭建.

1 前言

在这里插入图片描述
上一篇博客已经将模型导入到了Simulink,如上图所示。

2 螺旋桨电机配置

旋翼机飞行时,螺旋桨旋转,会产生升力 T T T,同时对机身产生反扭力矩 M M M,其与转速平方呈线性关系,这里转速单位一般是rpm/min:
T = k t Ω 2 T{=}{{k}_{t}}{{\Omega }^{2}} T=ktΩ2 M = k q Ω 2 M={{k}_{q}}{{\Omega }^{2}} M=kqΩ2因此,配置以4号电机为例,如下图所示,
在这里插入图片描述
在这里插入图片描述
给这个螺旋桨一个输入(实际上是力矩),这个转速按照如上公式关系,生成一个升力和反扭力矩,因为笔者对空气动力不了解,因此这里的系数随便给了两个值都是1。笔者参考过很多旋翼仿真模型,这种是比较好的,优点是在输入稳定的情况下,转速能快速稳定,这对仿真性能有很大影响。下图是恒定输入下的转速变化,可以看到转速的稳定连0.1s都不需要,这样的方法是很快的。
在这里插入图片描述

还有两种种配置方法,一是不添加反扭力矩,为给转轴关节添加阻尼,使转速稳定;二是不添加反扭力矩,设计电机转速控制器。但是这两种方法的致命缺点是会使得旋翼机的偏航控制通变成一阶系统,和实际的二阶系统不符,如果使用PID控制,那么是没有什么区别的,甚至这样更加简单。

3 推力分配

为每个螺旋桨按照如上配置,旋翼机的动力就基本配置完成,注意,四旋翼的螺旋桨旋转是对角方向相同,相邻方向相反的。
这里介绍X型布局的推力分配,这实际上是无人机控制的底层,控制关系如下:
u 1 = k t ( Ω 1 2 + Ω 2 2 + Ω 3 2 + Ω 4 2 ) {{u}_{1}}={{k}_{t}}\left( \Omega _{1}^{2}+\Omega _{2}^{2}+\Omega _{3}^{2}+\Omega _{4}^{2} \right) u1=kt(Ω12+Ω22+Ω32+Ω42) u 2 = k t l ( Ω 1 2 + Ω 2 2 − Ω 3 2 − Ω 4 2 ) {{u}_{2}}={{k}_{t}}l\left( \Omega _{1}^{2}+\Omega _{2}^{2}-\Omega _{3}^{2}-\Omega _{4}^{2} \right) u2=ktl(Ω12+Ω22Ω32Ω42) u 3 = k t l ( Ω 1 2 + Ω 4 2 − Ω 2 2 − Ω 3 2 ) {{u}_{3}}={{k}_{t}}l\left( \Omega _{1}^{2}+\Omega _{4}^{2}-\Omega _{2}^{2}-\Omega _{3}^{2} \right) u3=ktl(Ω12+Ω42Ω22Ω32) u 4 = k q ( Ω 1 2 + Ω 3 2 − Ω 2 2 − Ω 4 2 ) {{u}_{4}}={{k}_{q}}\left( \Omega _{1}^{2}+\Omega _{3}^{2}-\Omega _{2}^{2}-\Omega _{4}^{2} \right) u4=kq(Ω12+Ω32Ω22Ω42) u 1 {{u}_{1}} u1 u 4 {{u}_{4}} u4就是无人机控制里面一般使用的控制输入, l {{l}} l是旋翼升力所用于无人机产生力矩的力臂,X布局的是 2 2 \frac{\sqrt{2}}{2} 22 机臂长,他们的关系如上,可以通过Matlab反解出 Ω 1 2 {\Omega_{1}^{2}} Ω12 Ω 4 2 {\Omega_{4}^{2}} Ω42,这里就不打公式了,模型里面有。

3 机体的旋转与移动

到此,Simulink模型的调节基本结束,无人机已经拥有了动力特性,在调节无人机控制的时候一般先调节姿态控制,再调节位置控制,因此再调节姿态控制的时候使用一个球转动关节与世界坐标系固连,并将重力配置为0,给定各个电机一定的转速,可以查看无人机的姿态变化:
在这里插入图片描述
在这里插入图片描述
如果将这个球转动关节换为6自由度移动连接,并且恢复重力,就可以实现无人机在世界坐标系上移动了

4 万向节死锁

由于姿态使用了欧拉角表示,因此会出现万向节死锁的问题,这是使用欧拉角的必然缺陷,本模型使用的旋转顺序为ZYX,因此再偏航角邻近±90度的时候会出现万向节死锁,如果使用了这个时候的欧拉角做控制,那么必然会崩溃。关于万向节死锁可以参看其他博客或者下面这个视频:
https://v.qq.com/x/cover/e055516g79w/e055516g79w.html
解决方法有两种:第一是更换欧拉角旋转顺序,可以使万向节死锁不发生在航角邻近±90度,但是还是会在其他角度出现;第二种是直接使用四元数,不转化为欧拉角。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB Simmechanics/Simscape四旋翼无人机控制仿真(2) Simulink模型调节 的相关文章

  • 对三层和MVC的认识过程

    三层架构就是 MVC xff01 起初老师总说三层 MVC xff0c MVC 三层架构 所以开始的时候脑子就一个概念 xff1a 三层就是 MVC xff0c MVC 就是三层架构 而且想想也合理啊 xff0c 都是 三 MVC 是三个字
  • ROS雷达包出现:ERROR: cannot launch node of type: rplidar_ros

    ROS雷达包出现 xff1a ERROR cannot launch node of type rplidar ros 问题分析详情 问题分析 仅安装了基础ROS xff0c rplidar ros包没有安装 详情 下载包并解压缩 1 使用
  • nvidia-smi出现的比较慢

    一个比较老的问题 xff0c 一般四卡以上的机器可能会出现 以前我都是 nvidia span class hljs attribute smi span span class hljs attribute pm span span cla
  • 【tensorflow】tensorflow的安装及应用

    安装tensorflow的三种方法 1 在cmd命令行中输入pip install tensorflow xff0c 默认安装最新版 2 其他旧版本的安装 xff0c 去pypi org官网 可以点击release history选择想要的
  • 汇编:stmdb和ldmia指令

    参考了网上一些文章 xff0c 简单说一下stmdb和ldmia指令的作用 xff0c 如有错误欢迎指正 首先一句话说一下stmdb和ldmia指令 的作用 xff1a stmdb和ldmia指令一般配对使用 xff0c stmdb用于将寄
  • ARM 内联汇编 加速 算法

    首推移动端arm cpu优化学习笔记第4弹 内联汇编入门 xff0c 但是其只给出了代码 xff0c 很多人还不知道怎么在手机上跑起来 xff0c 其实只需要一个CMakeLists txt就可以了 cmake minimum requir
  • centos7.3环境编译安装pktgen-dpdk,dpdk工具

    概述编译环境编译DPDK编译Pktgen dpdkDebug 概述 DPDK xff08 Date Plane Development Kit xff09 主要基于Linux系统运行 xff0c 用于快速数据包处理的函数库与驱动集合 xff
  • 捷联惯导算法心得

    1 四个概念 xff1a 地理 坐标系 机体 坐标系 他们之间换算公式 换算公式用的系数 地理坐标系 xff1a 东 北 天 xff0c 以下简称 地理 在这个坐标系里有重力永远是 xff08 0 0 1g xff09 xff0c 地磁永远
  • Java中的域,静态域,实例域

    域 所谓的域 xff0c 是field的翻译 xff0c 也就是我们常说的字段 xff0c 或者属性 比如类的字段 xff08 属性 xff09 xff0c 局部的 xff0c 全局的 静态域 也就是静态属性 xff0c 我们可以单独为它设
  • 【线程篇】线程间同步之信号量、互斥锁

    线程 xff1a 进程内部的一条执行路径 xff08 序列 xff09 什么是线程什么是进程 xff0c 进程和线程的区别 xff1f 进程是一个正在运行的程序 xff0c 是系统进程资源分配的基本单位 线程是进程内部的一条执行路径 xff
  • PL/SQL报错:无法解析指定的连接标识符

    在安装oracle的时候PL SQL报错 xff1a ORA 12154 TNS 无法解析指定的连接标识符 xff0c 在网上找了很多资料 xff0c 然后问题解决 其中下面的文章分析的过程很值得学习 xff0c 特地转载过来时刻告诫自己全
  • 【idm】idm突破cookie封锁 (解决http:1.1 403 forbidden)(附charles使用教程)

    文章目录 一 问题二 解决方法 xff08 1 xff09 在chrome中获得cookies xff08 2 xff09 安装配置charles 三 另外的方法参考 idm的使用教程参考 xff1a 一 问题 使用idm下载文件出现如下问
  • 四旋翼飞行器数学建模+轨迹跟踪控制

    数学模型 xff08 状态空间方程 xff09 xff1a 控制算法 有限时间 xff08 finite time control xff09 控制 xff0c 文献 1 xff1b 比例 微分 xff08 PD xff09 控制 xff0
  • 卡尔曼滤波算法总结

    自己学习整理卡尔曼滤波算法 xff0c 从放弃到精通 kaerman 滤波算法 卡尔曼滤波是非常经典的预测追踪算法 xff0c 是结合线性系统动态方程的维纳滤波 xff0c 其实质是线性最小均方差估计器 xff0c 能够在系统存在噪声和干扰
  • 做嵌入式驱动的前途何在

    做嵌入式驱动的前途何在 做嵌入式linux驱动的前途何在 xff1f 或者说 xff0c 怎么才能做好这一行 xff1f 我做嵌入式驱动开发已经一年多了 xff0c 感觉没学到多少东西 从网络驱动到CAN驱动 从dataflash驱动到NA
  • 串口通信的调试01

    在开发中 xff0c 我们经常遇到这种情况 xff0c 供应商给了一台仪器 xff0c 然后仪器配套有软件 我们通过点击按钮往仪器发送命令 xff0c 仪器返回数据 有些时候 xff0c 我们希望可以通过自己编写的软件来操作仪器 xff0c
  • Linux驱动程序开发之三----按键驱动(Tiny6410)

    在Linux驱动程序开发之三 按键驱动 xff08 Tiny6410 xff09 博文中讨论了使用中断来实现按键驱动 xff0c 毫无疑问 xff0c 中断方式效率相当高 xff0c 但是在此之前 xff0c CPU要想获知按键的状态都是通
  • 飞控信号SBUS信号解析为PWM信号输出

    飞控信号SBUS信号解析为PWM信号输出 1 修改STM32时钟频率 xff1a static void SetSysClockTo72 void IO uint32 t StartUpCounter 61 0 HSEStatus 61 0
  • GTSAM 的使用

    GTSAM 的使用 GTSAM 是一个在机器人领域和计算机视觉领域用于平滑 xff08 smoothing xff09 和建图 xff08 mapping xff09 的C 43 43 库 它与 g 2 o 不同的是 xff0c g 2 o
  • ROS智能车实现darknet_ros检测物体

    文章目录 一 搭建智能车环境1 下载包以及编译1 1 下载源码包1 2 编译1 3 错误解决 xff08 1 xff09 controllers相关 xff08 2 xff09 driver base相关 xff08 3 xff09 ack

随机推荐