概要
AirSim插件配合Unreal Engine游戏引擎的3D渲染能力,可以实现比较逼真的环境渲染效果,具备Camera、Lidar和GNSS三种导航数据供供导航程序使用,其代码架构如下(参考自知乎文章)
注:AirSim仅支持UE4,对于UE5,需要下载https://github.com/CodexLabsLLC/Colosseum对应的UE版本的Colosseum(AirSim的successor),后续步骤类似。
因此,无人机仿真环境由两部分组成:Windows平台上使用UE+AirSim插件搭建无人机飞行场景,配置无人机物理参数,为导航模块提供图像、激光雷达和GNSS测量数据;NVIDIA JETSON ORIN板卡运行导航程序,接收Windows传输的测量数据、进行导航解算并输出控制指令至Windows平台控制无人机移动。
本文内容是在Windows和ORIN两个平台的环境配置和数据传输测试。
1. ORIN端环境配置
1.1 AirSim插件配置
- 在Github-AirSim下载AirSim源码,我选择1.8.0-Linux;
- 找到AirSimRootDir/setup.sh文件,根据命令中网址下载rpclib-2.3.0文件(解压后命名为rpclib-2.3.0文件并复制到AirSimRootDir/external/rpclib/路径下)、下载Eigen库(找到eigen/Eigen文件夹并复制到AirSimRootDir/AirLib/deps/eigen3/ 路径下);
- 进入AirSim目录,命令行执行
./setup.sh --no-full-poly-car
(我仅使用无人机,因此不用下载汽车模型); - 如果出现clang-8安装失败(底层库不兼容问题),将setup.sh文件中
sudo apt-get install -y clang-8 clang++-8 libc++-8-dev libc++abi-8-dev
删除,使用aptitude工具手动安装,将不兼容的库降级使用; - 在AirSimRootDir命令行执行
./build.sh
构建AirSim,对应生成的插件文件在AirSimRootDir/Unreal/Plugins/AirSim中。
1.2 AirSim-ROS2-Wrapper配置
- ROS2的源码位于AirSimRootDir/ros2处,AirSim貌似仅支持ROS2-galatic(不太确定,可在Github的issues处查看);
- 参考Github/AirSim-Add ROS2 wrapper链接,依次运行 How to test it yourself? 处命令以编译ROS2包、启动airsim_node节点。
2. Windows端环境配置
2.1 下载Epic Game游戏软件和Unreal Engine
- 下载Epic Game游戏软件
- 点击左侧Unreal Engine->Library选择对应的UE版本,我选择4.27。
- UE引擎下载完毕后,在Marketplace界面选择目标场景下载(须与刚下载的引擎兼容)并创建工程。
- 右键点击工程的uproject文件,Generate Visual Studio Projectfiels,生成C++项目,以和AirSim源码一起生成。
2.2 UE工程配置AirSim插件
- 仿照 1.1 AirSim插件配置在Windows平台下载、setup、编译AirSim插件;
以下内容参考了——AirSim配置Unreal Environment - 将编译后AirSimRootDir/Unreal/Plugins文件夹复制到UE工程根目录(此目录下存在UEProjectName.uproject文件);
- 使用记事本打开UEProjectName.uproject,添加AirSim依赖和AirSim插件,最终效果如下
{
"FileVersion": 3,
"EngineAssociation": "4.27",
"Category": "Samples",
"Description": "",
"Modules": [
{
"Name": "LandscapeMountains",
"Type": "Runtime",
"LoadingPhase": "Default",
"AdditionalDependencies": [
"AirSim"
]
}
],
"TargetPlatforms": [
"MacNoEditor",
"WindowsNoEditor"
],
"Plugins": [
{
"Name": "AirSim",
"Enabled": true
}
]
}
- 在UE工程根目录下,使用记事本打开
Config\DefaultGame.ini
文件并在末尾添加+MapsToCook=(FilePath="/AirSim/AirSimAssets")
目的是将AirSim的content添加到UE工程。 - 打开
文档/AirSim/settings
文件,添加"SimMode":"Multirotor"
设置,将仿真节点设置为无人机。该文件可以用来配置仿真环境中无人机/车的各种物理参数,留待后续研究。 - 打开工程,点击
编辑/项目设置/地图和模式
将默认地图模式选择为AirSimGameMode
,点击运行即可开始仿真。
3. 测试ROS2与AirSim地图的数据传输结果
对ROS2-wrapper和ROS2不熟悉,使用如下方法进行简单测试,后续填坑。
3.1 ORIN使用python-airsim控制无人机起飞
参考知乎专栏
#作者:宁子安
#链接:https://zhuanlan.zhihu.com/p/359214411
#来源:知乎
#著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
"""
airsim 四旋翼飞圆形
"""
import airsim
import numpy as np
import math
import time
client = airsim.MultirotorClient() # connect to the AirSim simulator
client.enableApiControl(True) # 获取控制权
client.armDisarm(True) # 解锁
client.takeoffAsync().join() # 起飞
client.moveToZAsync(-3, 1).join() # 第二阶段:上升到2米高度
center = np.array([[0], [5]]) # 圆心设置
speed = 2 # 速度设置
radius = 5 # 半径设置
clock_wise = True # 顺时针或逆时针设置
pos_reserve = np.array([[0.], [0.], [-3.]])
# 速度控制
for i in range(2000):
# 获取无人机当前位置
state = client.simGetGroundTruthKinematics()
pos = np.array([[state.position.x_val], [state.position.y_val], [state.position.z_val]])
# 计算径向速度的方向向量
dp = pos[0:2] - center
if np.linalg.norm(dp) - radius > 0.1:
vel_dir_1 = -dp
elif np.linalg.norm(dp) - radius < 0.1:
vel_dir_1 = dp
# 计算切向速度的方向向量
theta = math.atan2(dp[1, 0], dp[0, 0])
if clock_wise:
theta += math.pi / 2
else:
theta -= math.pi / 2
v_dir_2 = np.array([[math.cos(theta)], [math.sin(theta)]])
# 计算最终速度的方向向量
v_dir = 0.08 * vel_dir_1 + v_dir_2
# 计算最终速度指令
v_cmd = speed * v_dir/np.linalg.norm(v_dir)
# 速度控制
client.moveByVelocityZAsync(v_cmd[0, 0], v_cmd[1, 0], -3, 1)
# 画图
point_reserve = [airsim.Vector3r(pos_reserve[0, 0], pos_reserve[1, 0], pos_reserve[2, 0])]
point = [airsim.Vector3r(pos[0, 0], pos[1, 0], pos[2, 0])]
point_end = pos + np.vstack((v_cmd, np.array([[0]])))
point_end = [airsim.Vector3r(point_end[0, 0], point_end[1, 0], point_end[2, 0])]
client.simPlotArrows(point, point_end, arrow_size=8.0, color_rgba=[0.0, 0.0, 1.0, 1.0])
client.simPlotLineList(point_reserve+point, color_rgba=[1.0, 0.0, 0.0, 1.0], is_persistent=True)
# 循环
pos_reserve = pos
time.sleep(0.02)
结果为:Windows平台下的无人机成功起飞并按照圆形来飞行。文章来源:https://www.toymoban.com/news/detail-846700.html
使用ROS2-Wrapper测试
待补充完善。文章来源地址https://www.toymoban.com/news/detail-846700.html
到了这里,关于无人机仿真环境配置初探(Unreal Engine + AirSim Plugin)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!