06.5 Code

2023-05-16

06.5 Code

  • 推力(force)
  • 推力的应用
  • 旋翼的气动阻力
  • 空气阻力矩
  • 滚转力矩
  • 电机的转速

推力(force)

// force = 电机的转速 * |电机的转速|(带符号的转速)* 常数(用于产生拉力的气动常数) ===>>>> `T_i`
  double force = real_motor_velocity * real_motor_velocity * motor_constant_;

转速怎么来的?

// 转速 = motor_rot_vel_ (从gazbo中订阅得到到的)* 系数(为什么要系数?出于仿真器的可视化角度来说:比如转速很高,如80r/s,在gazebo中,界面的刷新率到不了这么高,fps可能20...;图像的刷新会出问题)
  double real_motor_velocity = motor_rot_vel_ * rotor_velocity_slowdown_sim_;
//从gazbo的关节(能旋转的东西,电机)得到的转速
 motor_rot_vel_ = joint_->GetVelocity(0);

推力的应用

// 实际scalar复杂,与不同的旋翼、飞行的方向都有关;这里简化(当你速度为25m/s时,scalar为0:25m/s时,拉力为0,速度越大,拉力越小)
double scalar = 1 - vel / 25.0; // at 50 m/s the rotor will not produce any force anymore
// Apply a force to the link. (link:三维软件中很常见,四旋翼可以认为是机体的link)
// 给机臂加了一个力 
// 力是矢量,给link_ 加上的是3维的向量
// scalar 系数;关于前进比
  link_->AddRelativeForce(ignition::math::Vector3d(0, 0, force * scalar));

旋翼的气动阻力

//未加风速
  //ignition::math::Vector3d body_velocity = link_->WorldLinearVel();
  // ignition::math::Vector3d body_velocity_perpendicular = body_velocity - (body_velocity * joint_axis) * joint_axis;
//加上风速
  // 风速 = 机体速度 - 风速
  ignition::math::Vector3d relative_wind_velocity = body_velocity - wind_vel_;
  ignition::math::Vector3d body_velocity_perpendicular = relative_wind_velocity - (relative_wind_velocity.Dot(joint_axis)) * joint_axis;
// air_drag旋翼的气动阻力沿桨平面方向,与飞行方向相反,是阻力
// 转速 * 系数 * v垂直(若无风,v是相对地面的速度;若有风,v是相对风的速度。v垂直是旋翼平面的分量(垂直于旋翼法向量的方向,即旋翼平面的方向))
  ignition::math::Vector3d air_drag = -std::abs(real_motor_velocity) * rotor_drag_coefficient_ * body_velocity_perpendicular;
// air_drag旋翼的气动阻力;忽略机身气动阻力即对应 =====>>>>> `H_i`
// Apply air_drag to link.
  link_->AddForce(air_drag);

空气阻力矩

// 声明时就定义,用于偏航的空气阻力矩
// drag_torque 空气阻力矩;方向是垂直降平面  ====>>>> `M_D,i`
// 方向 * 拉力 * 系数
  ignition::math::Vector3d drag_torque(0, 0, -turning_direction_ * force * moment_constant_);

滚转力矩

  // - \omega * \mu_1 * V_A^{\perp}
  // 转速 * 气动系数 * v垂直
  rolling_moment = -std::abs(real_motor_velocity) * rolling_moment_coefficient_ * body_velocity_perpendicular;
// 赋值给刚体  
  parent_links.at(0)->AddTorque(rolling_moment);

电机的转速


for (int i = 0; i < input_reference_.size(); i++) {
    if (armed) {
    // 先可认作电机转速input_reference_
    // 电机转速 
    // zero_position_armed_[i]:刚一解锁就开始转了,可认为是纵截距
    // input_scaling_[i] 自己的系数,油门要乘的系数
    // actuator_controls[input_index_[i]] Pixhawk输出给电调的 油门(0,1) ;若是舵机(-1,1)/ input_offset_[i]:偏置
    // 刚解锁时
      input_reference_[i] = (actuator_controls[input_index_[i]] + input_offset_[i])
          * input_scaling_[i] + zero_position_armed_[i];
      // std::cout << input_reference_ << ", ";
    } else {
      input_reference_[i] = zero_position_disarmed_[i];
      // std::cout << input_reference_ << ", ";
    }
  }
}

//...

// set joint positions
  for (int i = 0; i < input_reference_.size(); i++) {
    if (joints_[i] || joint_control_type_[i] == "position_gztopic") {
      double target = input_reference_[i];
      if (joint_control_type_[i] == "velocity")
      {
        double current = joints_[i]->GetVelocity(0);
        double err = current - target;
        // 模仿了电调对于电机旋转的反馈控制
        // 希望电机的转速对应到电调实际给电机的转矩,再把该转矩给到真正的刚体轴
        // gazbo会去模拟,给到这样一个力矩后,电机的轴和悬疑怎么转;之后还会反馈回来;然后不断完成更新……
        double force = pids_[i].Update(err, _dt);
        // SetForce 设置了滞后
        joints_[i]->SetForce(0, force);
      }
// 对应旋翼的转速
``


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

06.5 Code 的相关文章

  • VS CODE 页面没暂存/提交就放弃更改了怎么还原

    如图所示 xff0c 不小心手滑将还没有暂存的页面点了放弃更改 xff0c 过了两天才发现搞错了 xff0c 这时候怎么办呢 xff1f 不用担心 xff0c 找到这个页面 xff0c 直接ctrl 43 z可以还原回来 亲测有效
  • Qt播放视频报错 DirectShowPlayerService::doRender: Unresolved error code 0x80040266

    没有插件报错 xff1a DirectShowPlayerService doRender Unresolved error code 0x80040266 如果文件路径不对或者文件名是中文的 xff0c 则会显示如下错误 xff1a Di
  • 再写ubuntu 下 VS code的C++配置——gcc和clang

    喵哥在去年写了一篇关于VScode配置的文章 xff0c Ubuntu vscode的C 43 43 tasks json xff0c 当时只是记录了如何配置 xff0c 但是没有说为什么这么配置 xff0c 而且只有gcc的配置 xff0
  • VSCode(Visual Studio Code)整合Git

    一 xff1a 初始化git插件 在拓展商店中搜索 git xff0c 在下发出现的列表中 xff0c 选择 Git History xff0c 在右边出现的界面 xff0c 点击 安装 即可 本人已经安装 xff0c 安装按钮已无 xff
  • VS Code C++ 代码格式化方法(clang-format)

    前提条件 安装扩展C C 43 43 xff0c 扩展程序将自动安装clang format clang format默认安装路径为c Users wqr57 vscode extensions ms vscode cpptools 0 1
  • 汉字编码标准与识别(一)代码页(Code Page)初识

    BBS水木清华站 精华区 发信人 yanglc 魂归燕园 别理我 xff0c 烦着呢 信区 Linux 标 题 汉字编码标准与识别 一 发信站 BBS 水木清华站 Sat Apr 29 17 19 05 2000 http www linu
  • VS Code中的GIT操作

    一 前言 我们在进行项目开发时都免不了与GIT打交道 xff0c 但是面对各种的难记的GIT命令总是手足无措 xff1b 还好编译器中内置了GIT的仓库的一系列操作 xff0c 掌握了可视化的操作就不用担心记不住GIT命令符了 下面主要介绍
  • VS Code Remote SSH远程连接异常:Resolver error: Error: Running the contributed command

    VS Code Remote SSH远程连接异常 问题描述原因分析解决方案扩展Remote SSH首次连接插件做了什么Remote SSH对于远程Linux的要求 问题描述 通过VS Code插件Remote SSH连接一台新主机时 xff
  • VS Code创建、调试ROS项目

    前言 xff1a 在vs code下配置ROS项目开发的环境 包括catkin创建编译工作空间 xff0c 创建ROS项目 xff0c 调试ROS节点 一 创建工作空间 首先创建一个cMake工作空间 xff0c 用到了catkin mak
  • vs code 运行C语言并调试

    vs code 运行C语言 2022 03 19 mingw64下载地址更新 xff08 window xff09 task json文件修改launch json文件修改 更新版 xff08 window xff09 1 下载MinGW编
  • 用VS Code写C语言无法使用`__attribute__(packed)`

    今天 xff0c 在Windows上写C语言程序 xff0c 结果编写的结构体总是无法使用 attribute packed xff0c 导致读取的二进制文件字节对不上 检查CMakeLists txt和代码均没有发现明显错误 typede
  • 报错{“msg“:“invalid token“,“code“:401}问题的解决

    报错 msg invalid token code 401 问题的解决 xff1a 解决办法 xff1a 将精确的路由放在最上面 xff0c 模糊的路由放在最下面 xff0c 防止精确的路由被覆盖
  • opencv_tutorial_code学习——canny边缘检测后findContours

    tutorial code ShapeDescriptors findContours demo cpp 步骤 xff1a 1 灰度化 2 滤波 3 canny边缘检测 4 findContours canny output contour
  • 使用VS CODE+PlantUML高效画图

    使用VS CODE 43 PlantUML高效画图 自从发现了plantuml写脚本画图的方式之后 xff0c 爱上了画图 环境 xff1a MAC 前言 本文多数内容引用自官网文档和其他人的教程 xff0c 并非本人原创 xff0c 也谈
  • websocket连接状态码

    最近在做websocket 需要用到这些 查资料记录下 官网 https developer mozilla org zh CN docs Web API CloseEvent CloseEvent code 只读 返回一个 unsigne
  • IOU

    IOU 即交并比 应用 NMS 过滤重叠框 mAP import numpt as np def get IOU pred bbox gt bbox ixmin max pred bbox 0 gt bbox 0 iymin max pre
  • pytorch网络m参数量、flops计算方法

    1 from thop import profile x torch randn 1 3 256 256 flops params profile self modelG inputs x print flops is 2fM flops
  • Transformer代码讲解(最最最最......详细)

    Transformer代码讲解 最最最最 详细 整个代码主要分为两部分去讲解 一 完整代码 二 部分代码剖析 1 主函数if name main 2 从整体网路结构来看 分为三个部分 编码层 解码层 输出层 3 Encoder 部分包含三个
  • 【C++】在线IDE

    1 洛谷在线IDE https www luogu com cn ide 2 菜鸟工具 https c runoob com compile 12 3 Cloud Studio https cloudstudio net
  • 使用 cloc 统计你的代码量

    转自 使用 cloc 统计你的代码量 今天发现一个特别好用的工具 cloc 可以用它统计代码的行数 它可以识别多种开发语言 并在计算的时候忽略掉注释和空行 我记得我上次申请软件著作权的时候 申请表格中要求提交代码量 当时为了计算行数 我写了

随机推荐

  • QT 笔记3 | Qt设计师使用 Qt创造器使用

    六 Qt设计师使用 designer 案例1 xff1a 使用设计师重构加法计算器 1 创建工程目录 mkdir Calculator2 2 进入工程目录 xff0c 执行 designer 启动设计师 1 xff09 在新建窗体界面 xf
  • QT 笔记5 |Qt多线程(QThread)

    一 Qt多线程 QThread 1 创建线程方法1 xff1a QObject moveToThread class Myclass public QObject Q OBJECT public slots void func void 耗
  • QT 笔记6 | Qt网络编程

    回顾 xff1a 1 Qt多线程 QThread 1 xff09 创建线程 方法1 xff1a moveToThread 方法2 xff1a 继承QThread xff0c 重写run函数 2 xff09 线程同步 互斥锁 xff1a QM
  • QT 笔记7 | UDP编程

    回顾 xff1a 1 xff09 控件类 QT 43 61 widgets QApplication Qt的gui应用程序 QWidget 控件基类 QLabel 标签 QPushButton 按钮 QDialog 对话框 QMainWin
  • 学习c语言

    今天学习了if语句和 xff45 xff4c xff53 xff45 运用 xff43 语言更加顺手 xff0c 之前一些都能实施 xff0c 真是太开心了 include lt stdio h gt int main 初始化 int pr
  • 求符合给定条件的整数集(做题)

    题目如上 xff1b 首先我们先想思路 xff1a 先来一个输入 xff0c 读入这个数 xff0c 然后我们需要三个变量来储存这三个数 xff1b 然后我们遍历所有的组合 xff0c 这个依靠循环 接下来是代码 xff1a include
  • 水仙花数(做题)

    代码如下 xff1a include lt stdio h gt int main int a scanf 34 d 34 amp a float t t 61 0 1 while a gt 0 t 61 t 10 a 判断几位数 int
  • 一分钟了解动态内存分配

    谈到这 xff0c 必然离不开malloc函数 在上面可以看出此函数需要一个头文件 include lt stdilb h gt 而且返回类型是void 传进去的是空间大小 xff0c 此函数申请的空间是字节为单位的 这其中的就分配了100
  • 动态内存分配深究

    接下来我们将探究以下三个问题 xff1a 1 相邻两次malloc得到的空间是否是连续的呢 xff1f 2 你得到的空间的实际大小是否就是你要求的大小呢 xff1f 3 如果你malloc零长度会得到什么结果呢 xff1f 第一个问题 xf
  • 同一个页面不打开两次

    lt script language 61 34 javascript 34 gt function popwin3 path window open path 34 cart 34 34 height 61 520 width 61 52
  • 超易懂!二分查找 详析

    二分算法的 本质 是 xff1a 假如我们可以找到事物的 某种性质 xff0c 这种性质 可以将区间一分为二 xff0c 一半满足 xff0c 一半不满足 我们就可以二分 另外 xff0c 有 连续性 必可以 二分 二分模板一共有两个 xf
  • 手摸手 Spring Cloud Gateway + JWT 实现登录认证

    你好 xff0c 我是悟空 前言 上篇我已经讲解了 Spring Cloud 的原理和实战 xff0c 这次就要结合 JWT 来实现登录认证的功能了 本文已收录至 深入剖析 Spring Cloud 底层架构原理 xff0c 已更新 18
  • 百行代码实现VLC简易视频播放器【VLC环境配置过程+可执行源码注释完整】

    文章目录 什么是VLC x1f680 VLC 库的集成 VLC环境配置演示 win10系统 43 vs2017 43 win64 x1f34e VLC 库的基本使用 x1f382 视频播放器实现 自定义函数Unicode2Utf8讲解 x1
  • HttpWebRequest 使用NetworkCredential 进行域认证下载时不成功 的解决方案

    最近在项目中使用pWebRequest 使用NetworkCredential 进行域认证下载时老不成功 xff0c 最后Google了解决方案 xff0c 发现几乎所有讨论的方案都不成功 xff0c 只好埋头自己解决 xff0c 最后总算
  • Firefox 的用户脚本管理器 greasemonkey 的使用一例

    一 什么是greasemonkey Firefox 的用户脚本管理器 greasemonkey 使你可以向任何网页添加DHTML语句 用户脚本 来改变它们的显示方式 就像CSS可以让你接管网页的样式 xff0c 而用户脚本 User Scr
  • Apache Http 服务器安装教程

    我在学习网络开发的时候需要从服务器上获得json数据 xff0c 所以在自己的电脑上安装了一个本地服务器 xff0c 其中遇到的一些问题 xff0c 在这里都写出来 首先 xff0c 我们需要访问apache http服务器的下载网页 xf
  • STM32的UART奇偶校验注意

    STM32的UART奇偶校验注意 STM32的UART在初始化时 xff0c 我们通常用到最多的就是无校验位 xff0c 1停止位 但是我在项目中也遇到某些芯片通信用的需要奇校验或者偶校验 xff0c 这里需要特别注意的是STM32中开启奇
  • Realtek RTL8762C/Realtek RTL8762D学习记录

    本人基于日常工作整理编写的8762C FAQ文档 xff0c 记录RTL8762C 8762D系列软件开发常见问题以及解决方案 希望它能发挥更多作用 帮到有需要的朋友 关键字 xff1a 8762CMF 8762CK 8762CJ 8762
  • 蓝牙BLE---DA14683的SPI主机通信讲解

    DA14683的SPI主机通信例程 Date 2018 12 19 Create Jim 导入例程 首先导入ble peripheral例程或者pxp reporter例程 再到以下位置打开硬件SPI的宏定义 xff1a 获取SPI例程源码
  • 06.5 Code

    06 5 Code 推力 force 推力的应用旋翼的气动阻力空气阻力矩滚转力矩电机的转速 推力 force span class token comment force 61 电机的转速 xff5c 电机的转速 xff5c xff08 带