文章内容

  • AirSim学习笔记汇总
  • AirSim的Python API的安装
  • AirSim的坐标系统
  • class VehicleClient
  • 1. 成员变量
  • 2. 构造函数
  • 3. 连接与仿真启停
  • reset
  • ping
  • getClientVersion
  • getServerVersion
  • getMinRequiredServerVersion
  • getMinRequiredClientVersion
  • enableApiControl
  • isApiControlEnabled
  • armDisarm
  • simPause
  • simIsPause
  • simContinueForTime
  • simContinueForFrames
  • getHomeGeoPoint
  • confirmConnection
  • 4. 环境设置相关
  • simSetLightIntensity
  • simSwapTextures
  • simSetObjectMaterial
  • simSetObjectMaterialFromTexture
  • simSetTimeOfDay
  • simEnableWeather
  • simSetWeatherParameter
  • simSetWind
  • getSettingsString
  • 5. 视觉任务相关
  • simGetImage
  • simGetImages
  • simTestLineOfSightToPoint
  • simTestLineOfSightBetweenPoints
  • simGetWorldExtents
  • simRunConsoleCommand:
  • simGetMeshPositionVertexBuffers
  • simSetSegmentationObjectID
  • simGetSegmentationObjectID
  • simAddDetectionFilterMeshName
  • simSetDetectionFilterRadius
  • simClearDetectionMeshNames
  • simGetDetections
  • simPrintLogMessage
  • simGetCameraInfo
  • simGetDistortionParams
  • simSetDistortionParams
  • simSetDistortionParam
  • simSetCameraPose:
  • simSetCameraFov:
  • 6. 载具状态相关
  • simGetCollisionInfo
  • simSetVehiclePose
  • 输入参数
  • simGetVehiclePose
  • simSetTraceLine
  • simSetKinematics
  • 输入参数
  • simGetGroundTruthKinematics:
  • simGetGroundTruthEnvironment:
  • cancelLastTask
  • simAddVehicle
  • 输入参数
  • listVehicles: 列出当前载具的名称。
  • 7. 目标状态相关
  • simGetObjectPose
  • simSetObjectPose:
  • simGetObjectScale
  • simSetObjectScale
  • simListSceneObjects
  • simLoadLevel
  • simListAssets
  • simSpawnObject
  • simDestroyObject
  • 8. 传感器相关
  • getImuData
  • getBarometerData
  • getMagnetometerData
  • getGpsData
  • getDistanceSensorData
  • getLidarData
  • 9. 绘图相关
  • simFlushPersistentMarkers
  • simPlotPoints
  • simPlotLineStrip
  • simPlotLineList
  • simPlotArrows
  • simPlotStrings
  • simPlotTransforms
  • simPlotTransformsWithNames
  • 10. 录制相关
  • startRecording
  • stopRecording
  • isRecording
  • simCreateVoxelGrid

AirSim学习笔记汇总

  1. AirSim学习(1)安装Unreal Engine和AirSim
  2. AirSim学习(2)创建UE4项目并添加AirSim插件
  3. AirSim学习(3)AirSim的PythonAPI基本操作——VehicleClient类
  4. AirSim学习(4)AirSim的PythonAPI基本操作——MultirotorClient类
  5. AirSim学习(5)AirSim的C++接口、AirSim与ROS的联合仿真

AirSim的Python API的安装

首先使用Anaconda创建一个python>=3.5的环境,然后进入环境,首先安装如下的包

pip install msgpack-rpc-python

然后执行如下命令安装AirSim

pip install airsim

此处我遇到了报错:

import backports.ssl_match_hostname
ModuleNotFoundError: No module named 'backports'

因此需要单独安装backports.ssl_match_hostname,执行以下命令以安装

pip install backports.ssl_match_hostname

安装完成后再次执行pip install airsim即可

AirSim的坐标系统

AirSim API均使用NED坐标系,即+x为北,+y为东,+z为下。所有单位均为SI系统中的单位。这与UE中的坐标系和单位不同,UE中的长度单位是cm,+z指向上方,为此AirSim API引入了这样的坐标变换:

  1. 首先将虚幻坐标系减去初始的偏移量,然后将cm转换为m。(为了让载具初始位于NED原点)
  2. 进行坐标系旋转变换。
  3. settings.json中可以设置OringinGeopoint,分配载具初始的经纬高。

class VehicleClient

VehicleClient是用于与AirSim服务器通信的客户端。

1. 成员变量

client: 一个 msgpackrpc.Client 实例,用于处理与AirSim服务器的RPC通信。

2. 构造函数

  • ip: 服务器的IP地址,默认为空字符串,这时会使用本机地址 “127.0.0.1”。
  • port: 端口号,默认为 41451。
  • timeout_value: 超时值,单位为秒,默认为 3600 秒。

3. 连接与仿真启停

reset

重置载具至初始状态。

ping

检查是否与运行中的UE4工程建立了连接。

getClientVersion

获取客户端版本。

getServerVersion

获取服务端版本。

getMinRequiredServerVersion

获取服务器所需的最低客户端版本。

getMinRequiredClientVersion

获取客户端所需的最低服务器版本。

enableApiControl

启用或禁用API控制。默认禁用API控制,由人类驾驶员操作。

isApiControlEnabled

判断API控制是否已启用。

armDisarm

给载具上锁或解锁。

simPause

暂停模拟。在强化学习中,常常需要在指定的时间内进行仿真,然后自动暂停,进行训练,可以使用simPausesimContinueForTimesimContinueForFrames等函数实现这一需求。

simIsPause

判断模拟是否已暂停。

simContinueForTime

让模拟继续运行指定的时间。

simContinueForFrames

让模拟继续运行指定的帧数。

getHomeGeoPoint

获取载具的Home地理位置。返回值包含三个属性latitudelongitudealtitude

confirmConnection

检查连接状态并在控制台中报告,每1s检查一次。

4. 环境设置相关

simSetLightIntensity

改变指定灯光的强度。

simSwapTextures

运行时换肤API。

simSetObjectMaterial

运行时更换材质API。

simSetObjectMaterialFromTexture

运行时通过纹理更换材质API。

simSetTimeOfDay

控制环境中太阳的位置。

simEnableWeather

启用天气效果,默认禁用。

simSetWeatherParameter

启用各种天气效果。第一个输入参数param是一个这样的类

class WeatherParameter:
	Rain=0
	Roadwetness=1
	Snow=2
	RoadSnow=3
	MapleLeaf=4
	RoadLeaf=5
	Dust=6
	Fog=7

第二个输入参数val设置天气强度,范围在[0,1]

simSetWind

设置NED坐标系下的风速,输入类型Vector3r

getSettingsString

获取AirSim使用的设置文本

5. 视觉任务相关

simGetImage

获取单个图像。

simGetImages

获取多个图像,在一次调用中接收来自任何相机的多个图像类型的请求。例如可以获取左相机、右相机、深度等,允许获得未压缩以及浮点单通道图像。

simTestLineOfSightToPoint

测试从载具到点的视线是否通畅。

simTestLineOfSightBetweenPoints

测试两点间的视线是否通畅。

simGetWorldExtents

获取世界的最小和最大范围。

simRunConsoleCommand:

在Unreal的控制台中执行命令。

simGetMeshPositionVertexBuffers

返回构成场景的静态网格。

simSetSegmentationObjectID

为特定对象设置分割ID。

simGetSegmentationObjectID

返回给定网格名称的对象ID。

simAddDetectionFilterMeshName

添加以通配符格式检测的网格名称。

simSetDetectionFilterRadius

为所有摄像机设置检测半径。

simClearDetectionMeshNames

清除检测过滤器中的所有网格名称。

simGetDetections

获取当前的检测结果。

simPrintLogMessage

在模拟器的窗口中打印指定的消息。

simGetCameraInfo

获取摄像机的细节。

simGetDistortionParams

获取摄像机畸变参数。

simSetDistortionParams

设置摄像机畸变参数。

simSetDistortionParam

设置单个摄像机畸变参数。

simSetCameraPose:

控制被选择摄像机的姿态。

simSetCameraFov:

控制被选择摄像机的视场。

6. 载具状态相关

simGetCollisionInfo

获取载具的碰撞信息。返回是否发生碰撞、碰撞位置、表面法线、穿透深度等,类型如下

class CollisionInfo(MsgpackMixin):
	has_collided=False
	normal=Vector3r()
	impact_point=Vector3r()
	position=Vector3r()
	penetration_depth=0.0
	time_stamp=0.0
	object_name=""
	object_id=-1

simSetVehiclePose

设置载具的位置和姿态。

输入参数

pose:Pose类,包含位置、姿态

class Pose(MsgpackMixin):
    position = Vector3r()
    orientation = Quaternionr()

ignore_collision:bool类型,是否忽略碰撞
vehicle_name:str类型,可选,载具名称

simGetVehiclePose

获取载具的位置和姿态,返回Pose实例。

simSetTraceLine

修改当启用追踪时线的颜色和厚度。

simSetKinematics

设置载具的运动学状态。

输入参数

state:KinematicsState实例,包含位置、四元数、线速度、角速度、线加速度、角加速度

class KinematicsState(MsgpackMixin):
    position = Vector3r()
    orientation = Quaternionr()
    linear_velocity = Vector3r()
    angular_velocity = Vector3r()
    linear_acceleration = Vector3r()
    angular_acceleration = Vector3r()

ignore_collision:bool类型,是否忽略碰撞
vehicle_name:str类型,可选,载具名称

simGetGroundTruthKinematics:

获取载具的地面真实运动学。

simGetGroundTruthEnvironment:

获取载具真实位置,返回类型EnvironmentState

class EnvironmentState(MsgpackMixin):
    position = Vector3r()
    geo_point = GeoPoint()
    gravity = Vector3r()
    air_pressure = 0.0
    temperature = 0.0
    air_density = 0.0

cancelLastTask

取消载具的上一个任务

simAddVehicle

运行时创建载具

输入参数

vehicle_name:载具名称,str类型
vehicle_type:载具类型,str类型,例如simpleflightpose:初始位置,Pose类
pawn_path:可选参数,默认空,载具在蓝图中的路径,str类型

listVehicles: 列出当前载具的名称。

7. 目标状态相关

此处的object对应的是UE中的actor。要按照名称检索actor,需要在UE Editor中更改它的名称,因为UE Editor中显示的名称是在每次运行时自动生成的,并且不是永久性的。

simGetObjectPose

获取对象的姿态。

simSetObjectPose:

设置对象的姿态。

simGetObjectScale

获取对象的大小,返回类型Vector3r

simSetObjectScale

设置对象的大小。

simListSceneObjects

列出环境中的对象。

simLoadLevel

加载指定名称的关卡。

simListAssets

列出资产注册表中的所有资产。

simSpawnObject

在世界中生成选择的对象。

simDestroyObject

从世界中移除选择的对象。

8. 传感器相关

getImuData

返回IMU数据,类型为ImuData

class ImuData(MsgpackMixin):
    time_stamp = np.uint64(0)
    orientation = Quaternionr()
    angular_velocity = Vector3r()
    linear_acceleration = Vector3r()

getBarometerData

返回气压计数据

class BarometerData(MsgpackMixin):
    time_stamp = np.uint64(0)
    altitude = Quaternionr()
    pressure = Vector3r()
    qnh = Vector3r()

getMagnetometerData

返回磁力计数据

class MagnetometerData(MsgpackMixin):
    time_stamp = np.uint64(0)
    magnetic_field_body = Vector3r()
    magnetic_field_covariance = 0.0

getGpsData

返回GPS数据

class GpsData(MsgpackMixin):
    time_stamp = np.uint64(0)
    gnss = GnssReport()
    is_valid = False
class GnssReport(MsgpackMixin):
    geo_point = GeoPoint()
    eph = 0.0
    epv = 0.0
    velocity = Vector3r()
    fix_type = GnssFixType()
    time_utc = np.uint64(0)

getDistanceSensorData

返回距离传感器数据

class DistanceSensorData(MsgpackMixin):
    time_stamp = np.uint64(0)
    distance = 0.0
    min_distance = 0.0
    max_distance = 0.0
    relative_pose = Pose()

getLidarData

返回激光雷达数据

class LidarData(MsgpackMixin):
    point_cloud = 0.0
    time_stamp = np.uint64(0)
    pose = Pose()
    segmentation = 0

9. 绘图相关

simFlushPersistentMarkers

清除所有is_persistent=True的图标

simPlotPoints

绘制NED坐标系下的一组三维点

simPlotLineStrip

绘制NED坐标系中的连续线段,在输入参数的points相邻元素之间绘制线段。

simPlotLineList

在输入参数的points任意两元素之间绘制线段

simPlotArrows

在输入的points_start的每个元素与points_end的对应元素之间绘制箭头

simPlotStrings

在NED坐标系的positions的每个元素处绘制对应的字符串列表strings中的元素

simPlotTransforms

绘制NED坐标系下的一组变换,变换由输入的poses给出,posesPose类型的列表,Pose类在上面的simSetVehiclePose函数中已给出。

simPlotTransformsWithNames

绘制NED坐标系下的一组变换并标注其名称,变换由输入参数的poses给出,名称由names给出

10. 录制相关

startRecording

开始录制

stopRecording

停止录制

isRecording

是否正在录制,返回bool类型。

simCreateVoxelGrid

创建并保存环境的binvox格式体素网格。