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

文章内容

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格式体素网格。

  • 39
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法 毕业设计:实现了UE4和airsim环境下无人机自主导航和目标跟踪的强化学习算法
### 回答1: 六坐标法是一种常用于标定加速度计的方法。标定是指通过一系列实验或校准过程,确定加速度计的精确测量能力和准确性,以便在实际应用能够得到更准确的测量结果。 在进行六坐标法标定加速度计时,首先需要准备一个六轴平台,该平台可以在各个方向上产生精确的加速度。然后将待标定的加速度计放置在平台上,通过操控平台,使其在六个不同的方向上以不同的加速度进行运动,从而得到加速度计在各个方向上的输出数值。 在实验过程,需要注意以下几点来确保标定的准确性: 1. 保证平台运动的稳定性:平台在各个方向上的加速度变化应平稳且无震动,以确保读取的数据准确。 2. 控制变量:除平台产生的加速度外,尽量减少外部干扰因素对标定结果的影响,如温度、湿度、电磁辐射等。 3. 多次重复测试:为了获取更可靠的标定结果,应进行多次重复实验,取平均值或者通过拟合曲线来确定加速度计的输出准确性。 4. 数据处理与分析:将得到的实验数据进行处理与分析,去除异常值,计算各个方向上的平均值、方差、误差等,以评估加速度计的测量能力。 通过以上步骤,可以成功地进行六坐标法标定加速度计off,得到加速度计的准确测量结果,为后续的应用提供可靠的数据支持。 ### 回答2: 六坐标法是一种常用于标定加速度计的方法,它可以通过测量不同方向上的加速度来确定加速度计的误差和偏移。当我们需要将加速度计设备设置为“off”状态时,意味着我们不希望其进行实时测量和报告加速度数据。 要将加速度计标定为“off”状态,我们需要采取以下步骤: 1. 首先,确认加速度计设备已连接并处于正常工作状态。 2. 然后,打开使用六坐标法标定加速度计的标定软件或工具。 3. 在软件或工具选择适当的选项来开始加速度计的标定过程。通常,这些选项可以在菜单或设置找到。 4. 在开始标定过程之前,参考加速度计设备的相关文档以了解其具体操作步骤和要求。 5. 在标定软件或工具的指导下,按照要求进行动作,例如将加速度计设备沿不同方向进行慢速旋转、晃动或倾斜。 6. 标定软件或工具将自动记录每个方向上的加速度数据,并进行计算和校准以确定误差和偏移值。请确保按照软件或工具的指示进行操作,并保持设备在标定期间保持稳定。 7. 根据标定软件或工具的指引,完成标定过程,保存标定结果。 通过按照以上步骤进行标定,我们可以将加速度计设备标定为“off”状态,这意味着设备将不会测量和报告任何加速度数据。这对于某些特定的应用场景可能是必要的,例如在需要进行准确姿态测量或需要防止误差和偏移引入的应用。 ### 回答3: 六坐标法是一种用于标定加速度计的方法,通过该方法可以准确测量出加速度计的偏差和灵敏度。 首先,将加速度计安装在一个特制的支架上,保证其能够完全静止。然后,将支架放置在一个平整的水平表面上,使支架相对于地面保持静止。这样可以消除地球的重力加速度对加速度计的影响。 接下来,以各个坐标轴(X、Y、Z)为基准,分别给加速度计施加一定的加速度。例如,在X轴上施加一个已知的正向加速度,然后记录加速度计的读数。然后,在X轴上施加一个已知的负向加速度,再次记录加速度计的读数。同样,分别在Y轴和Z轴上进行相同的操作。 根据上述实验数据可以计算出加速度计在各个轴上的输出偏差。偏差可以表示为在零加速度下,加速度计输出的实际值与理论值之间的差异。 接下来,为了测量加速度计的灵敏度,将加速度计放置在一个已知加速度的恒定运动。例如,将加速度计固定在一个旋转的平台上,然后以已知的角速度进行旋转。记录加速度计的读数,然后根据已知的角速度计算出预期的加速度值。将实际读数与预期值进行比较,就可以计算出加速度计的灵敏度。 最后,将通过以上步骤得到的偏差和灵敏度值用于校正实际应用的加速度计。 总之,六坐标法标定加速度计off方法可以通过施加已知加速度来测量加速度计的偏差和灵敏度,以便对其进行校准。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值