首先使用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 API均使用NED坐标系,即+x为北,+y为东,+z为下。所有单位均为SI系统中的单位。这与UE中的坐标系和单位不同,UE中的长度单位是cm,+z指向上方,为此AirSim API引入了这样的坐标变换:
settings.json
中可以设置OringinGeopoint
,分配载具初始的经纬高。VehicleClient是用于与AirSim服务器通信的客户端。
client
: 一个 msgpackrpc.Client 实例,用于处理与AirSim服务器的RPC通信。
ip
: 服务器的IP地址,默认为空字符串,这时会使用本机地址 “127.0.0.1”。port
: 端口号,默认为 41451。timeout_value
: 超时值,单位为秒,默认为 3600 秒。重置载具至初始状态。
检查是否与运行中的UE4工程建立了连接。
获取客户端版本。
获取服务端版本。
获取服务器所需的最低客户端版本。
获取客户端所需的最低服务器版本。
启用或禁用API控制。默认禁用API控制,由人类驾驶员操作。
判断API控制是否已启用。
给载具上锁或解锁。
暂停模拟。在强化学习中,常常需要在指定的时间内进行仿真,然后自动暂停,进行训练,可以使用simPause
、simContinueForTime
、simContinueForFrames
等函数实现这一需求。
判断模拟是否已暂停。
让模拟继续运行指定的时间。
让模拟继续运行指定的帧数。
获取载具的Home地理位置。返回值包含三个属性latitude
,longitude
,altitude
检查连接状态并在控制台中报告,每1s检查一次。
改变指定灯光的强度。
运行时换肤API。
运行时更换材质API。
运行时通过纹理更换材质API。
控制环境中太阳的位置。
启用天气效果,默认禁用。
启用各种天气效果。第一个输入参数param
是一个这样的类
class WeatherParameter:
Rain=0
Roadwetness=1
Snow=2
RoadSnow=3
MapleLeaf=4
RoadLeaf=5
Dust=6
Fog=7
第二个输入参数val
设置天气强度,范围在[0,1]
设置NED坐标系下的风速,输入类型Vector3r
。
获取AirSim使用的设置文本
获取单个图像。
获取多个图像,在一次调用中接收来自任何相机的多个图像类型的请求。例如可以获取左相机、右相机、深度等,允许获得未压缩以及浮点单通道图像。
测试从载具到点的视线是否通畅。
测试两点间的视线是否通畅。
获取世界的最小和最大范围。
在Unreal的控制台中执行命令。
返回构成场景的静态网格。
为特定对象设置分割ID。
返回给定网格名称的对象ID。
添加以通配符格式检测的网格名称。
为所有摄像机设置检测半径。
清除检测过滤器中的所有网格名称。
获取当前的检测结果。
在模拟器的窗口中打印指定的消息。
获取摄像机的细节。
获取摄像机畸变参数。
设置摄像机畸变参数。
设置单个摄像机畸变参数。
控制被选择摄像机的姿态。
控制被选择摄像机的视场。
获取载具的碰撞信息。返回是否发生碰撞、碰撞位置、表面法线、穿透深度等,类型如下
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
设置载具的位置和姿态。
pose
:Pose类,包含位置、姿态
class Pose(MsgpackMixin):
position = Vector3r()
orientation = Quaternionr()
ignore_collision
:bool类型,是否忽略碰撞
vehicle_name
:str类型,可选,载具名称
获取载具的位置和姿态,返回Pose
实例。
修改当启用追踪时线的颜色和厚度。
设置载具的运动学状态。
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类型,可选,载具名称
获取载具的地面真实运动学。
获取载具真实位置,返回类型EnvironmentState
class EnvironmentState(MsgpackMixin):
position = Vector3r()
geo_point = GeoPoint()
gravity = Vector3r()
air_pressure = 0.0
temperature = 0.0
air_density = 0.0
取消载具的上一个任务
运行时创建载具
vehicle_name
:载具名称,str类型
vehicle_type
:载具类型,str类型,例如simpleflight
pose
:初始位置,Pose类
pawn_path
:可选参数,默认空,载具在蓝图中的路径,str类型
此处的object
对应的是UE中的actor
。要按照名称检索actor
,需要在UE Editor中更改它的名称,因为UE Editor中显示的名称是在每次运行时自动生成的,并且不是永久性的。
获取对象的姿态。
设置对象的姿态。
获取对象的大小,返回类型Vector3r
设置对象的大小。
列出环境中的对象。
加载指定名称的关卡。
列出资产注册表中的所有资产。
在世界中生成选择的对象。
从世界中移除选择的对象。
返回IMU数据,类型为ImuData
class ImuData(MsgpackMixin):
time_stamp = np.uint64(0)
orientation = Quaternionr()
angular_velocity = Vector3r()
linear_acceleration = Vector3r()
返回气压计数据
class BarometerData(MsgpackMixin):
time_stamp = np.uint64(0)
altitude = Quaternionr()
pressure = Vector3r()
qnh = Vector3r()
返回磁力计数据
class MagnetometerData(MsgpackMixin):
time_stamp = np.uint64(0)
magnetic_field_body = Vector3r()
magnetic_field_covariance = 0.0
返回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)
返回距离传感器数据
class DistanceSensorData(MsgpackMixin):
time_stamp = np.uint64(0)
distance = 0.0
min_distance = 0.0
max_distance = 0.0
relative_pose = Pose()
返回激光雷达数据
class LidarData(MsgpackMixin):
point_cloud = 0.0
time_stamp = np.uint64(0)
pose = Pose()
segmentation = 0
清除所有is_persistent=True
的图标
绘制NED坐标系下的一组三维点
绘制NED坐标系中的连续线段,在输入参数的points
相邻元素之间绘制线段。
在输入参数的points
任意两元素之间绘制线段
在输入的points_start
的每个元素与points_end
的对应元素之间绘制箭头
在NED坐标系的positions
的每个元素处绘制对应的字符串列表strings
中的元素
绘制NED坐标系下的一组变换,变换由输入的poses
给出,poses
是Pose
类型的列表,Pose
类在上面的simSetVehiclePose
函数中已给出。
绘制NED坐标系下的一组变换并标注其名称,变换由输入参数的poses
给出,名称由names
给出
开始录制
停止录制
是否正在录制,返回bool类型。
创建并保存环境的binvox格式体素网格。