AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感觉有必要记录下。

【Note】:AirSim 和 Cosys-AirSim 在外部相机配置和使用方面有较大差异,如果你用的是较新的 AirSim 版本发现原生的配置方案没有生效建议试下 Cosys-AirSim 的配置方案,这两个在大多数情况下是兼容 settings.json 文件的。


1. Cosys-AirSim 配置方案

文档溯源

对于 Cosys-AirSim 而言配置外部固定位置监控相机主要参考下面的官方文档:

和原生 AirSim 不同,Cosys-AirSim 将外部相机定义为载具的一个对象,只不过可以通过设置标签来固定相机,我感觉这么做的一个原因是 API 中获取相机图片的接口需要传入一个载具名。

但当你打开链接后找到原生 AirSim 中对应位置的示例 settings 后实际上看不到有关外部相机配置的描述,同时搜索 ExternalCamera 也返回的是无结果。

实际上你需要返回链接的最上方找到 Cosys-AirSim Settings 标签中 settings_example.json 链接并打开:

打开链接后找到 Vehicles 字段中的 Cameras 属性就可以发现控制相机是内部相机还是外部相机的标签为 External 和 ExternalLocal:

那么最精简的配置格式如下:

json 复制代码
{
    "ClockSpeed": 1,
    "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md",
    "SettingsVersion": 1.2,
    "SimMode": "Multirotor",
    "ViewMode": "SpringArmChase",
    "Vehicles": {
        "drone_1": {
            "Cameras": {
                "fpv_cam": {
                    // ...
                },
                "FixedCamera": {
                    "External": true,           // 外部标志位
                    "ExternalLocal": true,      // 外部标志位
                    // ...
                }
            },
            "Pitch": 0.0, "Roll": 0.0, "Yaw": 0.0,
            "VehicleType": "SimpleFlight",
            "X": 0.0, "Y": 0.0, "Z": 0.0
        }
    },
    "SubWindows": [
        {
            "WindowID": 0,
            "ImageType": 0,
            "CameraName": "fpv_cam",
            "Visible": true
        },
        {
            "WindowID": 2,
            "ImageType": 0,
            "CameraName": "FixedCamera",
            "Visible": true
        }
    ]
}

配置示例

下面给出一个简单的配置 setting.json 示例,包含一个搭载 1080p 分辨率相机的FPV无人机 + 一个和 4K 分辨率的地面监控相机:

json 复制代码
{
    "ClockSpeed": 1,
    "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md",
    "SettingsVersion": 1.2,
    "SimMode": "Multirotor",
    "ViewMode": "SpringArmChase",
    "Vehicles": {
        "drone_1": {
            "Cameras": {
                "fpv_cam": {
                    "CaptureSettings": [
                        {
                            "FOV_Degrees": 90,
                            "Width": 1080,
                            "Height": 720,
                            "ImageType": 0,
                            "Framerate": 30
                        }
                    ],
                    "Pitch": 0.0, "Roll": 0.0, "Yaw": 0.0,
                    "X": 0.4, "Y": 0.0, "Z": 0.0
                },
                "FixedCamera": {
                    "Pitch": 30.0, "Roll": 0.0, "Yaw": 0.0,
                    "X": 0.4, "Y": 0.0, "Z": 0.0,
                    "External": true,
                    "ExternalLocal": true,
                    "CaptureSettings": [
                        {
                            "FOV_Degrees": 90,
                            "Width": 4096,
                            "Height": 2048,
                            "ImageType": 0,
                            "Framerate": 30
                        }
                    ]
                }
            },
            "Pitch": 0.0, "Roll": 0.0, "Yaw": 0.0,
            "VehicleType": "SimpleFlight",
            "X": 0.0, "Y": 0.0, "Z": 0.0
        }
    },
    "SubWindows": [
        {
            "WindowID": 0,
            "ImageType": 0,
            "CameraName": "fpv_cam",
            "Visible": true
        },
        {
            "WindowID": 2,
            "ImageType": 0,
            "CameraName": "FixedCamera",
            "Visible": true
        }
    ]
}

启动程序后控制无人机就可以看见两个子图中的画面存在差异:


2. AirSim 配置方案

文档溯源

对于原生 AirSim 配置外部固定位置监控相机主要参考的是下面的官方文档:

进入链接后下拉找到 Aviable Settings and Their Defaults 这个标签就可以看到示例 settings.json 内容:

重点关注示例中的 ExternalCameras 字段,这个字段表示外部相机配置,该字段与 Vehicles 字段是同级的,不能将该字段放在无人机字段下面,去除掉冗余内容后最精简版本如下:

json 复制代码
{
    "ClockSpeed": 1,
    "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md",
    "SettingsVersion": 1.2,
    "SimMode": "Multirotor",
    "ViewMode": "SpringArmChase",
    "Vehicles": {
        "SimpleFlight": {
            "Cameras": {
                "FPVCamera":{   // 机载相机名
                    // ...
                }
            }
        }
    },
    "ExternalCameras": {
        "FixedCamera": {       // 外部监控相机名
            // ...
        }
    },
    "SubWindows": [
        {
            "WindowID": 0,
            "ImageType": 0,
            "CameraName": "FPVCamera",  // 机载相机名
            "Visible": true
        },
        {
            "WindowID": 2,
            "ImageType": 0,
            "CameraName": "FixedCamera",    // 外部监控相机名
            "Visible": true
        }
    ]
}

配置示例

下面给出一个简单的配置 setting.json 示例,包含一个搭载 1080p 分辨率相机的FPV无人机 + 一个和 4K 分辨率的地面监控相机:

json 复制代码
{
    "ClockSpeed": 1,
    "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md",
    "SettingsVersion": 1.2,
    "SimMode": "Multirotor",
    "ViewMode": "SpringArmChase",
    "Vehicles": {
        "drone_1": {
            "Cameras": {
                "fpv_cam": {
                    "CaptureSettings": [
                        {
                            "FOV_Degrees": 90,
                            "Width": 1080,
                            "Height": 720,
                            "ImageType": 0,
                            "Framerate": 30
                        }
                    ],
                    "Pitch": 0.0, "Roll": 0.0, "Yaw": 0.0,
                    "X": 0.4, "Y": 0.0, "Z": 0.0
                }
            },
            "Pitch": 0.0, "Roll": 0.0, "Yaw": 0.0,
            "VehicleType": "SimpleFlight",
            "X": 0.0, "Y": 0.0, "Z": 0.0
        }
    },
    "ExternalCameras": {
        "FixedCamera": {
            "CaptureSettings": [
                {
                    "FOV_Degrees": 90,
                    "Width": 4096,
                    "Height": 2048,
                    "ImageType": 0,
                    "Framerate": 30
                }
            ],
            "Pitch": 30.0, "Roll": 0.0, "Yaw": 0.0,
            "X": 5.0, "Y": 0.0, "Z": 0.0
        }
    },
    "SubWindows": [
        {
            "WindowID": 0,
            "ImageType": 0,
            "CameraName": "fpv_cam",
            "Visible": true
        },
        {
            "WindowID": 2,
            "ImageType": 0,
            "CameraName": "FixedCamera",
            "Visible": true
        }
    ]
}

然后运行程序操作手柄就可以看见两个监控子窗中的画面内容存在差异:

【Note】:如果你开启程序后发现两个子窗口的画面是同步的,并且第二个窗口画面还比较模糊,这是因为 AirSim 版本问题,建议使用上面 Cosys-AirSim 的配置方案重试。

相关推荐
水圈模拟3 小时前
世界模型:让 AI 预判水怎么流
人工智能·机器人
深圳多奥智能一卡(码、脸)通系统3 小时前
实现机器人、梯控与电梯的无缝对接,成为了一个亟待解决的痛点
机器人·agv·机器狗·门禁·梯控·amr
做个有深度的老李4 小时前
中小机加工车间协作机器人落地难点|从集成交付能力角度选型
大数据·人工智能·机器人·自动化·柔性机器人
sxgzzn4 小时前
光伏电站运维智能监测与能源管理系统的综合应用
无人机·开关柜局放在线监测·gis局放在线监测·矿用高压电缆绝缘故障检测装置·光伏运维管理系统
数智工坊5 小时前
视觉SLAM第2讲|初识SLAM:经典框架、传感器选型与工程环境全梳理
人工智能·深度学习·数码相机·机器人
workflower5 小时前
汽车自动驾驶9 要素
人工智能·机器学习·重构·云计算·汽车·无人机
PascalXie5 小时前
地面机器人VSLAM技术调研与实现方案参考:算法、硬件平台与工程落地
算法·机器人
成都渲染101云渲染66665 小时前
云渲染怎么用?从项目准备到提交出图,3ds Max、VRay、UE5 实用教程
3d·ue5
数智工坊18 小时前
视觉SLAM第12讲|地图构建:单目稠密重建、RGB-D点云与八叉树地图全解析
人工智能·深度学习·矩阵·机器人
鲁邦通物联网20 小时前
绿色建筑场景下的机器人梯控设计:任务调度与运行优化方法
机器人·巡检机器人·机器人梯控·非侵入式采集·配送机器人·机器人乘梯·机器人自主乘梯