AirSim学习(3):AirSim PythonAPI基本操作——环境配置与VehicleClient类

文章内容

  • 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类型,例如simpleflight
    pose:初始位置,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格式体素网格。

    作者:睡觉狂魔er

    物联沃分享整理
    物联沃-IOTWORD物联网 » AirSim学习(3):AirSim PythonAPI基本操作——环境配置与VehicleClient类

    发表回复