【AirSim】图像API的使用

AirSim中图像API的应用 解析Airsim图像获取保存的api 阅读详情

博客地址:https://www.cnblogs.com/zylyehuo/

参考链接: 【AirSim】

具体效果可以关注博主的小红书: 42891122102,上面有效果视频

一、基本信息与AirSim图像API的简单demo

Image API.py

/* by 01022.hk - online tools website : 01022.hk/zh/mbti.html */
import airsim
import numpy as np
import cv2

# 连接到AirSim模拟器
client = airsim.MultirotorClient()
client.confirmConnection()
# 一次获取一张图片
# response = client.simGetImage(camera_name, image_type, vehicle_name='')

# 无人机摄像头编号及含义(camera_name)
'''
摄像机0:无人机的前方视角
摄像机1:无人机的后方视角
摄像机2:无人机的底部视角,可以用于检测地面和障碍物
摄像机3:无人机的顶部视角,可以用于拍摄俯视图或进行目标跟踪
摄像机4:无人机的左侧视角
摄像机5:无人机的右侧视角
'''

# 使用图像API能够获取到的8种图像类型
'''
Scene:场景视图图片,即俯视图,可以看到整个场景的情况。                                   airsim.ImageType.Scene
DepthPlanar:平面深度图片,可以获取场景中每个像素点到相机的距离。                          airsim.ImageType.DepthPlanar
DepthPerspective:透视深度图片,可以获取场景中每个像素点到相机的距离。                     airsim.ImageType.DepthPerspective
DepthVis:深度可视化图片,可以将深度图像转换为RGB图像,方便观察。                          airsim.ImageType.DepthVis
DisparityNormalized:视差归一化图片,可以获取场景中每个像素点的视差值,用于计算深度信息。     airsim.ImageType.DisparityNormalized
Segmentation:分割图片,可以将场景中的不同物体或区域分别标记出来,方便进行目标检测和分割。      airsim.ImageType.Segmentation
SurfaceNormals:表面法线图片,可以获取场景中每个像素点的法线方向,用于计算光照和阴影效果。      airsim.ImageType.SurfaceNormals
Infrared:红外线图片,可以获取场景中的红外线图像,用于热成像和红外线探测等应用。               airsim.ImageType.Infrared
'''
# 1.直接使用simGetImage获取PNG格式的彩色图,并保存成 .png 格式的图片文件。
# response = client.simGetImage('0', airsim.ImageType.Scene, vehicle_name='Drone')
# f = open('screen/scene.png', 'wb')
# f.write(response)
# f.close()

# 2.使用 simGetImages 获取PNG格式的分割图,并保存成 .png 格式的图片文件。
# responses = client.simGetImages(
#     [airsim.ImageRequest(0, airsim.ImageType.Segmentation, pixels_as_float=False, compress=True)])
# f = open('screen/seg.png', 'wb')
# f.write(responses[0].image_data_uint8)
# f.close()
'''
图像类型           compress            pixels_as_float                   适合保存的图片类型
PNG格式            True                   False                      彩色图、分割图、表面法线图、红外图
Array格式          False                  False                      彩色图、分割图、表面法线图、红外图
浮点型格式          False                  True                              深度图
'''

# 3.使用 simGetImages 同时获取PNG格式的红外图和表面法线图,并保存成2个.png格式的图片文件。
# responses = client.simGetImages(
#     [airsim.ImageRequest(0, airsim.ImageType.Infrared, pixels_as_float=False, compress=True),
#      airsim.ImageRequest(0, airsim.ImageType.SurfaceNormals, pixels_as_float=False, compress=True)])
# # print(responses)
# # 保存红外图
# f = open('screen/infrared.png', 'wb')
# f.write(responses[0].image_data_uint8)
# f.close()
# # 保存表面法线图
# f = open('screen/surface.png', 'wb')
# f.write(responses[1].image_data_uint8)
# f.close()

# 4.保存Array格式图像
# # 读取图像数据,array格式
# responses = client.simGetImages([
#     airsim.ImageRequest(0, airsim.ImageType.Scene, pixels_as_float=False, compress=False)])
# # 将bytes格式转换为 array格式 fromstring
# img_1d = np.frombuffer(responses[0].image_data_uint8, dtype=np.uint8)
# img_bgr = img_1d.reshape(responses[0].height, responses[0].width, 3)
# # 保存为图片文件
# cv2.imwrite('screen/scene2.png', img_bgr)  # 保存为.png格式的图像文件
# cv2.imwrite('screen/scene2.jpg', img_bgr)  # 保存为.jpg格式的图像文件
# cv2.imwrite('screen/scene2.tif', img_bgr)  # 保存为.tif格式的图像文件
# cv2.imwrite('screen/scene2.bmp', img_bgr)  # 保存为.bmp格式的图像文件
'''
.jpg 格式:不带透明通道的有损压缩格式,广泛应用于互联网和数码相机领域;
.png 格式:便携式网络图形,无损压缩的位图,有较高的压缩比;
.tif 格式:非失真的压缩格式,占用空间较大,通常用于书籍和海报等教专业的领域;
.bmp 格式:是Windows操作系统中的标准图像文件格式,通常不压缩,文件所占空间较大。
'''

二、随机设置无人机位姿并获取图像

random_pictures_get_and_save_pose.py

/* by 01022.hk - online tools website : 01022.hk/zh/mbti.html */
import airsim
import os
import numpy as np
import pandas as pd

# 连接到AirSim模拟器
client = airsim.MultirotorClient()
client.confirmConnection()

# 获取图像路径
folder_path = "screen2"

# 保存位姿信息的空DataFrame
poses_df = pd.DataFrame(columns=['index', 'x', 'y', 'z', 'yaw', 'pitch', 'roll'])

# 设置随机采样的范围和数量
num_samples = 50  # 需要采样的数量
x_min, x_max, y_min, y_max, z_min, z_max = -4, 4, -4, 4, -5, -2  # 位置范围
yaw_min, yaw_max, pitch_min, pitch_max, roll_min, roll_max = -90, 90, -45, 45, -45, 45  # 姿态范围

# 相机列表
camera_list = ["0", "1", "2", "3", "4"]

# 随机采样并保存图像和位姿信息
poses_list = []
for i in range(num_samples):
    # 随机生成目标位置,并设置姿态朝向
    x = np.random.uniform(x_min, x_max)
    y = np.random.uniform(y_min, y_max)
    z = np.random.uniform(z_min, z_max)
    yaw = np.random.uniform(yaw_min, yaw_max)
    pitch = np.random.uniform(pitch_min, pitch_max)
    roll = np.random.uniform(roll_min, roll_max)
    pose = airsim.Pose(airsim.Vector3r(x, y, z), airsim.to_quaternion(pitch, roll, yaw))
    poses_list.append({'index': i, 'x': x, 'y': y, 'z': z, 'yaw': yaw, 'pitch': pitch, 'roll': roll})
    # 移动到目标位置
    client.simSetVehiclePose(pose, True)

    # # 获取相机图像
    # responses = client.simGetImages([airsim.ImageRequest("1", airsim.ImageType.Scene, False, False)])
    # img_raw = responses[0]

    # 遍历相机列表,获取每个相机的图像
    for j, camera_name in enumerate(camera_list):
        # 获取相机图像
        responses = client.simGetImages([airsim.ImageRequest(camera_name, airsim.ImageType.Scene, False, False)])
        img_raw = responses[0]

        # 将字节流转换为PIL的Image对象
        img1d = np.frombuffer(img_raw.image_data_uint8, dtype=np.uint8)
        img_rgb = img1d.reshape(img_raw.height, img_raw.width, 3)

        # 保存PNG格式的图像
        img_filename = "pose_{0}_x_{1:.2f}_y_{2:.2f}_z_{3:.2f}_yaw_{4:.2f}_pitch_{5:.2f}_roll_{6:.2f}_camera_{4}.png".format(i, x, y, z, yaw, pitch, roll, j)
        img_filepath = os.path.join(folder_path, img_filename)
        airsim.write_png(os.path.normpath(img_filepath), img_rgb)

print("全部图像和位姿信息均已保存到文件夹:", folder_path)

# 将位姿信息保存到csv文件中
poses_df = pd.DataFrame(poses_list)
poses_df.to_csv(os.path.join(folder_path, 'poses.csv'), index=False)
'''
airsim.Vector3r函数用于创建一个三维向量,表示无人机在三个轴上的位置信息。
airsim.to_quaternion函数则用于将欧拉角(即pitch、roll、yaw)转换为四元数,表示无人机的姿态信息。

四元数是一种数学工具,用于描述三维空间中的旋转。它是由一个实部和三个虚部组成的,通常表示为q = a + bi + cj + dk,
其中a是实部,b、c、d是虚部,i、j、$k$是虚数单位。四元数可以用来表示旋转的方向和角度,它比欧拉角更加稳定和准确,避免了万向锁等问题。
在机器人、计算机图形学和游戏开发等领域中,四元数被广泛应用。在AirSim中,四元数用于表示无人机的姿态信息。

万向锁是一种旋转表示中常见的问题,它发生在使用欧拉角进行旋转时,当旋转角度过大或旋转轴与旋转顺序不当时,就会出现万向锁问题。
万向锁的表现形式是旋转轴和旋转角度不能被唯一确定,即旋转自由度丧失。这会导致旋转结果不可预测,甚至无法进行旋转。
为了避免万向锁问题,可以使用四元数等其他旋转表示方法。在AirSim中,使用欧拉角进行旋转时,也可能会出现万向锁问题,因此建议使用四元数进行姿态表示。
'''

三、利用保存好的位姿csv文件截取图像

get_pictures_with_poses_from_csv.py

import airsim
import os
import csv
import numpy as np


client = airsim.MultirotorClient()
client.confirmConnection()

# 设置相机和文件路径
camera_list = ["0", "1", "2", "3", "4"]
folder_path = "/home/yehuo/python_learning/AirSim_learning/screen3"

# 读取位姿信息文件(csv格式)
poses_csv_file = open("/home/yehuo/python_learning/AirSim_learning/screen2/poses.csv", "r")
pos_reader = csv.DictReader(poses_csv_file)

# 循环采样并保存图像和位姿信息
for i, row in enumerate(pos_reader):
    # 获取姿态信息
    x, y, z = float(row['x']), float(row['y']), float(row['z'])
    yaw, pitch, roll = float(row['yaw']), float(row['pitch']), float(row['roll'])
    pose = airsim.Pose(airsim.Vector3r(x, y, z), airsim.to_quaternion(pitch, roll, yaw))

    # 移动到目标位置
    client.simSetVehiclePose(pose, True)

    # 遍历相机列表,获取每个相机的图像
    for j, camera_name in enumerate(camera_list):
        responses = client.simGetImages([airsim.ImageRequest(camera_name, airsim.ImageType.Scene, False, False)])
        img_raw = responses[0]

        # 将字节流转换为PIL的Image对象
        img1d = np.frombuffer(img_raw.image_data_uint8, dtype=np.uint8)
        img_rgb = img1d.reshape(img_raw.height, img_raw.width, 3)

        # 保存PNG格式的图像
        img_filename = "pose_{0}_x_{1:.2f}_y_{2:.2f}_z_{3:.2f}_yaw_{4:.2f}_pitch_{5:.2f}_roll_{6:.2f}_camera_{7}.png".format(i, x, y, z, yaw, pitch, roll, j)
        img_filepath = os.path.join(folder_path, img_filename)
        airsim.write_png(os.path.normpath(img_filepath), img_rgb)

print("图像和位姿信息均已保存到文件夹:", folder_path)
AirSim学习(1)-介绍,安装,unity测试 AirSim开发为人工智能研究的平台,以试验用于自动驾驶汽车的深度学习、计算机视觉和强化学习算法 阅读详情

相关推荐

解密AirSim图像API的8种魔法:从红外热成像到表面法线可视化

本文深入解析AirSim图像API的8种强大功能,从红外热成像到表面法线可视化,为无人机和机器人仿真开发者提供全面的感知工具。通过Python代码示例展示如何获取和处理各类图像数据,包括深度图、语义分割和红外图像,助力计算机视觉任务和场景理解。

rgv2345678的博客 695

AirSim官方动态 | Airsim-API接口总结

在上期我们带大家了解一些Airsim常用API接口,以及使用一些简单的API接口模拟控制模型。接下来我们将会带来一些在世界(地图)界面使用的API接口介绍、获取模型系统状态的API,以及如何添加新的API。 一、地图界面相关API 1.1 视线和世界范围 API 要测试模拟中从车辆到一个点或两点之间的视线,请分别参见simTestLineOfSightToPoint(point, Vehicle_name) 和 simTestLineOfSightBetweenPoints(point1, point2)

AMOVLAB(阿木实验室) 2501

AirSim动态 | 你离学会AirSim还差最后一步!

经过其前面几期的介绍,相信大家已经部署好AirSim的环境了,也看到很多人已经开始使用AirSim上手自己的研究了。AirSim作为一个持续更新的开源项目,其社区在开发迭代中,不断完善功能和修复bug,所提供的API也是AirSim应用这么广泛的一大原因,所以了解AirSim的API接口是非常有必要的,下面跟着阿木一起来看看官方对于AirSim的API接口介绍。 介绍 AirSim公开了一些API,让用户可以在模拟中以编程方式与设备交互。用户可以使用这些 API 来检索图像、获取状态、控制设备等。AirS

AMOVLAB(阿木实验室) 1305

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

AirSim学习(3)AirSim的PythonAPI基本操作——VehicleClient类

qq_45709806的博客 6564

AirSim(四)--- 数据记录篇: Recording 记录数据、图像捕捉、图像类型

目录0. 数据记录文件位置和格式1. Recording2. ImageType 图像类型3. API修改Recording数据: 增加、选择新数据 通过配置settings.json可以设置数据记录参数。 0. 数据记录文件位置和格式 记录的数据以制表符Tab分隔的格式写入airsim_rec.txt文件,图像位于images/文件夹中。整个文件夹默认存在于Documents文件夹中(或在设置中指定),其时间戳为记录开始时的时间,格式为 %Y-%M-%D-%H-%M-%S 例如,car vehicle

选好坑 挖好坑 才会结出好的果子 4946

DDR的Controller、Channel、Chip、Rank、Bank、Row、Column、Sided、Dimm

DDR的Controller、Channel、Chip、Bank、Rank、Row、Column、Sided、Dimm

张飞online博客 2万+

AirSim学习(4)AirSim的PythonAPI基本操作——MultirotorClient类

AirSim学习(4)AirSim的PythonAPI基本操作——MultirotorClient类

qq_45709806的博客 3798

aubo i5 + realsense D435i识别抓取实践二

aubo i5 + realsense D435i识别抓取实践二前言一、手眼标定是什么?二、标定软件安装1.aruco_ros安装2.vision_visp安装3.easy_handeye安装4.realsense驱动安装5.安装realsense ROS软件包三、配置1.launch文件修改2.打印二维码四、手眼标定1.启动launch文件2.标定步骤3.发布tf关系 前言 前面配置好了aubo机械臂的ROS软件包,机械臂可以正常运行后,接下来我们进行机械臂与相机的手眼标定。手眼标定分为eye_on_ha

转角 6373

避坑指南:AirSim无人机仿真中,相机参数设置与图像获取的那些“坑”(从settings.json到API调用)

本文深入解析AirSim无人机仿真中的相机参数配置与图像获取技巧,涵盖settings.json设置、API调用及常见问题排查。通过实战案例,帮助开发者避开相机位置、角度等参数配置中的常见陷阱,提升无人机视觉项目开发效率。

weixin_30387423的博客 341

MAX96724解串器拨码配置实战:从COAX/GMSL2模式到IIC地址设定

本文详细解析了MAX96724解串器的拨码配置方法,涵盖电源管理模式、I2C地址设定及COAX/GMSL2视频传输模式。通过实战案例和故障排查技巧,帮助工程师快速掌握xcDeserializer4.0版本的配置要点,避免常见错误,提升车载摄像头和工业视觉系统的调试效率。

weixin_29243279的博客 576

Python表白代码:“ 星光月夜烟花皆归你,我也归你”(满天烟花盛开、附番外玫瑰)

导语 "慢品人间烟火色 闲观人间岁月长" ———致自己​​​ ​ ???? 遇见我以后,我们的故事就开始了,愿你历经山河,仍觉得人间值得????。 ​ 星光月夜烟花皆归你,我也归你。关于烟花????大家都​知道多少?有多少表白故事情节都发生在烟 花下,想必木木子????不用说大家也知道叭~​​ 今天这则小短文就是关于烟花的故事!你准备好跟我一起进入烟花的世界了嘛? ​正文 “每一句文案,都有一个故事,你仔细听” ​ 1)环境安装???? 准备好:.

顾木子吖的博客 5万+

【AirSim+Python】image API和无人机获取图像

没错!这个还是b站【皮卡丘上大学啦】 up主学习的代码。我就是懒!今天下午敲得每一行代码都不能白敲,放在这方便我以后复制!

m0_53538421的博客 1951

项目实训(四)——SAM模型的学习与部署

这里的show_mask就是我们用mask的prompt进行分割,show_points就是我们用points进行分割,show_box就是通过box进行分割,这是SAM的三种prompt的方式。总的来说,Meta AI 的 Segment Anything 模型为我们提供了一种全新的物体识别和分割方式,其强大的泛化能力和广泛的应用前景将极大地推动计算机视觉领域的发展。这里有vit_h、vit_b、vit_l三种权重模型,这里可以根据自己的需要下载相应的权重模型。我们是下载的vit_h权重模型。

yyyyyyyx_的博客 1421

AirSim图像获取

图像获取API import airsim #pip install airsim # for car use CarClient() client = airsim.MultirotorClient() png_image = client.simGetImage("0", airsim.ImageType.Scene) # do something with image class ImageType(metaclass=_ImageType): Scene = 0 #景象

Karsowe的博客 1615

SAP传输请求全流程详解:从SE10创建到STMS跨环境部署(附常见错误排查)

本文详细解析了SAP传输请求的全流程,从SE10创建到STMS跨环境部署,并提供了常见错误排查方法。涵盖工作台请求、定制请求等类型,以及STMS传输原理和实战操作技巧,帮助用户高效管理SAP系统变更。

weixin_29214335的博客 143

【24届数字IC秋招总结】正式批面试经验汇总6——禾赛

15、ahb写或者读的数据存储起来了嘛,ahb读的话,apb这边是怎样的。19、覆盖率收集的时候有没有哪些是很难收集到的,然后写了定向测试。2、C++有学过嘛 还记得C++的什么内容 C++成绩多少。12、config_db机制用过嘛 四个参数的含义。8、脚本语言有学过嘛 简单学过 简单是指代码数少嘛。13、run_phase和mian_phase的区别。10、覆盖机制的创建方法 ,是不是覆盖用的很少。6、call_back机制记得哪些细节的东西。9、uvm实战学了哪些章节 印象深刻的章节。

qq_42135020的博客 1083

Airsim_API

airsim常用的api总结。

qq_43418888的博客 2721

手机VPN的连接方法分享

6、返回到VPN页面,可以看到刚刚新添加的VPN,点击开启VPN后面的开关。5、在打开的添加VPN的页面中输入VPN的信息后点击右上角的“保存”按钮。7、待VPN开关开启后,可以看到添加的VPN正在连接的提示信息了。2、在打开的小米手机设置页面中点击“更多连接方式”的菜单项。3、然后在打开的更多连接方式页面中点击VPN的菜单项。4、在打开的VPN设置页面中点击“添加VPN”的按钮。1、首先在手机屏幕左右的滑动,找到手机的设置图标。

惠惠软件 3万+

强化学习系列文章(二十三):AirSim Python API图像与图像处理

强化学习系列文章(二十三):AirSim Python API图像与图像处理 1.simGetImage函数 使用0号相机得到单张图像。返回值是PNG格式的图像。 import airsim #pip install airsim # for car use CarClient() client = airsim.MultirotorClient() png_image = client.simGetImage("0", airsim.ImageType.Scene) # do something w

hhy_csdn的博客 5662

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Airsim Python API文档整理(1.3.1版本)

AirSim公开了API,可以调用API与仿真器进行交互(核心就是通过RPC向仿真器发消息,进行模拟),可以通过API获取图像、状态和控制车辆等。 API有Python版本和C++版本的,Python更容易上手,方便后续的C++学习。 1 Python安装 pip install msgpack-rpc-python 如果没有编译源码,使用pip install airsim安装airsim,如果从官网下载的代码,可以进入PythonClient文件夹下,输入下述代码进行安装,Python的许多API在开

小玺大大 8348

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Airsim 笔记:Python API 总结

本文介绍了在Windows系统下使用AirSim API控制多旋翼无人机的基础操作,主要包括API分类、连接配置、无人机起降控制及飞行路径规划。文章摘录了西湖大学宁子安的教程,详细说明了Python环境搭建、API控制权限获取、起飞/降落命令调用,以及基于moveToPositionAsync和moveToZAsync实现三维空间的正方形轨迹飞行。特别强调了异步操作中.join()的同步作用,并指出仿真环境需通过修改settings.json设置为多旋翼模式。最后简要提及无人机底层飞控的三个解耦通道(水平、

2301_79886169的博客 1599

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

AirSim Python API避坑指南:多旋翼控制、图像采集与天气模拟的实战心得

本文详细解析了AirSim Python API在多旋翼控制、图像采集与天气模拟中的实战技巧,帮助开发者避开常见陷阱。通过具体代码示例和参数调优建议,提升无人机仿真算法的开发效率,特别适合视觉导航和复杂环境测试的应用场景。

weixin_32430941的博客 276

airsim-使用Image api保存机载摄像机的图片

使用python编程,将飞机上携带的摄像机的图片保存下来。 首先完成我的上一篇文章airsim手动控制无人机. 在Epicgame Editor中点击运行后,然后在spyder编译器中运行如下代码: python代码如下: # manul UAV import airsim import os import time import tempfile import numpy as np impor...

ningzian的博客 3588
上一篇: 【暑期多校补题记录】2025牛客多校(3)(4) 杭电多校(2)(3)
下一篇: 匀速二阶贝塞尔曲线
cmdos
博客等级 码龄19年 83粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值