文章内容
- 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学习笔记汇总
- AirSim学习(1)安装Unreal Engine和AirSim
- AirSim学习(2)创建UE4项目并添加AirSim插件
- AirSim学习(3)AirSim的PythonAPI基本操作——VehicleClient类
- AirSim学习(4)AirSim的PythonAPI基本操作——MultirotorClient类
- 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引入了这样的坐标变换:
- 首先将虚幻坐标系减去初始的偏移量,然后将cm转换为m。(为了让载具初始位于NED原点)
- 进行坐标系旋转变换。
- 在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格式体素网格。