【airsim】computer_vision 源码阅读

2024-01-07 17:32:14

api文档https://github.com/Microsoft/AirSim/blob/main/docs/image_apis.md#computer-vision-mode

capture_ir_segmentation

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函数将物体的三维坐标投影到图像上,并打印出像素坐标。

create_ir_segmentation_map.py

重新映射红外放射指数

cv_mode

移动相机并捕获图像的Python 代码示例

姿势设定

要使用 API 在环境中移动,可以使用simSetVehiclePoseAPI。该 API 获取位置和方向,并将其设置在前置中央摄像头所在的隐形车辆上。所有其余摄像机都保持相对位置移动。如果您不想更改位置(或方向),则只需将位置(或方向)的分量设置为浮点 nan 值。允许simGetVehiclePose检索当前姿势。您还可以使用simGetGroundTruthKinematics来获取运动的运动学量。许多其他非车辆特定 API 也可用,例如分段 API、碰撞 API 和相机 API。

文章来源:https://blog.csdn.net/prinTao/article/details/135441300
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。