最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

AirSim基本圖像API及復(fù)雜位姿數(shù)據(jù)集制作

2023-06-14 09:51 作者:皮卡丘上大學(xué)啦  | 我要投稿

一、基本信息與AirSim圖像API的簡單demo

import airsim
import numpy as np
import CV2

# 連接到AirSim模擬器
client = airsim.MultirotorClient()
client.confirmConnection()
# 一次獲取一張圖片
# response = client.simGetImage(camera_name, image_type, vehicle_name='')

# 無人機(jī)攝像頭編號及含義(camera_name)
'''
攝像機(jī)0:無人機(jī)的前方視角
攝像機(jī)1:無人機(jī)的后方視角
攝像機(jī)2:無人機(jī)的底部視角,可以用于檢測地面和障礙物
攝像機(jī)3:無人機(jī)的頂部視角,可以用于拍攝俯視圖或進(jìn)行目標(biāo)跟蹤
攝像機(jī)4:無人機(jī)的左側(cè)視角
攝像機(jī)5:無人機(jī)的右側(cè)視角
'''

# 使用圖像API能夠獲取到的8種圖像類型
'''
Scene:場景視圖圖片,即俯視圖,可以看到整個(gè)場景的情況。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? airsim.ImageType.Scene
DepthPlanar:平面深度圖片,可以獲取場景中每個(gè)像素點(diǎn)到相機(jī)的距離。 ? ? ? ? ? ? ? ? ? ? ? ? ?airsim.ImageType.DepthPlanar
DepthPerspective:透視深度圖片,可以獲取場景中每個(gè)像素點(diǎn)到相機(jī)的距離。 ? ? ? ? ? ? ? ? ? ? airsim.ImageType.DepthPerspective
DepthVis:深度可視化圖片,可以將深度圖像轉(zhuǎn)換為RGB圖像,方便觀察。 ? ? ? ? ? ? ? ? ? ? ? ? ?airsim.ImageType.DepthVis
DisparityNormalized:視差歸一化圖片,可以獲取場景中每個(gè)像素點(diǎn)的視差值,用于計(jì)算深度信息。 ? ? airsim.ImageType.DisparityNormalized
Segmentation:分割圖片,可以將場景中的不同物體或區(qū)域分別標(biāo)記出來,方便進(jìn)行目標(biāo)檢測和分割。 ? ? ?airsim.ImageType.Segmentation
SurfaceNormals:表面法線圖片,可以獲取場景中每個(gè)像素點(diǎn)的法線方向,用于計(jì)算光照和陰影效果。 ? ? ?airsim.ImageType.SurfaceNormals
Infrared:紅外線圖片,可以獲取場景中的紅外線圖像,用于熱成像和紅外線探測等應(yīng)用。 ? ? ? ? ? ? ? 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 ? ? ? ? ? ? ? ? ? ? ?彩色圖、分割圖、表面法線圖、紅外圖
浮點(diǎn)型格式 ? ? ? ?False ? ? ? ? ? ? ? ? ? ? ?True ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?深度圖
'''

# 3.使用 simGetImages 同時(shí)獲取PNG格式的紅外圖和表面法線圖,并保存成2個(gè).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格式圖像
# 讀取圖像數(shù)據(jù),array格式
responses = client.simGetImages([
? ?airsim.ImageRequest(0, airsim.ImageType.Scene, pixels_as_float=False, compress=False)])
# 將bytes格式轉(zhuǎn)換為 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('scene.png', img_bgr) ?# 保存為.png格式的圖像文件
CV2.imwrite('scene.jpg', img_bgr) ?# 保存為.jpg格式的圖像文件
CV2.imwrite('scene.tif', img_bgr) ?# 保存為.tif格式的圖像文件
CV2.imwrite('scene.bmp', img_bgr) ?# 保存為.bmp格式的圖像文件
'''
.jpg 格式:不帶透明通道的有損壓縮格式,廣泛應(yīng)用于互聯(lián)網(wǎng)和數(shù)碼相機(jī)領(lǐng)域;
.png 格式:便攜式網(wǎng)絡(luò)圖形,無損壓縮的位圖,有較高的壓縮比;
.tif 格式:非失真的壓縮格式,占用空間較大,通常用于書籍和海報(bào)等教專業(yè)的領(lǐng)域;
.bmp 格式:是Windows操作系統(tǒng)中的標(biāo)準(zhǔn)圖像文件格式,通常不壓縮,文件所占空間較大。
'''

想要運(yùn)行對應(yīng)的部分需要注釋掉其余代碼

二、隨即設(shè)置無人機(jī)位姿并獲取圖像

import airsim
import os
import numpy as np
import pandas as pd

# 連接到AirSim模擬器
client = airsim.MultirotorClient()
client.confirmConnection()

# 獲取圖像路徑
folder_path = "screen"

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

# 設(shè)置隨機(jī)采樣的范圍和數(shù)量
num_samples = 50 ?# 需要采樣的數(shù)量
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 ?# 姿態(tài)范圍

# 相機(jī)列表
camera_list = ["0", "1", "2", "3", "4"]

# 隨機(jī)采樣并保存圖像和位姿信息
poses_list = []
for i in range(num_samples):
? ?# 隨機(jī)生成目標(biāo)位置,并設(shè)置姿態(tài)朝向
? ?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})
? ?# 移動到目標(biāo)位置
? ?client.simSetVehiclePose(pose, True)

? ?# # 獲取相機(jī)圖像
? ?# responses = client.simGetImages([airsim.ImageRequest("1", airsim.ImageType.Scene, False, False)])
? ?# img_raw = responses[0]

? ?# 遍歷相機(jī)列表,獲取每個(gè)相機(jī)的圖像
? ?for j, camera_name in enumerate(camera_list):
? ? ? ?# 獲取相機(jī)圖像
? ? ? ?responses = client.simGetImages([airsim.ImageRequest(camera_name, airsim.ImageType.Scene, False, False)])
? ? ? ?img_raw = responses[0]

? ? ? ?# 將字節(jié)流轉(zhuǎn)換為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函數(shù)用于創(chuàng)建一個(gè)三維向量,表示無人機(jī)在三個(gè)軸上的位置信息。
airsim.to_quaternion函數(shù)則用于將歐拉角(即pitch、roll、yaw)轉(zhuǎn)換為四元數(shù),表示無人機(jī)的姿態(tài)信息。

四元數(shù)是一種數(shù)學(xué)工具,用于描述三維空間中的旋轉(zhuǎn)。它是由一個(gè)實(shí)部和三個(gè)虛部組成的,通常表示為q = a + bi + cj + dk,
其中a是實(shí)部,b、c、d是虛部,i、j、$k$是虛數(shù)單位。四元數(shù)可以用來表示旋轉(zhuǎn)的方向和角度,它比歐拉角更加穩(wěn)定和準(zhǔn)確,避免了萬向鎖等問題。
在機(jī)器人、計(jì)算機(jī)圖形學(xué)和游戲開發(fā)等領(lǐng)域中,四元數(shù)被廣泛應(yīng)用。在AirSim中,四元數(shù)用于表示無人機(jī)的姿態(tài)信息。

萬向鎖是一種旋轉(zhuǎn)表示中常見的問題,它發(fā)生在使用歐拉角進(jìn)行旋轉(zhuǎn)時(shí),當(dāng)旋轉(zhuǎn)角度過大或旋轉(zhuǎn)軸與旋轉(zhuǎn)順序不當(dāng)時(shí),就會出現(xiàn)萬向鎖問題。
萬向鎖的表現(xiàn)形式是旋轉(zhuǎn)軸和旋轉(zhuǎn)角度不能被唯一確定,即旋轉(zhuǎn)自由度喪失。這會導(dǎo)致旋轉(zhuǎn)結(jié)果不可預(yù)測,甚至無法進(jìn)行旋轉(zhuǎn)。
為了避免萬向鎖問題,可以使用四元數(shù)等其他旋轉(zhuǎn)表示方法。在AirSim中,使用歐拉角進(jìn)行旋轉(zhuǎn)時(shí),也可能會出現(xiàn)萬向鎖問題,因此建議使用四元數(shù)進(jìn)行姿態(tài)表示。
'''

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

import airsim
import os
import csv
import numpy as np


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

# 設(shè)置相機(jī)和文件路徑
camera_list = ["0", "1", "2", "3", "4"]
folder_path = "E:/FunctionMethod/airsim_images/snow_datasets/square1"

# 讀取位姿信息文件(csv格式)
poses_csv_file = open("E:/poses.csv", "r")
pos_reader = csv.DictReader(poses_csv_file)

# 循環(huán)采樣并保存圖像和位姿信息
for i, row in enumerate(pos_reader):
? ?# 獲取姿態(tài)信息
? ?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))

? ?# 移動到目標(biāo)位置
? ?client.simSetVehiclePose(pose, True)

? ?# 遍歷相機(jī)列表,獲取每個(gè)相機(jī)的圖像
? ?for j, camera_name in enumerate(camera_list):
? ? ? ?responses = client.simGetImages([airsim.ImageRequest(camera_name, airsim.ImageType.Scene, False, False)])
? ? ? ?img_raw = responses[0]

? ? ? ?# 將字節(jié)流轉(zhuǎn)換為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基本圖像API及復(fù)雜位姿數(shù)據(jù)集制作的評論 (共 條)

分享到微博請遵守國家法律
扎鲁特旗| 康马县| 白玉县| 武汉市| 甘泉县| 洞口县| 额尔古纳市| 鹰潭市| 卓尼县| 江都市| 朝阳区| 米脂县| 老河口市| 哈尔滨市| 十堰市| 大田县| 南阳市| 宝丰县| 鹰潭市| 青神县| 衡山县| 革吉县| 民县| 达拉特旗| 无棣县| 华蓥市| 黄山市| 乌鲁木齐市| 鸡西市| 昆明市| 洞头县| 墨脱县| 阿坝| 四子王旗| 台北县| 准格尔旗| 南安市| 富民县| 昌都县| 永兴县| 隆回县|