IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> AirSim(四)--- 数据记录篇: Recording 记录数据、图像捕捉、图像类型 -> 正文阅读

[游戏开发]AirSim(四)--- 数据记录篇: Recording 记录数据、图像捕捉、图像类型


通过配置settings.json可以设置数据记录参数。

0. 数据记录文件位置和格式

记录的数据以制表符Tab分隔的格式写入airsim_rec.txt文件,图像位于images/文件夹中。整个文件夹默认存在于Documents文件夹中(或在设置中指定),其时间戳为记录开始时的时间,格式为

%Y-%M-%D-%H-%M-%S

例如,car vehicle记录以下字段-

VehicleName TimeStamp   POS_X   POS_Y   POS_Z   Q_W Q_X Q_Y Q_Z Throttle    Steering    Brake   Gear    Handbrake   RPM Speed   ImageFile

再如,Multirotot记录以下字段

VehicleName TimeStamp   POS_X   POS_Y   POS_Z   Q_W Q_X Q_Y Q_Z ImageFile

1. Recording

  1. Recording允许您以指定的时间间隔记录位置、方向、速度等数据以及所捕获的图像。
  2. 可以按下右下角的红色Record键或R键开始录制数据。
  3. 数据存储在Documents\AirSim文件夹(或使用Folder配置参数指定的文件夹)。每开启一次记录,数据子文件夹以时间戳命名,tab分隔
  4. 具体参数:
参数含义
RecordInterval指定捕捉两个图像之间的最小间隔(以秒为单位)。
RecordOnMovetrue:指定如果车辆的位置或方向没有改变,则不记录帧
Folder创建父文件夹,包含带有时间戳的记录子文件夹。必须指定目录的绝对路径。如果没有,则路径默认为 Documents/AirSim。 E.g. "Folder": "/home/<user>/Documents"
Enabledtrue:仿真开始时自动开始记录。默认情况下,被设置为false
Cameras指定哪些相机被用来捕捉图像。默认情况下,相机0的场景图像被记录为压缩的png格式。该项设置是json array,所以可以指定多个相机来捕捉图像,每个都有可能不同的图像类型。目前在不支持外部摄像机记录
Cameras.PixelsAsFloatTrue:表示图像保存为PFM文件,而不是PNG文件
Cameras.VehicleName为每辆车指定特定的摄像头。如果camera元素不存在,则会记录每辆车的默认摄像头的场景图像。
“Cameras”: []果不想记录任何图像,只记录车辆的物理数据,那么就指定camera元素为空
示例:下面的Cameras元素,代表记录Car1的场景和分割图像,记录Car2-的场景图像
"Cameras": [
    { "CameraName": "0", "ImageType": 0, "PixelsAsFloat": false, "VehicleName": "Car1", "Compress": true },
    { "CameraName": "0", "ImageType": 5, "PixelsAsFloat": false, "VehicleName": "Car1", "Compress": true },
    { "CameraName": "0", "ImageType": 0, "PixelsAsFloat": false, "VehicleName": "Car2", "Compress": true }
]

2. ImageType 图像类型

该部分内容来自官网文档中的Image APIs部分
可用的ImageType值和含义:

Scene = 0,
DepthPlanar = 1相机平面内的深度图像,即所有平面平行于相机的点具有相同的深度,一般可用作ground truth image
DepthPerspective = 2,深度图像,using a projection ray that hits that pixel,一般可用作ground truth image
DepthVis = 3,获得一个有助于深度可视化的图像。在这种情况下,每个像素值是从黑到白插值,根据在相机平面的深度(米)。纯白色表示深度为100米或更多,纯黑色表示深度为0米。
DisparityNormalized = 4,diaparity图像,这种情况下,每个像素是(Xl - Xr)/Xmax,因此规一化为0到1之间的值
Segmentation = 5,得到一个分割的场景图像,一般用作分割图像的ground truth。在启动时,AirSim为环境中每个可用网格mesh分配值0到255。然后将该值映射到托盘Pallet中的特定颜色。每个对象ID的RGB值都可以在这个文件中找到。建议您使用此API请求未压缩的图像,以确保您为分割图像任务获得精确的RGB值
SurfaceNormals = 6,
Infrared = 7,目前还只是一个从对象ID到灰色范围0-255的映射。噪声设置可以应用于这种图像类型,以获得更真实的效果。我们仍在努力添加其他红外artifacts
OpticalFlow = 8,这些图像类型返回由相机的视角感知到的运动信息。OpticalFlow返回一个2通道图像,通道分别对应vx和vy。
OpticalFlowVis = 9类似于OpticalFlow,但将流数据转换为RGB,以获得更“可视化”的输出。

3. API修改Recording数据: 增加、选择新数据

这部分内容来自官网:Design》Modifying Recording Data

  1. AirSim提供了Recording的功能,可以轻松地收集数据和图像。采用接口函数Recording APIs也允许使用API启动和停止记录。

  2. 默认记录的数据对于您的用例可能不够,有时也期望能记录额外的数据,如IMU、GPS传感器、直升机的转子速度等。

  3. 可以使用现有的Python和c++ API来获取信息并按需存储,特别是对于Lidar。

  4. 另一个选项是添加小字段small fields是可能的,例如如GPS或内部数据(如虚幻位置或其他)可以通过修改AirSim内的recording methods

  5. Code Changes:代码改变后,需要从源码编译和使用AirSim。如果需要,您可以在修改后自己编译二进制文件。

  6. 填充要存储的数据的主要方法是:PawnSimApi::getRecordFileLine。它是所有车辆的基本方法,Car重写它以记录更多的数据,正如 CarPawnSimApi::getRecordFileLine.中看到的那样。

  7. 要记录multirotor的更多的additional数据,可以在MultirotorPawnSimApi.cpp/h文件中添加类似的方法,override base class基类实现,并附加append其他数据。

  8. 还可以根据需要修改和删除当前已记录logged数据。
    以下是一个记录multirotor的GPS,IMU和气压计barometer数据的例子

// MultirotorPawnSimApi.cpp
std::string MultirotorPawnSimApi::getRecordFileLine(bool is_header_line) const
{
    std::string common_line = PawnSimApi::getRecordFileLine(is_header_line);
    if (is_header_line) {
        return common_line +
               "Latitude\tLongitude\tAltitude\tPressure\tAccX\tAccY\tAccZ\t";
    }

    const auto& state = vehicle_api_->getMultirotorState();
    const auto& bar_data = vehicle_api_->getBarometerData("");
    const auto& imu_data = vehicle_api_->getImuData("");

    std::ostringstream ss;
    ss << common_line;
    ss << state.gps_location.latitude << "\t" << state.gps_location.longitude << "\t"
       << state.gps_location.altitude << "\t";

    ss << bar_data.pressure << "\t";

    ss << imu_data.linear_acceleration.x() << "\t" << imu_data.linear_acceleration.y() << "\t"
       << imu_data.linear_acceleration.z() << "\t";

    return ss.str();
}
// MultirotorPawnSimApi.h
virtual std::string getRecordFileLine(bool is_header_line) const override;
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 12:26:53  更:2022-04-29 12:27:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/17 1:08:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码