168-HITL-dev-manual

2023-05-16

HITL todo

使用mavlink收ref和imu
可以选择发出pwm和torque;发出torque的话,没有考虑pwm的饱和;发出pwm的话,电机的参数也不准。
参考GAAS

FC

写收的imu,gps,姿态三个接口,并在程序中可以切换,最好可以用遥控器控制HIL mode开关;
写发的torque,pwm的接口

mavros

打包imu,gps用mavlink发送;
解包torque发给gazebo;
真值和pva ref已有现成程序。
注意坐标系转换!

168通信开发流程

目标:

  1. 168发送torque (3 linear, 3 angular)到CPC,CPC使用MAVROS接收信息再转发到gazebo。
  2. CPC将gazebo的sensor msg 打包发送给168.
    因为第一个目标涉及了很多方面,所以比较困难,下面对此进行步骤分解。

飞控端:参照官方教程

在这里插入图片描述

CPC端

  • 在/opt/ros/kinetic/include/mavlink/v1.0/pixhawk 中新建 mavlink_msg_xxx.h, 根据PX4确定 MAVLINK_MSG_ID_XXX ;
    在这里插入图片描述

  • 可以仿照mavlink_msg_local_position_ned.h编写对应函数,比如编写mavlink_msg_xxx_decode() 函数,消息解包后,给ros msg赋值;
    在这里插入图片描述

  • 在mavros中编写对应plugin,主要是定义handler:
    在这里插入图片描述

gazebo端
目前还没有直接用torque的控制器,正在开发中。

168通信开发详细版

首先感谢Shupeng哥的详细讲解~完全讲通了mavlink, mavros,px4之间的通信链路。下面根据我们的目标: 自定义168飞控和电脑(仿真器)之间的通信,记录下分享会内容。
视频地址

  • 太长不看版:
    修改xml–>mavlink generator生成header–>header放到px4和/opt/ros/kinetic/include/mavlink 中(覆盖)–> 编写mavros plugin–>编写飞控上的uORB handler。

目前进度

  1. 仿真器wrench controller开发完成,可以直接发送力和力矩控制飞机。
  2. 仿真器可以发送virtual imu 到mavros,但是否飞控成功接收,还有待测试。
    请大家在这里下载已开发版本,bitbucket
    这里我们需要解决的是,新定义一个类似ROS中的wrench格式消息,内容是6个float:[force x, force y, force z, torque x, torque y, torque z],从PX4计算后传到mavros中,再传给仿真器的 wrench controller. 根据实际情况,这里的力都是在body frame下。

step 1:自动生成mavlink

mavlink官网上,可以看到一个xml,里面定义的是PX4的message。
对于168,我们也有类似xml。文件地址
注意,因为我们用的是Protocal 1.0, 所以msg id最好在256以内。
在这里插入图片描述
我们可以找一个现在飞控中不用的msg id,比如在这里插入图片描述
然后把名字,data type之类的都修改掉,填上我们想要的消息格式。这里,我们定义一个类似ROS中的wrench格式消息,内容是6个float:[force x, force y, force z, torque x, torque y, torque z]。

之后,可以根据这个网站mavlink generator,把xml转换成mavlink,就会得到mavlink/v1.0/,里面是一堆header。在header中的pixhawk文件夹,可以根据名称找到 mavlink_msg_xxx.h,里面有我们需要用的函数。

之后,可以把mavlink文件替换\mavros\libmavconn\include\mavlink。下面我们转战mavros!

step 2:注册plugin

启动mavros会启动什么?我们先进入mavros.cpp看一下。这里定义了两个比较重要的link,一个是gcs_link,和地面站通信所用,一个是fcu_link,和飞控通信所用。
在这里插入图片描述
在serial.cpp中,代码在收到msg之后,就会进入两个callback函数类似的东西:一个是把raw msg直接变成ros msg发出去,这个一般不用;另一个是进入plugin_route_cb,这个就会根据msg id来trigger对应的plugin。
在这里插入图片描述

所以我们要新注册plugin,来处理这些msg。大概分三步:

  • 写plugin源文件
    比如这里以GPS为例,注意头文件和尾部:
    在这里插入图片描述
    在这里插入图片描述
    之后,需要根据message_id定义message_handler.
    在这里插入图片描述
    我们目的是接收wrench数据,然后用rostopic发出来。

  • 修改Cmakelists.txt
    在这里插入图片描述

  • 修改mavros_plugins.xml
    在这里插入图片描述

step 3:修改uORB

这里需要jiahao补充下,可参照PX4 GUIDE

gazebo models

在hector_quadrotor里,空气动力学的计算在这里
在这里插入图片描述
具体作用在link上,这是gazebo中机体现在的状况,我们可以用force和wrench改变他们:
在这里插入图片描述
从controller那里收到wrench后,直接可以用下面两个API传给模型。这两个函数应该是gazebo内置的。

初步推断,sitl_gazebo的动力学解算在这里:
在这里插入图片描述

主要过程是在update()函数中,算出force和moment之后,调用gazebo API,对环境中的刚体施加力和力矩:
在这里插入图片描述

后面的dynamics应该需要查看gazebo源代码,比如我们看关于link的dynamics,可以发现每一种solver都对应一种link。
在这里插入图片描述

根据不同的机械结构,比如关节,铰链等等,有不同的dynamics,这里四旋翼可以就简化成link计算。
在这里插入图片描述
最后,运行的时候plugin怎么调用的?简单来说,是被编译成了一个.so文件,然后我们使用.sdf文件来找到这个.so文件,就可以调用其作为一个标准的ros插件。具体可以参考gazebo

在这里插入图片描述

XTDRONE环境配置

在实验室服务器上配置,出了很多问题
gazebo需要升级到9.9以上https://answers.gazebosim.org//question/24645/how-to-update-gazebo-900-to-latest-after-ros-melodic-full-desktop-install/
ignition_math库需要升级
总之就是没有按文档。。正确做法一定不能安装ros desktop-full,只能安装desktop,之后再安装gazebo!

xtdrone–cpc联调

mavros中的PositionTarget类型,和common_msg一样,甚至更多
https://github.com/mavlink/mavros/blob/7a883b7ab6bcb6f2845c186998fa622d9ee1609c/mavros/src/plugins/setpoint_raw.cpp
在这里插入图片描述
连上motion planning的流程是,首先要arm t

cd ~/XTDrone/control/
python multirotor_keyboard_control.py iris 1 vel

也就是有/mavros/cmd/arming service
然后关掉这个py,开始运动规划发送PositionTarget 到/mavros/setpoint_raw/local

HITL gazebo

文件地址
在Load()里读取了sdf文件,并且定义了一堆virtual sensors callback
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述如果没有enable serial,那么就会配置tcp udp

对应的,sdf应该修改为
在这里插入图片描述
然后看看update函数
在这里插入图片描述
这里好像是把QGC信息传到串口?
在这里插入图片描述

这儿把活都干完了。可以看到,不光把sensor msg传到了px4,还把真值也传过去了。
在这里插入图片描述
看看handle_actuaor_control()
根据是否arm,来设定input ref
在这里插入图片描述
然后这个函数应该就是从飞控接收HIL_ACTUATOR的。
在这里插入图片描述
mavlink_interface.cpp中找到这个函数:(xtdrone中的版本不是master,所以写在了一起)
在这里插入图片描述

那么看看handle_control()。这里根据input_reference,用了一个pid来控制gazebo中的joint(为啥不是link?)
在这里插入图片描述

现在的问题是,

  1. hitl没有办法进入offboard,也连不上mavros
  2. sitl的set positiontarget不能用,要用enu…
    todo
  3. 多机话题匹配,communication挂了
  4. motion 坐标转换?
    coordinate frame
    在这里插入图片描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

168-HITL-dev-manual 的相关文章

随机推荐

  • 在本地shell脚本中ssh到远程服务器并执行命令

    shell远程执行 xff1a 经常需要远程到其他节点上执行一些shell命令 xff0c 如果分别ssh到每台主机上再去执行很麻烦 xff0c 因此能有个集中管理的方式就好了 一下介绍两种shell命令远程执行的方法 前提条件 xff1a
  • Catkin_make执行过程

    这是一个比较复杂的问题 xff0c 但是有时候会有莫名其妙的编译错误 xff0c 在找错误的过程中会非常需要了解这个过程 1 模板文件 首先说一下 in文件 在catkin的目录中有许多 in文件 这些都是模板文件 xff0c 以 opt
  • Docker用yum安装步骤

    Docker用yum安装步骤 一 安装docker xff08 完整版 xff09 1 Docker 要求 CentOS 系统的内核版本高于 3 10 uname r 2 使用 root 权限登录 Centos 确保 yum 包更新到最新
  • 1024,如果全世界程序员都消失了,会怎样?

    这两天 xff0c 有一个话题引起了程序员的广泛讨论 xff1a 年薪80W程序员相亲被鄙视 某知名互联网社区 xff0c 一网友发帖 xff0c 自己年薪80W去相亲 xff0c 竟然被鄙视不如在二本学校教书的大学老师 估计令他没想到的是
  • 非线性控制1.1——稳定与跟踪问题概念

    一 非线性控制系统的两大任务 1 稳定 xff08 或称调节 xff09 问题 稳定问题是要使得闭环系统的状态稳定在一个平衡点附近 对于稳定问题 xff0c 系统的输出不一定要有具体的物理意义 xff0c 此时可以借助输入 输出状态线性化方
  • 在 linux ubuntu 18.04 上运行QQ音乐

    在 linux ubuntu 18 04 上运行QQ音乐 我使用的组合为 ubuntu 18 04 43 wine stable 3 6 43 QQ音乐17 63 xff0c 未在其它平台做过尝试 一直想在ubuntu上好好听音乐 xff0
  • 非线性控制1.0——自适应控制和鲁棒控制

    1 鲁棒控制和自适应控制的联系与区别 鲁棒控制是以目的定义的控制方法集合 xff0c 自适应控制是以手段定义的控制方法集合 xff0c 这两种控制都是为了应对 当数学模型不能精确表示实际系统的情况下 狭义的鲁棒控制是指H2 xff0c Hi
  • 非线性控制2.0——鲁棒控制之H无穷控制器设计

    一 基本概念 对于图1所示系统 xff0c u为控制输入 xff0c y为测量输出 xff0c z为被调输出 xff0c w为干扰输入 xff0c 由输入u xff0c w到输出y xff0c z的传递函数G成为增广被控对象 xff0c 控
  • 非线性控制1.0——控制理论生态及结构

    一 控制理论地图 二 控制理论发展及结构 上图应用于 xff1a https www zhihu com people xiang yi 55 49 answers
  • 四旋翼飞行器——飞行原理

    1 机械结构 旋翼对称分布在机体的前后 左右四个方向 xff0c 四个旋翼处于同一高度平面 xff0c 且四个旋翼的结构和半径都相同 xff0c 四个电机对称的安装在飞行器的支架端 xff0c 支架中间空间安放飞控板 结构形式如图 1 1所
  • 四旋翼飞行器——非线性化模型

    一 建模思路 该模型目标控制量是机体相对于地面坐标系的线速度的三个分量Vx xff0c Vy xff0c Vz xff0c 而我们能控的实质上只有四个电机的转速W1 xff0c W2 xff0c W3 xff0c W4 怎样由输入一步步推导
  • 故障诊断4—龙伯格状态观测器设计

    1 龙伯格状态观测器概念 已经线性系统模型如下 xff1a 当系统状态量难以获取 xff0c 但实际控制中又需要利用系统状态量时 xff0c 如何通过输入量和输出量重构系统状态量 xff1f 这便是龙伯格状态观测器设计初衷 xff0c 将实
  • 故障诊断5——状态观测器和输出观测器

    1 状态观测器分类 在现代控制理论中 xff0c 控制系统的基本结构和经典控制理论一样 xff0c 仍然是由受控对象和反馈控制器两部分构成的闭环系统 不过在经典理论中习惯于采用输出反馈 xff0c 而在现代控制理论中则更多地采用状态反馈 由
  • GPS漂移和定位不准确的解决办法

    解决GPS漂移主要从两方面入手 xff1a 一 主系统的设计主要减少在近距离内对GPS信号的干扰 二 软件处理 软件处理主要集中在导航软件处完成 xff0c 导航软件会将坐标定位在道路之内 xff0c 如果GPS接收到的信号超出道路的半径范
  • AI---是什么?可以做什么?

    1 AI的项目简单介绍 图像识别 描述 xff1a 给定图片 xff0c 识别图片中有什么 xff1f 算法 xff1a KNN CNN 情感分析 描述 xff1a 判断文本包含的情感是正面 负面还是中性 关键 xff1a 文本如何表示成向
  • realsense的安装问题

    realsense的安装问题 0 旁白1 SDK的安装2 python开发包的安装3 nodejs开发包的安装方法1 xff1a 方法2 xff1a 接手一位同事的realsense相关项目 xff0c 先配置一个环境 xff0c 出现不少
  • 二叉排序树的删除

    xff08 网上讲二叉排序树删除的资料很少 xff0c 这篇很不错 xff01 转自 xff1a http bbs csdn net topics 110010437 xff09 二叉排序树的删除 xff1a 对于一般的二叉树来说 xff0
  • 分布式锁学习

    概述 分布式锁是控制分布式系统之间同步访问共享资源的一种方式 在分布式系统中 xff0c 常常需要协调他们的动作 如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源 xff0c 那么访问这些资源的时候 xff0c 往往需要互斥来
  • 无人机飞行控制

    intro 这篇笔记记录了无人机飞控算法和px4相关 control algorithm adrc 周立功讲adrc 参数整定 xff1a Scaling and Bandwidth Parameterization
  • 168-HITL-dev-manual

    HITL todo 使用mavlink收ref和imu 可以选择发出pwm和torque 发出torque的话 xff0c 没有考虑pwm的饱和 发出pwm的话 xff0c 电机的参数也不准 参考GAAS FC 写收的imu gps xff