Robotics: Aerial Robotics(空中机器人)笔记(二):如何设计一架四旋翼无人机

2023-05-16

在这一章里,我们将探索四旋翼如何飞行的。 这章将会讲一些基本的力学原理以及如何设计无人机。

上一章链接:

Robotics: Aerial Robotics(空中机器人)笔记(一): Introduction

基本的力学原理(Basic Mechanics)

一个四旋翼有四个电机来支持飞行器的重量mg,每个电机会旋转并产生一个向上推力,与此同时,电机的旋转需要克服阻力矩,所以我们需要观察推力和阻力矩这两个量与电机转速的关系。

这里不太清楚力矩的概念的话可以看下这里:

作者:一根儿芦苇
链接:https://www.zhihu.com/question/20260034/answer/287592720
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

研究一种物理现象的时候,我们希望能找出来影响它的因素,然后再将这些因素量化,进而总结出规律,得出它们和现象之间的关系。

比如我们推地面上的一箱东西,到底用多大的力才能推动呢?

通过实验观察我们发现箱子越重,越难推动。还有就是地面越粗糙,越难推动。也就是所,对于推箱子这件事儿,影响的因素有两个,一个是箱子本身的重量M,一个是地面的粗糙程度。这里遇到一个问题,就是粗糙程度该怎么表示,我们就想办法将它量化成一个系数k,叫做摩擦系数,地面越粗糙,k越大。那么推动箱子需要的力:

F=kM

这样就找到了推箱子需要的力。以后对于任何重量的箱子,在任何地面上,只要知道摩擦系数k,我们都可以用这个公式来计算出来推动它所需的力。

力矩类似。我们在转动一个东西时,比如用扳手拧螺丝。通过实验我们发现,要想拧动螺丝,一个是用的力越大越好,另一个就是扳手越长越好。也就是影响螺丝是否能被拧动的因素有两个,一个是扭力F,一个是力臂长度L,也就是扳手长度。如何来表示这种拧的作用的效果呢?也就是如何来量化这种作用?于是就有了扭矩,用公式表示为:

M = F X L

这里三个量都是向量,之所以用叉乘表示,是因为叉乘的这种运算正好和这种物理现象相吻合了。也就是力矩大小不仅和力F、力臂L的大小有关,还和二者的夹角有关。力矩的方向垂直于力和力臂所在的平面。

如果我们绘制出推力与电机转速的关系图:

我们可以看到, 推力F=k_fw^2和阻力矩M=k_Mw^2与转速的关系都可以看作一个二次方程,这里的k是一个系数,相当于我们求平推一个物体产生的摩擦力时地面的摩擦系数。

通过观察推力与转速的关系曲线,可以确定要求产生等于四分之一重量推力的转速w_0,同时这需要克服相应的阻力矩,那么我们怎么克服呢?通过调整电机的尺寸,电机可产生扭矩来克服前述的阻力矩,也就是图中这个\tau(描述电机扭矩与转速的关系曲线)。

所以说,如果我们要使四旋翼无人机处于悬停状态的话,产生的推力和扭矩就要满足以下公式:

当我们知道相应的系数k_fk_M 以及无人机的质心位置时,就能求出对应的合力以及合力矩了,其中r是质心到每个转子的距离。

在平衡状态时,合力明显为零,而合力矩也是零。

但是当合力在瞬时非零时, 会发生什么呢? 其会得到加速度。简单起见我们先说垂直方向的加速度,当转子的推力之和(主要是转子的转速决定)大于四旋翼的重量时,会产生向上的加速度,反之则产生向下的加速度,式子如下所示:

动力学与一维线性控制(Dynamics and 1-D Linear Control)

这一部分主要还是讨论在垂直方向上的运动,我们的目的就是让控制四旋翼机器人达到一个要求的垂直高度,也就是需要往上或往下位移一段距离 x

显然,我们可以通过位移的二阶导数来求出加速度:

a=\frac{\mathrm{d^2x} }{\mathrm{d} t^2}=\ddot{ x}

我们用 u 来表示合力除以质量:

u=\frac{1}{m}[\sum_{i=1}^{4}k_fw_{i}^2+m\textbf{g}]

就能得到一个二阶微分方程:

u=\ddot{x}

我们控制这台四旋翼的目标其实就是确定函数 u 进而四旋翼到达期望位置 x

正如上文所述,这是非常简单的一个二阶线性系统,我们找到输入 u 关于时间 t 的函数u(t)可以驱动 x到达预期的位置 x(t)\rightarrow x^{des}(t)

为此定义了一个误差函数e(t) = x^{des}(t) - x(t),表示期望轨迹和实际的轨迹之间的误差量,

很明显误差越大 (系统)对实际轨迹的偏差就越大,我们要做的就是要消除误差至零,并且是指数地收敛到零(更快且更平稳),也就是找到 u 满足:

 其中第一个式子就是让误差指数地收敛到零,具体怎么来的可以看下面的链接:

PD控制器的另一解释与应用

第二个式子的推导:

\ddot{e}(t) = \ddot{x}^{des}(t) - \ddot{x}(t) = \ddot{x}^{des}(t) - u(t)

\ddot{x}^{des}(t) - u(t) + K_v\dot{e}(t) + K_pe(t) = 0

u(t) = \ddot{x}^{des}(t) + K_v\dot{e}(t) + K_pe(t)

其中,K_v 为微分增益(derivative gain),K_p 为比例增益(proportional gain),\ddot{x}^{des}(t)称为前馈项(feedforward term)。当 K_v 和 K_p 都为正时,就能保证误差项能以指数的速度趋向于零。

比例增益其越高, 系统变得更有弹性和更有可能超调。 比如说当前状态是2,期望状态是4,误差是2,当前比例增益的话可能调节量是+1,那么状态就变成3,误差为1,如果增加比例增益,那么调节量可能变成+2,误差就为0,如果再增加比例增益,调节量可能变成+3,误差就变-1,也就是超调了。

微分增益越高,系统本质上是加大了缓冲。 我们可以粗略理解这一项为能量衰减率,如果K_v为0,K_p > 0,系统就处于不断振荡的状态。通过增加微分增益,我们可以让系统收敛得更平稳。但如果微分增益过大,那么系统就处于欠阻尼的状态,系统会收敛地比较慢,但不会振动得厉害。

在特殊情况下, 你可以考虑使用更复杂的版本的PD控制,也就是PID控制。比如在不知道系统的具体模型或存在某些未知的干扰因素时,可以引入一个额外的正比于误差积分的项:

虽然引入这一项会使微分方程变成三阶,使得求解变得困难,但是这会使误差项最终变成零。 

设计考量(Design Considerations)

推重比

我们在之前的分析中总是假设电机能够产生控制器需要的推力,但是电机的推力是有限的,因为电机的转速会有一个峰值,这个峰值会导致四旋翼有一个最大的推力 T_{max} 和最大的加速度 a_{max} 。

我们在前面的式子就知道,控制输入 u 其实是由推力T和四旋翼的重力mg决定的,

假设你知道T_{max},通过简单地把最大推力和重量加起来,就可以得到 u_{max} : 

所以现在当我们做 PD 控制和PID控制时, u(t)还要由最大推力决定:

这个最大推力和重量的比例就是推重比 (thrust to weight ratio),我们可以通过调节推重比来调节四旋翼的控制性能。

能耗

我们要让四旋翼飞起来,就要使得推力能产生足够的推力来抵抗重力。这就会产生基本功耗,四旋翼的基本功耗为:200 W/kg, 而所幸的是锂电池提供的能量基本 > 200 W/kg,所以实际上都能满足。

除了考虑功率消耗, 还需要考虑电池所携带的总能量,大多数的锂电池产生大约200 Whr/kg的电力:

现在用的最多的就是锂电池,但是现在锂电池并不携带大量的能量,那么我们如何让无人机飞得更久,通常就是减少重量。一般来说电池占总重的约35%, 电机加上螺旋桨占总质量的25%左右就可以了。

四旋翼携带的传感器也会消耗能量,通常来说它们因增加重量所消耗的能耗会比它们运作起来所消耗的能耗会大一些。

灵活性和可操作性(Agility and Maneuverability)

这一部分主要探讨如何使四旋翼能够灵活地移动。

以最大速度停下(Maximum velocity to rest)

当四旋翼以最大速度向前飞行,  当你决定让它停到某个位置的时候, 你必须让它向后倾, 扭转推力方向, 这样才得以减速。但其结果是, 这会导致四旋翼的高度在垂直方向上降低, 因为垂直方向上的推力是小于现在的重量的。

快速转弯且不减速 (Turn quickly without slowing down)

另一件是就是让四旋翼具备快速转弯的能力,目的是让四旋翼以最大速度向前飞行, 然后尽可能快速地转弯,主要通过减少转弯半径来实现。

运动分析 

我们首先进行四旋翼以最大速度停下时的运动分析,以下图为例我们可以看到,此时四旋翼是倾斜的,而四旋翼转子所产生的推力是垂直于四旋翼的,所以我们将其合力与合力矩拆分成z轴和y轴两个方向,设四旋翼与y轴之间的夹角为 \phi, 就可以得到 u_1(注意它是有方向的)在z轴和y轴的分量分别是 u_1cos\phi 和 -u_1sin\phi (方向与运动方向相反,所以此时在减速)。

那么我们就能求得四旋翼在y轴,z轴的加速度以及角加速度:

\ddot{y} = \frac{\vec{F}}{m}=-\frac{1}{m}u_1sin\phi     

同理    \ddot{z} = \frac{1}{m}u_1cos\phi - g   

 \ddot{\phi} = \frac{M}{I_{xx}} = \frac{u_2}{I_{xx}}(角加速度等于力矩除以转动惯量)

写成线性代数的形式就是:

 我们想要更快地加减速,更快地旋转。就要:

最大化线性加速度 a :Maximize \frac{u_{1,max}}{m}

最大化角度加速度 \alpha :  Maximize \frac{u_{2,max}}{I_{xx}}

部件选择(Component Selection)

由于我们想让无人机能够灵活地飞行,同时又要能实现一些功能(比如说自主飞行),那么我们就要搭载一些设备来完成这些功能。为此就要十分关注这些设备的重量(由上面的分析可知,重量也会影响飞行的灵活性),和功耗(功耗太大的话,就得考虑大电池,也会影响重量)。

尺寸的影响(Effects of Size)

四旋翼的尺寸大小也会影响其灵活性,我们来看一个四旋翼的平面图,l 是这个四旋翼的特征长度 (特征长度通常是指该物体长度中有代表意义的长度,是抽象出来的,这里可以粗略认为是四旋翼的尺寸),四旋翼的质量是 m ,螺旋桨的半径是 r: 

质量 m 正比于 l 的三次方(质量与体积相关,体积相当于长度乘三次),转动惯量正比于l 的五次方(转动惯量等于质量乘以长度的平方):

m \sim l^3                I \sim l^5

推力 F 正比于螺旋桨转动的面积乘以转子叶尖线速度的平方:

F \sim \pi r^2 \times (\omega r)^2 \rightarrow F \sim r^2v^2

力矩 M 正比于推力乘以长度:

M \sim Fl \rightarrow M \sim lr^2v^2

现在,假设桨叶大小与特征长度特征长度成正比 r \sim l ,这个假设是满足几何约束的,所以有:

F \sim l^2v^2     M \sim l^3v^2

就有:

a \sim \frac{F}{m} \rightarrow a \sim \frac{v^2}{l}          \alpha \sim \frac{M}{I} \rightarrow \alpha \sim \frac{v^2}{l^2}

所以最大线加速度和最大角加速度会随着 l 和 v 的变化而变化。

而其实 v 也是与 l 有关系的,在空气动力学中有两种缩放(scaling)。

Froude scaling :

v \sim \sqrt{l} \rightarrow a \sim 1,\alpha \sim \frac{1}{l}

Mach scaling :

v\sim1\rightarrow a\sim \frac{1}{l},\alpha \sim \frac{1}{l^2}

所以基于这两种假设我们可以得到,四旋翼的尺寸越小,其能获得的最大角加速度就越大,也就越灵活。

下一章链接:

Robotics: Aerial Robotics(空中机器人)笔记(三):无人机运动学

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

Robotics: Aerial Robotics(空中机器人)笔记(二):如何设计一架四旋翼无人机 的相关文章

  • 关于def __init__(self)

    首先说明一下 xff0c def init self 是用于初始化类 但是我们实际程序阅读过程中会发现 xff0c 这部分经常有两种状况 1 def init self xff0c 不带参数 xff0c 此处借鉴另一位博主的程序做一下分析
  • 《机器学习》周志华 集成学习

    8 1个体集成 个体学习器可以由 C4 5决策树算法 BP神经网络等 来训练 个体学习器 同质 gt 叫基学习器 也叫弱学习器 指泛化性能略优于随机猜测的学习器 xff0c 如二分类问题上精度略高于50 的分类器 相应的算法叫做 基学习算法
  • 【Windows内核编程】Win10/Win11通过PspCidTable取得EProcess

    温馨提示 本文的内容均在Windows 11 Enterprise 22000 466 版本下测试 不同版本的部分内容可能存在差异 xff0c 但万变不离其中 Upadate 20220803 经测试 xff0c 本文内容目前向下兼容 正文
  • 自抗扰控制的入门学习(一)—— 前言

    自抗扰控制的入门学习 xff08 一 xff09 前言 与很多人一样 xff0c 接触这个算法之后心态也经历过 xff0c 从一开始的 不明觉厉 xff0c 中途的 不以为然 xff0c 到最后的 辩证看待 的演变过程 借用别人的话 xff
  • Qt中QMessageBox的用法---看这一篇就够了

    一 详细说明 QMessageBox类提供一个模态对话框 xff0c 用于通知用户或询问用户一个问题并接收答案 消息框显示一个主要文本 xff0c 用于向用户提示某个情况 显示一个信息文本 xff0c 用于进一步解释警报或向用户询问问题 显
  • CCM-SLAM代码阅读

    ClintNode cpp boost span class token operator span shared ptr span class token operator lt span cslam span class token o
  • 树莓派之无屏幕无路由器网线直连树莓派(二)

    经上篇博客安装好系统后 xff0c 先不要拔出SD卡 xff0c 因为树莓派默认不开启ssh xff0c 所以先打开SD卡在里面新建文件命名为 ssh xff08 一定要小写 xff09 xff0c 然后找到cmdline txt文件打开并
  • SQL Server无法连接到服务器的解决方法

    SQL Server连接失败如何解决 xff1f 楼主安装了两次数据库 xff0c 都是官网最新的2017 Developer版本的 SSMS安装的是最新的18 3 经历了各种失败之后成功连接数据库 下面总结几种实用的方法给大家 xff0c
  • Android Studio如何实现音乐播放器(简单易上手)

    我们大家平时长时间打代码的时候肯定会感到疲惫和乏味 xff0c 这个时候一边播放自己喜欢的音乐 xff0c 一边继续打代码 xff0c 心情自然也愉快很多 音乐带给人的听觉享受是无可比拟的 xff0c 动听的音乐可以愉悦人的身心 xff0c
  • 一分钟学会Python中pip的安装与使用

    文章目录 一 简单介绍二 下载安装三 最常用命令1 显示版本和路径2 获取帮助3 升级 pip4 安装包5 升级包6 卸载包7 搜索包8 显示安装包信息9 列出已安装的包10 查看指定包的详细信息 一 简单介绍 pip 是 Python 包
  • 不清楚SBUS,这份SBUS协议详解请收藏

    1 简介 SBUS xff0c 全称Serial Bus xff0c 即串行通信总线 本质上是一种串口通信协议 xff0c 采用100K的波特率 xff0c 8位数据位 xff0c 2位停止位 xff0c 偶效验 xff0c 即8E2的串口
  • IDEA 创建Servlet,HelloWorldServlet(图文并茂,超级详细)

    第一步 xff1a 创建一个空的新项目 xff0c File gt New gt Project Empty Project 第二步 xff1a 生成一个module xff0c 项目上点右键 xff0c New gt Moudle 或 F
  • 教你彻底卸载Ubuntu双系统,去污不残留

    我们卸载Ubuntu双系统 xff0c 可能出于以下原因 xff1a span class token number 1 span span class token class name Ubuntu span 系统内核损坏无法正常进入 s
  • Python安装Pytorch教程(图文详解)

    最近人工智能等多门课需要复现论文 xff0c 近两年的论文很多都是基于Pytorch环境做的实验 xff0c 所以 xff0c 这里总结一下Pytorch的安装教程 xff0c 做好最快 最简单 最好地完成安装 本机环境Win10 43 1
  • Win10安装Ubuntu18.04双系统,图文详解,全网最详细教程

    博主经历过多次双系统的安装与卸载 xff0c 所以这次安装就记录下全过程 xff0c 能让后面的同学少走弯路 本教程对笔记本电脑单硬盘和双硬盘通用 安装目录 一 查看电脑信息1 BIOS模式2 查看硬盘数 二 制作系统盘1 下载镜像源2 制
  • Ubuntu18.04安装Ceres,图文详解

    视觉SLAM14讲 的第6章里面 xff0c 用到了Ceres库 xff0c 按照本书3rdparty提供的资源编译时 xff0c 会报错 xff0c 原因是和eigen3版本发生冲突 网上很多解决方法是重装eigen xff0c 尝试后也
  • Ubuntu20.04部署yolov5目标检测算法,无人车/无人机应用

    在FireFly RK3588开发板上烧录了Ubuntu20 04系统 xff0c 在此基础上线部署下简单的Python版本yolov5代码 xff0c 目前博主已全部转为C 43 43 版本了 xff0c 并且转化了pt模型为rknn模型
  • ubuntu查看cpu使用率

    rk3588上安装的ubuntu系统 xff0c 规格书上是8核CPU xff0c 希望跑算法时使用4核来跑 xff0c 所以需要查看cpu的使用情况 输入gnome system monitor xff0c 开启进程界面 xff1a 点击
  • 【视觉SLAM】MonoRec: Semi-Supervised Dense Reconstruction in Dynamic Environments from a Single Moving C

    Citations xff1a F Wimbauer N Yang L von Stumberg et al MonoRec Semi Supervised Dense Reconstruction in Dynamic Environme
  • Win10蓝屏问题:SYSTEM_THREAD_EXCEPTION_NOT_HANDLED

    最近一段时间 xff0c 我一直出现蓝屏的情况 xff0c 以为是 span class token constant CPU span 散热不行导致的重启 xff0c 因为比较频繁所以在此记录解决这个问题 xff0c 还是一贯的风格 xf

随机推荐

  • Android Studio实现文件管理器

    项目目录 一 项目概述二 开发环境三 详细设计1 布局设计2 程序运行时申请权限3 查看文件4 删除文件5 搜索文件6 新建文件 四 运行演示 一 项目概述 本次带来的文件管理器 xff0c 能够对SD卡的目录进行管理 主要功能包括新建文件
  • Failed to install the following Android SDK packages as some licences have not been accepted. bu

    报错信息 Android 开发者工具 Android开发者构建工具28 0 3 Android开发者平台28的协议都没有被接受 Failed to install the following Android SDK packages as
  • Jetson TX1 介绍

    前因 Jetson TX1 核心模块目前已经停产 xff0c 但是我们发现市面上有很多二手模块可以很容易获取 xff0c 同时 xff0c 英伟达对于Jetson TX1 的所有软件支持依然集成在了SDK manager中 xff0c 在最
  • Received status code 400 from server: Bad Request

    一 报错信息 FAILURE span class token operator span span class token class name Build span failed span class token keyword wit
  • Oracle VirtualBox虚拟机安装

    1 到官网下载虚拟机安装包 xff08 https www virtualbox org wiki Downloads xff09 2 下载后的样子 3 选择安装路径 4 选择要安装的功能 5 安装 6 安装完成
  • VirtualBox虚拟机安装Red Hat Enterprise Linux7.2

    1 首先安装好VirtualBox 2 下载好rhel server 7 2 xff0c 下载好长这样 3 点击新建 xff0c 在弹出窗口中输入名称 xff0c 选择类型和版本 xff0c 之后点击下一步 4 选择内存大小 xff0c 根
  • HTML 页面中的 target 用法

    值含义 blank在新窗口中打开链接 parent在父窗体中打开链接 self在当前窗体打开链接 此为默认值 top在当前窗体打开链接 xff0c 并替换当前的整个窗体 框架页 一个对应的框架页的名称在对应框架页中打开
  • VirtualBox挂载RedHat光盘

    1 使用root用户登录RedHat系统 xff0c 点击设备 gt 安装增强功能 2 安装增强功能后桌面会出现一个光盘标志 xff0c 弹出框点取消 3 为防止后续步骤出错 xff0c 此处重新分配光盘 点击设备 gt 分配光驱 xff0
  • RedHat系统使用yum安装软件

    使用yum命令安装软件 xff0c 此处以system config users为例 1 配置yum源配置文件 xff08 存放在 etc yum repos d文件夹下 xff09 xff1b 切换到 etc yum repos d文件夹
  • 初识HTML

    什么是HTML xff1f HTML 指的是超文本标记语言 HyperText Markup LanguageHTML 不是一种编程语言 xff0c 而是一种标记语言标记语言是一套标记标签 markup tag HTML 使用标记标签来描述
  • Window 安装MySQL8

    1 下载安装包 官网下载MySQL安装包 xff0c 下载地址 https dev mysql com downloads mysql 2 解压缩 将下载好的压缩包解压至你的安装目录 xff0c 我的路径为E tools MySQL ins
  • Windows 安装Navicat 连接MySQL

    1 下载Navicat Premium 进入官网https www navicat com cn download navicat premium下载Navicat Premium 2 安装 选择安装路径 然后一直点击下一步 xff0c 直
  • win10 安装Python3.8和pip

    下载安装包 1 进入Python官网https www python org xff0c 选择Windows 2 往下滑 xff0c 找到3 8 10 xff0c 选择Download Windows installer 64 bit xf
  • jeston TX1/TX2 系统迁移至SD卡的正确步骤

    如果是刚刚开始Nvidia jeston TX1 TX2 开发的初学者 xff0c 希望本文可以帮助节省时间 首先上张图 xff0c 完成配置后的 jeston TX1 载板使用的是作者自己设计的EdgeBox EHub tx1 tx2 E
  • win 10安装IPython

    什么是IPython Ipython是一种交互式解释器 Ipython的性能优于标准Python的shell IPython支持变量自动补全 xff0c 自动缩进 xff0c 支持 bash shell 命令 xff0c 内置了许多很有用的
  • Java连接MySQL数据库

    Java连接MySQL数据库 数据库帮助类DBHelper java 使用的JDBC驱动是 mysql connector java 8 0 25 jar span class token keyword import span java
  • ubuntu安装cmake

    参考 xff1a ubuntu安装cmake 陈 洪 伟的博客 CSDN博客 ubuntu安装cmake 注意 xff1a https cmake org download 下载cmake时 xff0c 要下载Source distribu
  • ADRC最速综合函数fhan实现

    ADRC最优综合函数fhan函数测试 fhan函数是ADRC的跟踪微分控制器的核心函数 xff0c 使得状态变量可以快速跟踪上系统输入 本例中 xff0c 设理想输入v 61 sin t 用状态变量x1跟踪输入 xff0c x2跟踪输入的导
  • 【日志】gazebo无法加载模型 & 黑屏 & ResourceNotFound &[gazebo-1] process has died [pid 11734, exit code 255]

    问题1 ResourceNotFound xacro 解决方法 sudo apt get install ros kinetic xacro 问题2 ERROR cannot launch node of type gazebo ros g
  • Robotics: Aerial Robotics(空中机器人)笔记(二):如何设计一架四旋翼无人机

    在这一章里 xff0c 我们将探索四旋翼如何飞行的 这章将会讲一些基本的力学原理以及如何设计无人机 上一章链接 xff1a Robotics Aerial Robotics xff08 空中机器人 xff09 笔记 xff08 一 xff0