Airsim在ubuntu下的使用(一)

##大前提
首先在ubuntu下配置好Unreal Engine和Airsim的环境
可以参考Airsim+UnrealEngine 搭建自动驾驶虚拟环境

注意一下几点:

  • UE4 对显卡驱动有要求,不能太高也不能太低, 375左右
  • Airsim 的 setup.sh有时会出错,注意就是几个文件的下载和更新,所以可以注释掉一些选项,然后手动安装
  • 还有几点UE 和 Airsim还有一些虚幻引擎的环境都比较大,可能需要40G 左右的空间,所以要合理分配
  • 文件的布局,建议建一个文件加sim_air 里面包好UE4、Airsim、Environment

Airsim更新

  • 增加了许多场景的仿真环境
  • ViewMode 新增加了NoDisplay,关闭了主窗口的渲染,只开启我们所需要的subwindows的渲染。从而 improve FPS for recording images.

启动测试

启动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

  • SuperSimX设置为G4/G5/G6.5模式
  • 遥控器的通道映射,Linux下我遇到了通道映射问题,

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 中 主要有

  • content文件夹下的(Assets Maps)
  • Derived DataChche文件夹
  • config文件夹下的 DefaultEditor.ini DefaultEngine.ini文件的内容

3、做完这些,先测试一些我们的新环境能不能使用
使用 UE4Editor程序打开ENV1下的 uproject,如果没问题,说明环境配置成功了
4、下面需要在工程中添加Airsim插件了。

定位到编译Airsim的文件夹
执行 rsync -t -r Unreal/Plugins  path/to/MyUnrealProject命令

修改project的内容,添加Airsim插件

注意可能会提示不匹配问题

你可能感兴趣的:(机器学习)