查看: 643|回复: 1

airsim和Ardupilot一起使用

[复制链接]

49

主题

856

帖子

1709

积分

金牌飞友

Rank: 6Rank: 6

积分
1709
QQ
飞币
846
注册时间
2017-8-23
发表于 2022-10-27 06:03:13 | 显示全部楼层 |阅读模式
注:主要参考文件:将 SITL 与 AirSim 结合使用  (ardupilot.org)

1.概述

在继续之前,请确保您已设置ArduPilot SITL,完成虚幻环境设置下载二进制文件并验证两者是否单独工作。如果您不熟悉 SITL,请参阅使用 SITL 的示例。
注意
▲在 UE 编辑器中运行:转到Edit->Editor Preferences 框中 ,在Search框中键入CPU并确保Use Less CPU when in Background取消选中
▲2.如果您使用 WSL2在 Windows下运行ArduPilot和AirSim,请参阅有关如何连接它们 https://discuss.ardupilot.org/t/gsoc-2019-airsim-simulator-support-for-ardupilot-sitl-part-ii/46395/5。(注:windows上跑linux用虚拟机好还是WSL好?_微个日光日的博客-CSDN博客_wsl和虚拟机区别)
AirSim的settings.json文件指定车辆及其各种属性。有关可用选项,请参阅页面。它的存储位置:
Windows:Documents\AirSim;
Linux:~/Documents/AirSim
该文件采用常用的 JSON 格式。在第一次启动时,AirSim将创建没有设置的settings.json文件。
2 Launch Copter SITL

2.1设置settings.json

对于使用ArduCopter,设置如下:
{
"SettingsVersion": 1.2,
"LogMessagesVisible": true,
"SimMode": "Multirotor",
"OriginGeopoint": {
"Latitude": -35.363261,
"Longitude": 149.165230,
"Altitude": 583
  },
"Vehicles": {
"Copter": {
"VehicleType": "ArduCopter",
"UseSerial": false,
"LocalHostIp": "127.0.0.1",
"UdpIp": "127.0.0.1",
"UdpPort": 9003,
"ControlPort": 9002
    }
  }
}注意:
▲早期,在设置中使用了SitlPort代替ControlPort。此更改适用于最新的 AirSim 主文件和二进制文件 v1.3.0 及更高版本。该更新是向后兼容的,因此即使您正在使用SitlPort,它也可以正常工作。
2.2启动AirSim

2.3启动ArduPilot SITL

sim_vehicle.py -v ArduCopter -f airsim-copter --console --map注意:
▲最初,如果ArduPilot SITL尚未启动,编辑器将在按下“播放”按钮后挂起(这是由于锁定步骤调度)。运行sim_vehicle.py,它应该恢复正常。
要关闭,请先按“停止”按钮停止 AirSim 模拟,然后关闭 ArduPilot。如果 ArduPilot 首先关闭,则 UE 挂起,您需要强制关闭它。
您只需按“播放”按钮即可重新启动,然后启动ArduPilot端,无需完全关闭编辑器,然后重新启动。
3 使用遥控手动飞行

对于手动飞行,您需要遥控器或RC。
只需将设备插入计算机,它就可以工作了。请参阅 AirSim 的远程控制页面,了解有关受支持设备和常见问题解答的详细信息。
注意
▲到目前为止,此功能尚未经过正确测试,因此您可能需要修改页面中提到的 Joystick 文件或设置一些 RC 参数,尤其是在使用其他控制器时。
3.1AirSim 的远程控制

参考文档:AirSim/remote_control.md at main ·微软/AirSim (github.com)
要手动飞行,您需要遥控器或RC。如果没有RC,则可以使用 API 以编程方式飞行,或者使用所谓的计算机视觉模式使用键盘四处移动
3.1.1默认配置的 RC 设置

默认情况下,AirSim使用 simple_flight作为其飞行控制器,该控制器通过USB端口连接到计算机的RC。
您可以使用XBox控制器或FrSky Taranis X9D Plus。请注意,XBox 360控制器不够精确,如果您想要更多现实世界的体验,则不建议使用。如果出现问题,请参阅下面的常见问题解答。
3.1.2其他设备

AirSim可以检测各种各样的设备,但上述设备以外的设备可能需要额外的配置。将来,我们将添加通过 settings.json 设置此配置的功能。目前,如果事情不起作用,那么您可能需要尝试解决方法,例如x360ce或更改SimJoystick.cpp文件中的代码。
3.2 关于 FrSky Taranis X9D Plus 的说明

FrSky Taranis X9D Plus是真正的无人机遥控器,其优点是它具有USB端口,因此可以直接连接到PC。您可 download AirSim config file,然后 follow this tutorial 将其导入RC中。然后,您应该在RC中看到“sim”模型,其中所有通道都配置正确。
关于 Linux 的说明

目前Linux上的默认配置是使用Xbox控制器。这意味着其他设备可能无法正常工作。将来,我们将添加在 settings.json 中配置 RC 的功能,但现在您可能需要更改 SimJoystick.cpp 文件中的代码才能使用其他设备。
适用于 PX4 的 RC 设置

AirSim支持PX4飞行控制器,但它需要不同的设置。有许多远程控制选项可以与四旋翼飞行器一起使用。我们已经成功地将FrSky Taranis X9D Plus,FlySky FS-TH9X和Futaba 14SG与AirSim一起使用。以下是配置 RC 的高级步骤:
1)如果您要使用硬件在环模式,则需要特定品牌RC的发射器并将其绑定。您可以在 RC 的用户指南中找到此信息。
2)对于硬件在环模式,您将发射器连接到 Pixhawk。通常,您可以找到有关如何执行此操作的在线文档或YouTube视频教程。
3)在 QGroundControl 中校准您的 RC(https://docs.qgroundcontrol.com/en/SetupView/Radio.html)。
有关详细信息,请参阅 PX4 RC 配置和请参阅本指南。
使用 XBox 360 USB 游戏手柄

您还可以在SITL模式下使用Xbox控制器,它只是不如真正的RC控制器精确。有关如何设置 xbox 控制器的详细信息,请参阅 Xbox 控制器。
使用Playstation 3控制器

Playstation 3控制器被确认为AirSim控制器。但是,在Windows上,需要一个模拟器来使其看起来像Xbox 360控制器。在线提供许多不同的解决方案,例如x360ce Xbox 360控制器仿真器。
大疆控制器

Nils Tijtgat写了一篇关于如何让DJI控制器与AirSim配合使用的优秀博客。
常见问题

我使用的是默认配置,AirSim说USB上没有检测到我的RC。

如果您连接了多个RC和/或XBox / Playstation游戏手柄等,通常会发生这种情况。在Windows中,按Windows + S键并搜索“设置USB游戏控制器”(在较旧版本的Windows中,请尝试使用“操纵杆”)。这将显示连接到PC的所有游戏控制器。如果您没有看到您的,则Windows尚未检测到它,因此您需要首先解决此问题。如果您确实看到了您的,但不在列表的顶部(即索引0),则需要告诉AirSim,因为默认情况下AirSim尝试在索引0处使用RC。为此,请导航到您的文件夹,打开并添加/修改以下设置。下面告诉AirSim在指数= 2时使用RC。~/Documents/AirSim/settings.json
{
    "SettingsVersion": 1.2,
    "SimMode": "Multirotor",
    "Vehicles": {
        "SimpleFlight": {
            "VehicleType": "SimpleFlight",
            "RC": {
              "RemoteControlID": 2
            }
        }
    }
}使用 XBox/PS3 控制器时车辆似乎不稳定

常规游戏手柄不是很精确,并且有很多随机噪音。大多数时候,您可能还会看到明显的偏移(即,当摇杆为零时,输出不为零)。因此,此行为是预期的。
AirSim 中的 RC 校准在哪里?

我们尚未实现它。这意味着您的RC固件现在需要具有进行校准的功能。
我的 RC 无法与 PX4 设置一起使用。

首先,您要确保您的RC在QGroundControl中工作。如果它不起作用,那么它肯定不会在AirSim中工作。PX4模式适用于至少具有中级经验的人,可以处理与PX4相关的各种问题,我们通常会推荐您从PX4论坛获得帮助。
4 Multi-Vehicle 仿真

为了模拟 2 个copters,添加了一个示例脚本,该脚本将创建 2 个copters实例,并在其中一个实例中启用跟随模式。
settings.json适用于 2 架copters
{
"SettingsVersion": 1.2,
"SimMode": "Multirotor",
"OriginGeopoint": {
"Latitude": -35.363261,
"Longitude": 149.165230,
"Altitude": 583
  },
"Vehicles": {
"Copter1": {
"VehicleType": "ArduCopter",
"UseSerial": false,
"LocalHostIp": "127.0.0.1",
"UdpIp": "127.0.0.1",
"UdpPort": 9003,
"ControlPort": 9002
    },
"Copter2": {
"VehicleType": "ArduCopter",
"UseSerial": false,
"LocalHostIp": "127.0.0.1",
"UdpIp": "127.0.0.1",
"UdpPort": 9013,
"ControlPort": 9012,
"X": 0, "Y": 3, "Z": 0
    }
  }
}按播放,cd到ardupilot目录,然后运行脚本以启动2个直升机实例。您可以选择使用GCS作为第一个参数来指定计算机的IP地址,默认情况下它将是127.0.0.1,这意味着所有内容都在同一台计算机上。
libraries/SITL/examples/Airsim/follow-copter.sh <IP>要附加 MAVProxy
mavproxy.py --master=127.0.0.1:14550 --source-system 1 --console --map这将显示地图,但只有一辆车,使用vehicle命令在控制车辆之间切换,例如与vehicle&1vehicle 2,之后两辆车都应该出现在地图上
现在,您可以让第一辆车(即带有SYSID 1)在导航或自动任务中飞行,然后起飞第二辆车并将其置于跟随模式,之后第二架copter将跟随第一架copter。
要增加模拟车辆的数量,只需修改脚本中的NCOPTERS变量,然后在settings.json中添加每个车辆的设置。
注意
▲由于Linux,WSL,Cygwin等平台之间的网络差异,在进行多车辆仿真时可能会存在某些问题。
▲端口之间的差异10很重要,因为脚本使用instance选项启动车辆,该选项将ArduPilot一侧的端口增加10。要使用不同的端口,请按照页面末尾用于指定端口的说明根据需要修改脚本。

349

主题

388

帖子

1085

积分

金牌飞友

Rank: 6Rank: 6

积分
1085
飞币
695
注册时间
2017-7-18
发表于 2022-10-27 06:10:51 | 显示全部楼层
在airsim中用aridupilot控制飞机会有漂移这个问题你有遇到吗
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

快速回复 返回顶部 返回列表