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

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

                              simIsPause

                              判断模拟是否已暂停。

                              simContinueForTime

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

                              simContinueForFrames

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

                              getHomeGeoPoint

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

                              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给出,poses是Pose类型的列表,Pose类在上面的simSetVehiclePose函数中已给出。

                              simPlotTransformsWithNames

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

                              10. 录制相关

                              startRecording

                              开始录制

                              stopRecording

                              停止录制

                              isRecording

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

                              simCreateVoxelGrid

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