文章内容
- 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格式体素网格。