##大前提
首先在ubuntu下配置好Unreal Engine和Airsim的环境
可以参考Airsim+UnrealEngine 搭建自动驾驶虚拟环境
注意一下几点:
启动Unreal Engine
./Engine/Binaries/Linux/UE4Editor 执行这个这个路径下的可执行程序,
启动block.uproject
在编译完Airsim之后,默认会有一个block的工程,所以我们用UE Edit打开现有的工程,定位到/AirSim/Unreal/Environments/Blocks 打开即可
如果发现提示,project与UE4版本不匹配,点击copy选项,让它重新编译一个匹配的即可。
##Airsim的几种模式测试
airsim的配置文件在ubuntu中在/home/Document/Airsim/settings.json,
不同模式的修改主要在启动之前,配置settings.json
ASCII编码的json格式
"SettingsVersion": 1.2,
//选择vehicle的形式
"SimMode":"Multirotor" , "Car"
//选择主窗口的显示效果 不同的视角模式
"ViewMode": "FlyWithMe", GroundObserver Fpv Manual NoDisplay(减少渲染,提高帧率)
// 选择小窗口的设置形式
WindowID 可以用键盘012索引
CameraName 选择图像的视角
ImageType 记录图像的形式
"SubWindows": [
{"WindowID": 0, "CameraName": "0", "ImageType": 3, "Visible": false},
{"WindowID": 1, "CameraName": "0", "ImageType": 5, "Visible": false},
{"WindowID": 2, "CameraName": "0", "ImageType": 0, "Visible": false}
],
//选择Vehicle起始位置,HOME点 (NED坐标系)
"OriginGeopoint": {
"Latitude": 47.641468,
"Longitude": -122.140165,
"Altitude": 122
},
//设置图像记录时候的分辨率和一些设置
//其中的ImageType
Scene = 0, //RGB图
DepthPlanner = 1,
DepthPerspective = 2, //真正的深度图
DepthVis = 3, //depth visualization //全白100米,全黑0米
DisparityNormalized = 4, //视差图
Segmentation = 5, //语义分割图
SurfaceNormals = 6, //不同的mesh被分割到0-255 每种类别被填充一种颜色
Infrared = 7 //语义图的灰度映射
"CameraDefaults": {
"CaptureSettings": [
{
"ImageType": 0,
"Width": 256,
"Height": 144,
"FOV_Degrees": 90,
"AutoExposureSpeed": 100,
"MotionBlurAmount": 0
}
]
},
//记录图片的方式和格式
【采样间隔、是否有运动检测 以及哪一个camera的哪种形式】
CameraName:
旧版的:0/1/2/3/4/5
新版的:front_center, front_right, front_left, fpv and back_center
"Recording": {
"RecordOnMove": false,
"RecordInterval": 0.05,
"Cameras": [
{ "CameraName": "0", "ImageType": 0, "PixelsAsFloat": false, "Compress": true }
]
},
// 仿真运行的快慢程度
// 5会加快5倍 0.1会放慢10倍
"ClockSpeed": 1,
// 添加噪声的相关配置
"NoiseSettings": [
{
"Enabled": false,
"ImageType": 0,
"RandContrib": 0.2, ##噪声与图像的混合比 0无噪声 1仅噪声
"RandSpeed": 100000.0, ##噪声波动速度0无波动 1E6最大速度波动
"RandSize": 500.0, ##多少个像素共享噪声值
"RandDensity": 2, ##表示总数中有多少像素有噪声,1表示所有都有, 值越大表示越少的像素
//水平凹凸失真
"HorzWaveContrib":0.03,
"HorzWaveStrength": 0.08,
"HorzWaveVertSize": 1.0,
"HorzWaveScreenSize": 1.0,
// 水平噪音线
"HorzNoiseLinesContrib": 1.0,
"HorzNoiseLinesDensityY": 0.01,
"HorzNoiseLinesDensityXY": 0.5,
//增加水平线的波动
"HorzDistortionContrib": 1.0,
"HorzDistortionStrength": 0.002
}
],
//万向节,可以固定某一个轴不变(类似于云台的功能)
"Gimbal": {
"Stabilization": 0,
"Pitch": NaN, "Roll": NaN, "Yaw": NaN
}
"X": NaN, "Y": NaN, "Z": NaN,
"Pitch": NaN, "Roll": NaN, "Yaw": NaN
},
//设置光照 环境中太阳的位置和随时间的变化
"TimeOfDay": {
"Enabled": false,
"StartDateTime": "",
"CelestialClockSpeed": 1,
"StartDateTimeDst": false,
"UpdateIntervalSecs": 60
},
无人机的相关配置
"Vehicles": {
//这个名字可以自定义
"FishEyeDrone": {
"VehicleType": "SimpleFlight",
//无人机模式选择 SimpleFlight、PX4Multirotor
"DefaultVehicleState": "Armed", //开始位置,上锁还是解锁
"AutoCreate": true,
"EnableCollisionPassthrogh": false,
"EnableCollisions": true,
"AllowAPIAlways": true,
"RC": {
"RemoteControlID": 0,
"AllowAPIWhenDisconnected": false
},
//无人机挂载的相机 可以设置方位、记录图片类型、以及视角
"Cameras": {
"front-center": {
"CaptureSettings": [
{
"ImageType": 0,
"FOV_Degrees": 120
}
]
}
},
"X": NaN, "Y": NaN, "Z": NaN,
"Pitch": NaN, "Roll": NaN, "Yaw": NaN
}
}
SimpleFlight 模式
{
"SettingsVersion": 1.0,
"DefaultVehicleConfig": "SimpleFlight",
"SimpleFlight": {
"RemoteControlID": 0,
"RC": {
"AllowAPIWhenDisconnected": true,
"AllowAPIAlways": true
}
}
}
在这个模式下,会有一个虚拟的board通过simple_flight接口通信,
我们可以通过angle rate, angle level, velocity or position来进行控制,
同时,它有虚拟的传感器可以进行位置估计。
使用,启动Project
然后打开AirSim/build_debug/output/bin目录下的DroneShell HelloDrone进行测试。
https://github.com/Microsoft/AirSim/blob/master/docs/simple_flight.md
遥控器在SimpleFlight模式下的使用
SimpleFlight模式下使用的是虚拟飞控,它可以接收API程序的控制命令,也可以通过遥控来控制。
遥控器的使用: Futaba-T14SG + SuperSimX
ls /dev/input/js0 看得到有一个遥控器接入 joystick
sudo jstest /dev/input/js0 调试jstest也能看得到各通道的数据
但是就是通道与airsim 中对应不上,
(有两种方式:要么调遥控器,要么调整程序【程序中SimJoyStick.cpp模式支持xbox】)
所以索性在遥控上新建了一个airsim模式,根据环境中提示的T R P Y,做了对应
PX4-SIL 模式
{
"SettingsVersion": 1.0,
"DefaultVehicleConfig": "PX4",
"PX4": {
"UseSerial": false
}
}
//很明确 说的很明确,使用px4但是又不用串口连接,
PX4-HIL 模式
{
"SettingsVersion": 1.0,
"DefaultVehicleConfig": "PX4",
"LocalHostIp": "127.0.0.1",
"SubWindows": [
{"WindowID": 0, "CameraID": 0, "ImageType": 0, "Visible": true},
{"WindowID": 1, "CameraID": 1, "ImageType": 1, "Visible": true},
{"WindowID": 2, "CameraID": 2, "ImageType": 2, "Visible": true}
] ,
"PX4": {
"SerialBaudRate": 115200,
"SerialPort": "*",
"UdpIp": "127.0.0.1",
"UdpPort": 14560,
"UseSerial": true
},
"SimpleFlight": {
"RemoteControlID": 2
}
}
###seting.json的配置
图像相关
"SubWindows": [
{"WindowID": 0, "CameraID": 0, "ImageType": 3, "Visible": true},
{"WindowID": 1, "CameraID": 1, "ImageType": 5, "Visible": true},
{"WindowID": 2, "CameraID": 2, "ImageType": 0, "Visible": true}
] ,
PX4飞控相关
"PX4": {
"FirmwareName": "PX4",
"OffboardCompID": 1,
"OffboardSysID": 134,
"QgcHostIp": "127.0.0.1",
"QgcPort": 14550,
"SerialBaudRate": 115200,
"SerialPort": "*",
"SimCompID": 42,
"SimSysID": 142,
"SitlIp": "127.0.0.1",
"SitlPort": 14556,
"UdpIp": "127.0.0.1",
"UdpPort": 14560,
"UseSerial": true,
"VehicleCompID": 1,
"VehicleSysID": 135,
"ApiServerPort": 41451
}
##添加虚幻引擎中的环境
0、在需要虚幻引擎的商城中下载自己需要的环境 【简称 ENV0】
1、新建CPP Project 选项和目录 【简称 ENV1】
2、将 ENV0中的一些文件复制到 ENV1 中 主要有
3、做完这些,先测试一些我们的新环境能不能使用
使用 UE4Editor程序打开ENV1下的 uproject,如果没问题,说明环境配置成功了
4、下面需要在工程中添加Airsim插件了。
定位到编译Airsim的文件夹
执行 rsync -t -r Unreal/Plugins path/to/MyUnrealProject命令
修改project的内容,添加Airsim插件
注意可能会提示不匹配问题