升级 API 客户端代码#
AirSim v1.2 中有几个 API 更改,我们希望这些更改能消除不一致性,增加未来的可扩展性,并提供更简洁的接口。然而,其中许多更改是破坏性更改,这意味着您需要修改与 AirSim 通信的客户端代码。
更快捷的方式#
虽然您在客户端代码中需要做的大多数更改都相当容易,但更快捷的方法是简单地查看示例代码,例如 Hello Drone 或 Hello Car,以了解更改的要点。
导入 AirSim#
替代以前的导入方式,
from AirSimClient import *
请使用这种方式
import airsim
以上假设您已使用以下命令安装了 AirSim 模块:
pip install --user airsim
如果您在代码库的 PythonClient 文件夹中运行代码,您也可以这样做
import setup_path
import airsim
这里的 `setup_path.py` 应该存在于您的文件夹中,它将设置 `PythonClient` 仓库文件夹中 `airsim` 包的路径。PythonClient 文件夹中的所有示例都使用此方法。
使用 AirSim 类#
由于我们现在所有的内容都在包中,您需要像下面这样为 AirSim 类使用显式命名空间。
替代以前的导入方式,
client1 = CarClient()
请使用这种方式
client1 = airsim.CarClient()
AirSim 类型#
我们已将所有类型移动到 `airsim` 命名空间中。
替代以前的导入方式,
image_type = AirSimImageType.DepthVis
d = DrivetrainType.MaxDegreeOfFreedom
请使用这种方式
image_type = airsim.ImageType.DepthVis
d = airsim.DrivetrainType.MaxDegreeOfFreedom
获取图像#
下面没有新内容,只是上述内容的组合。请注意,所有以前接受 `camera_id` 的 API 现在都接受 `camera_name`。您可以在此处查看可用摄像头。
替代以前的导入方式,
responses = client.simGetImages([ImageRequest(0, AirSimImageType.DepthVis)])
请使用这种方式
responses = client.simGetImages([airsim.ImageRequest("0", airsim.ImageType.DepthVis)])
实用方法#
在早期版本中,我们提供了几个实用方法作为 `AirSimClientBase` 的一部分。现在这些方法已移至 `airsim` 命名空间,以提供更符合 Python 习惯的接口。
替代以前的导入方式,
AirSimClientBase.write_png(my_path, img_rgba)
AirSimClientBase.wait_key('Press any key')
请使用这种方式
airsim.write_png(my_path, img_rgba)
airsim.wait_key('Press any key')
摄像头名称#
AirSim 现在使用名称来引用摄像头,而不是索引号。然而,为了保持向后兼容性,这些名称被别名为旧的字符串索引号。
替代以前的导入方式,
client.simGetCameraInfo(0)
请使用这种方式
client.simGetCameraInfo("0")
# or
client.simGetCameraInfo("front-center")
异步方法#
对于多旋翼飞行器,AirSim 有各种方法,例如 `takeoff` 或 `moveByVelocityZ`,它们需要很长时间才能完成。所有这些方法现在都已通过添加后缀 `Async` 进行重命名,如下所示。
替代以前的导入方式,
client.takeoff()
client.moveToPosition(-10, 10, -10, 5)
请使用这种方式
client.takeoffAsync().join()
client.moveToPositionAsync(-10, 10, -10, 5).join()
这里的 `.join()` 是 Python `Future` 类上的一个调用,用于等待异步调用完成。您也可以选择在调用进行时执行其他计算。
仅限仿真方法#
现在我们对仅在仿真中可用的方法和在实际车辆上可能可用的方法进行了明确区分。仅限仿真的方法以 `sim` 为前缀,如下所示。
getCollisionInfo() is renamed to simGetCollisionInfo()
getCameraInfo() is renamed to simGetCameraInfo()
setCameraOrientation() is renamed to simSetCameraOrientation()
状态信息#
以前,`CarState` 混杂了仅限仿真的信息,例如 `kinematics_true`。今后,`CarState` 将只包含可以在现实世界中获得的信息。
k = car_state.kinematics_true
请使用这种方式
k = car_state.kinematics_estimated
# or
k = client.simGetGroundTruthKinematics()