Airsim环境下的px4硬件在环仿真


前言

提示:本文部分大部分内容都是通过多次实验测试总结得出,有些地方比较玄学,也不是很严谨,希望懂得的小伙伴能在评论区指出。
本文总结在使用Airsim进行px4的硬件在环仿真的过程中踩的一些坑,使用硬件在环的目的是为了测试一个mpc算法(uzh开源的一个mpc控制器,我其实不是很懂mpc,只是协助搭建了px4硬件在环仿真平台)。
涉及的内容包括px4在aisim环境中的硬件在环仿真px4的offboard模式实践


1、Airsim和硬件在环介绍

Airsim是微软团队研发的一款针对无人机,汽车等的开源仿真平台,依托于Ue4引擎,拥有很逼真的场景。经过将近5年的发展(截至本文),已经相对成熟了,airsim里面包含了丰富的传感器和API接口,可以满足大部分需求。
在应用方面,airsim在这几年常被用于视觉SLAM的仿真,相比于传统的Gzebo,虚幻引擎能提供更加真实场景,这对于视觉还是很友好的。关于在airsim中进行vins的仿真,如果有时间也会出文章。

  1. Airsim的安装问题可以参看AirSim官网,强烈建议在windows下安装。ubuntu下的版本有很多问题,不是很稳定,会出现同样的配置文件在ubuntu下不能运行,在window下可以运行的情况(对,我就是在这里浪费了很多时间)。注意虚幻4很大,好几十个G,一定要留够空间。
  2. 什么是硬件在环?Airsim的硬件在环策略: 关于px4的硬件在环怎么配置,可以看官网的介绍。Airsim的硬件在环策略其实就是将传感器的数据传给飞控,飞控里运行它自己的控制器,然后将电机信号返回给aisim进行仿真,思路很简单,在Airsim的论文中有更详细的介绍。
    Aisim论文中的硬件在环仿真框架

2、硬件在环测试的准备工作(硬件和软件)

本文的硬件在环硬件配置:两台电脑(一台windows跑airsim,一台ubuntu跑mavros),px4,usb转ttl接口(这个需要自己制作,很简单),遥控器和接收机(当然也可以使用aisim的api控制)。
整体框架是这样的:
仿真框架

2.1 usb-ttl转接线的制作:

usbttl转接线用于连接px4和ubuntu系统的电脑,用于和mavros通讯。
关于usbttl端口的接线:
在这里插入图片描述
这里是px4的telem端口和ch340型号的ttl端口的介绍,主要就是注意TX和RT要反着接,另外这个连接线的长度不能太长,经过测试,确实会影响到端口的波特率(虽然影响不是很大)。

2.2 px4的ttl端口波特率设置

在这里插入图片描述
这是对mav_x_rate这个参数的解释,所有消息的最大rate都设置为了MAV_X_RATE,当总和大于最大上限的时候,会被限流,默认值是80000.
在这里插入图片描述注意在连接mavros的时候,如果改了波特率,需要指定serial,我这里是ttyACM0(默认的波特率应该是57600),ttyUSB0也是常见的,可以用 ls /dev/tty*查看你插的usb是对应的哪个。
在这里插入图片描述

roslaunch mavros px4.launch fcu_url:=serial:///dev/ttyACM0:921600

3 硬件在环测试过程中的问题

  1. 第一个是坐标系的问题,AirSim中是NED,在配置文件中可以设置飞机的初始位置和姿态:

X, Y, Z, Yaw, Roll, Pitch: These elements allows you to specify the initial position and orientation of the vehicle. Position is in NED coordinates in SI units with origin set to Player Start location in Unreal environment. The orientation is specified in degrees.

  1. MAVROS中的坐标系是ENU(mavros中的世界坐标系是ENU),飞机机体坐标系是FLU(前左上),所以机头的朝向正东的时候,姿态是0001(四元数)。
  2. MAVROS的local_position的频率默认是30还是40(忘了),但是MPC需要一个较高的local_position的频率,所以需要在启动mavros之后用mavcmd提高频率,我这里给的1000(μs),其实根本达不到,所以会给最大频率。
rosrun mavros mavcmd long 511 31 1000 0 0 0 0 0
rosrun mavros mavcmd long 511 32 1000 0 0 0 0 0
  1. 用ssh控制机载电脑运行节点的时候,注意不要在terminal上高频的输出东西(比如几百hz的频率),会出现节点卡死的情况。(这个测试主要是为了模拟实机测试的时候,用PC端ssh控制机载电脑运行mpc)

4 AirSim ROS Wrapper

airsim运行在window系统上,但是我们的大多在ubuntu系统上运行ros,官网给了WSL的方案来解决这个问题。其实我们可以通过局域网(比如手机的热点)来连接ros节点和windows上运行的airsim。这里需要进行一些简单的设置:

1.在setting文件中加上“LocalHostIp”这一项,后面的ip写运行airsim的这台主机的ip。
2.在ubuntu上安装编译好airsim的ros包,安装教程在官网有。先setup.bash,然后build.sh,然后进入ros目录,catkin_make(或者catkin build)。在catkin_make的时候会报找不到#include这个头文件,需要在报错文件中做一下修改:

#include <filesystem>
namespace fs = std::filesystem;

改成:

#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;

3.在ubuntu系统的Document下面建一个AirSim文件夹,把window下的setting文件拷贝一份放在这里。
4.ubuntu中启动ros节点连接window中运行的airsim:

roslaunch airsim_ros_pkgs airsim_node.launch output:=screen host:=$WSL_HOST_IP

$WSL_HOST_IP这个就是你在setting文件中“LocalHostIp”指定的ip,比如我的setting中是这样设置的:

{
  "SettingsVersion": 1.2,
  "SimMode": "Multirotor",
  "LocalHostIp": "192.168.55.***",
  "Vehicles": {
    "PX4": {
      
      "VehicleType": "PX4Multirotor",
      "UseSerial": true,
      "LockStep": true,
      "ClockType": "SteppableClock",
      "DefaultSensors": {
        "Barometer": {
        ***下面省略

如果ros节点一直显示waiting for connected 那就是没连上,检测下连接的网络是否是局域网。

5 AirSim ros节点中的真实轨迹的坐标系说明

关于AirSim ROS Wrapper Node的详细内容可以自己看官网,这里只对其中的真实轨迹这个topic做一些解释,主要涉及到了它的坐标系规定,同时和Mavros中的坐标系规定做了一些比较。
官网文档中关于ros发布的真实轨迹的解释:

/airsim_node/VEHICLE_NAME/odom_local_ned (nav_msgs/Odometry Odometry) in NED frame (default name: odom_local_ned, launch name and frame type are configurable) wrt take-off point.

这个真实轨迹的坐标系规定是NED(北东地,即x正方向朝北,y向东,z指向地),以启动airsim时的起飞点作为坐标系原点。airsim中的机体坐标系的定义是FRD(前右下,也就是x轴朝前,y轴正方向向右,z轴正方向向下)。
在Mavros中,/mavros/local_position/pose这个topic是全局坐标系下飞机的位姿,这个坐标系的规定是ENU(东北天),而机体坐标系的规定是FLU(前左上,x正方向朝前,y向左,z朝上)。
下面有一个简图帮助理解:请添加图片描述
所以在airsim仿真的时候,开始时机体朝北,那airsim的真实轨迹中的姿态是(0,0, 0, 0)四元数,但mavros中的local_position不是,如果起飞时机头朝东,则mavros中的local_position的姿态是(0,0,0,0)。

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
安装PX4环境仿真工具需要以下步骤: 1. 安装依赖项:首先,确保你的系统已安装了一些必要的依赖项,如git、cmake、Ninja等。可以使用以下命令来安装这些依赖项(以Ubuntu为例): ``` sudo apt-get update sudo apt-get install git cmake ninja-build ``` 2. 克隆PX4仓库:使用以下命令将PX4仓库克隆到本地: ``` git clone https://github.com/PX4/PX4-Autopilot.git --recursive ``` 3. 安装模拟器:PX4支持多种仿真器,其中较常用的是Gazebo和SITL(Software In The Loop)。你可以选择其中一个进行安装。 - 安装Gazebo:Gazebo是一个强大的机器人仿真器。你可以使用以下命令安装Gazebo(以Ubuntu为例): ``` sudo apt-get install gazebo9 libgazebo9-dev ``` - 安装SITL:SITL是PX4提供的轻量级仿真工具。你可以使用以下命令安装SITL(以Ubuntu为例): ``` sudo apt-get install libopencv-dev ``` 4. 构建PX4:进入到PX4仓库的目录,执行以下命令进行构建: ``` cd PX4-Autopilot make px4_sitl_default ``` 这将编译PX4并生成仿真器。 5. 运行仿真器:完成构建后,你可以运行PX4仿真器。如果使用Gazebo,可以执行以下命令: ``` make px4_sitl gazebo ``` 如果使用SITL,可以执行以下命令: ``` make px4_sitl ``` 这将启动PX4仿真器,并提供一个仿真环境。 这些步骤将帮助你安装PX4环境仿真工具。请根据你的需求选择适合的仿真器,并按照上述步骤进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫星星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值