api文档https://github.com/Microsoft/AirSim/blob/main/docs/image_apis.md#computer-vision-mode
AirSim\PythonClient\computer_vision\capture_ir_segmentation.py
project_3d_point_to_screen
用于将三维点投影到屏幕上的二维像素坐标。它接受以下参数:
subjectXYZ:待投影的三维点的坐标(X、Y、Z)。
camXYZ:相机的位置坐标(X、Y、Z)。
camQuaternion:相机的四元数表示的旋转。
camProjMatrix4x4:相机的投影矩阵。
imageWidthHeight:图像的宽度和高度。
函数的主要步骤如下:
将相机位置转换为列向量。
将相机的四元数旋转转换为偏航角、俯仰角和滚转角。
根据相机的俯仰角、滚转角和偏航角创建旋转矩阵。
将待投影的三维点坐标转换到相机的局部坐标系中。
通过矩阵乘法将坐标点旋转到相机的坐标系中。
重新创建相机的透视投影。
将坐标点转换为像素值,并根据图像的宽度和高度进行归一化。
最后,函数返回投影点在屏幕上的二维像素坐标。
get_image
请求图像
main
用于跟随AirSim环境中的物体并记录图像
def main(client,
objectList,
pitch=numpy.radians(270), #image straight down
roll=0,
yaw=0,
z=-122,
writeIR=True,
writeScene=False,
irFolder='',
sceneFolder=''):
其中
client:与AirSim的连接,例如client = MultirotorClient()用于无人机。
objectList:AirSim环境中要跟随的物体的标签列表。
pitch:俯仰角(弧度),在计算机视觉模式下表示相机角度。
roll:滚转角(弧度)。
yaw:偏航角(弧度)。
z:高度(米),根据NED坐标系,应为负值以在地面上方。
writeIR:如果为True,将写入红外图像。
writeScene:如果为True,将写入场景图像。
irFolder:红外图像的文件夹路径。
sceneFolder:场景图像的文件夹路径。
函数的主要步骤如下:
遍历物体列表。
获取物体的初始姿态。
在一定时间内循环捕获图像。
调用get_image函数获取图像,传入相机位置和姿态参数。
将彩色场景图像转换为BGR格式以便写入。
如果writeIR为True,则将红外图像写入指定文件夹。
如果writeScene为True,则将场景图像写入指定文件夹。
更新计数器和经过的时间。
获取物体的当前姿态。
使用project_3d_point_to_screen函数将物体的三维坐标投影到图像上,并打印出像素坐标。
重新映射红外放射指数
移动相机并捕获图像的Python 代码示例
要使用 API 在环境中移动,可以使用simSetVehiclePoseAPI。该 API 获取位置和方向,并将其设置在前置中央摄像头所在的隐形车辆上。所有其余摄像机都保持相对位置移动。如果您不想更改位置(或方向),则只需将位置(或方向)的分量设置为浮点 nan 值。允许simGetVehiclePose检索当前姿势。您还可以使用simGetGroundTruthKinematics来获取运动的运动学量。许多其他非车辆特定 API 也可用,例如分段 API、碰撞 API 和相机 API。