肇东市三兆电动机有限公司
若是莫得pip install一下
发布日期:2024-07-03 15:28    点击次数:115

若是莫得pip install一下

泉州和兴五金塑料制品有限公司 1.无东谈主机截至 2.数据录制 3.跑ORB-SLAM 3.1 数据处理 3.2 ORB-SLAM运行 4.参考贵府

在之前这篇、这篇和这篇博客中,咱们使用汽车当作收集平台进行了数据收集。但前边咱们也说过,AirSim还扶助无东谈主机的仿真。是以这篇博客主要先容怎么使用无东谈主机当作平台来收集数据。况且这亦然尽头有必要的。因为有些仿真场景简直不符合用车来开啊,比如LandscapeMountains、能够Zhangjiajie场景,汽车在内部基本动不了,如下图所示。

图片剧场设备

汽车会卡在山上动不了,无法顺利探索。 1.无东谈主机截至

AirSim切换成无东谈主机花样尽头浅易,只需要在成就文献settings.json中将SimMode属性设为Multirotor即可。但问题在于无东谈主机的截至。因为AirSim默许是通过外部的手柄操控无东谈主机,而非庸俗键盘,是以径直用键盘是操作不了无东谈主机的。但咱们手边又莫得不错截至的手柄,是以必须要先斟酌怎么诈欺键盘操控无东谈主机。

怎么惩办这个目的呢?谜底是不错通过AirSim提供的API来操控无东谈主机。通过编写剧本监听键盘事件,凭据不同的按键对应不同的API,即可终了对于无东谈主机的操控。网上也有现成的代码,底下的代码主要参考了这个网页。对于AirSim的可编程API,咱们会在之后的条记中再先容。这里就先“无脑”使用即可。

# coding=utf-8
import keyboard
import airsim


def callBackFunc(x):
    w = keyboard.KeyboardEvent('down', 28, 'w')             # 前进
    s = keyboard.KeyboardEvent('down', 28, 's')             # 后退
    a = keyboard.KeyboardEvent('down', 28, 'a')             # 左移
    d = keyboard.KeyboardEvent('down', 28, 'd')             # 右移
    up = keyboard.KeyboardEvent('down', 28, 'up')           # 飞腾
    down = keyboard.KeyboardEvent('down', 28, 'down')       # 着落
    left = keyboard.KeyboardEvent('down', 28, 'left')       # 左转
    right = keyboard.KeyboardEvent('down', 28, 'right')     # 右转
    k = keyboard.KeyboardEvent('down', 28, 'k')             # 获得截至
    l = keyboard.KeyboardEvent('down', 28, 'l')             # 开释截至

    if x.event_type == 'down' and x.name == w.name:
        # 前进
        client.moveByVelocityBodyFrameAsync(3, 0, 0, 0.5)
        print("前进")
    elif x.event_type == 'down' and x.name == s.name:
        # 后退
        client.moveByVelocityBodyFrameAsync(-3, 0, 0, 0.5)
        print("后退")
    elif x.event_type == 'down' and x.name == a.name:
        # 左移
        client.moveByVelocityBodyFrameAsync(0, -2, 0, 0.5)
        print("左移")
    elif x.event_type == 'down' and x.name == d.name:
        # 右移
        client.moveByVelocityBodyFrameAsync(0, 2, 0, 0.5)
        print("右移")
    elif x.event_type == 'down' and x.name == up.name:
        # 飞腾
        client.moveByVelocityBodyFrameAsync(0, 0, -0.5, 0.5)
        print("飞腾")
    elif x.event_type == 'down' and x.name == down.name:
        # 着落
        client.moveByVelocityBodyFrameAsync(0, 0, 0.5, 0.5)
        print("着落")
    elif x.event_type == 'down' and x.name == left.name:
        # 左转
        client.rotateByYawRateAsync(-20,剧场设备 0.5)
        print("左转")
    elif x.event_type == 'down' and x.name == right.name:
        # 右转
        client.rotateByYawRateAsync(20, 0.5)
        print("右转")
    elif x.event_type == 'down' and x.name == k.name:
        # 无东谈主机升起
        # get control
        client.enableApiControl(True)
        print("get control")
        # unlock
        client.armDisarm(True)
        print("unlock")
        # Async methods returns Future. Call join() to wait for task to complete.
        client.takeoffAsync().join()
        print("takeoff")
    elif x.event_type == 'down' and x.name == l.name:
        # 无东谈主机降落
        client.landAsync().join()
        print("land")
        # lock
        client.armDisarm(False)
        print("lock")
        # release control
        client.enableApiControl(False)
        print("release control")
    else:
        # 莫得按下按键
        client.moveByVelocityBodyFrameAsync(0, 0, 0, 0.5).join()
        client.hoverAsync().join()  # 第四阶段:悬停6秒钟
        print("悬停")


if __name__ == '__main__':
    # 确立剧本与AirSim环境的贯穿
    client = airsim.MultirotorClient()
    client.confirmConnection()

    # 监听键盘事件,实施回调函数
    keyboard.hook(callBackFunc)
    keyboard.wait()

使用剧本前需要确保有keyboard和airsim两个包,若是莫得pip install一下。启动剧本后,按k键获得截至,按l键开释截至。W、S、A、D键用于截至前进后退、左右平移,标的键截至飞腾着落以及左转右转。这个剧本也放到了Github神气中,叫AirSimDroneKeyboardController.py,点击检讨源文献。

2.数据录制

在不错竣工截至无东谈主机以后,背面的操作就和用汽车收集数据相通了。比如,这里给出一个诈欺无东谈主机录制双目影像的成就文献。

{
  "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md",
  "SettingsVersion": 1.2,
  "SimMode": "Multirotor",
  "Recording": {
    "RecordInterval": 0.05,
    "Cameras": [
        { "CameraName": "front_left", "ImageType": 0, "PixelsAsFloat": false, "Compress": true },
        { "CameraName": "front_right", "ImageType": 0, "PixelsAsFloat": false, "Compress": true }
    ]
  },
  "CameraDefaults": {
    "CaptureSettings": [
      {
        "ImageType": 0,
        "Width": 600,
        "Height": 400,
        "FOV_Degrees": 90
      }
    ]
  }
}

然后咱们启动AirSim,插足Zhangjiajie环境,如下图所示。

图片

然后,咱们开启一个结尾,运行剧本,然后按k键即可获得截至,如下所示。

图片

然后就不错转移了。终末,在仿真环境中按下R键初始录制,再切回结尾一边转移一边录制,终结时再切回仿真环境按R键终结录制即可,如下图所示。

图片

就会得到和之前相通的收集好的数据了。咱们诚然不错进一步用之前写好的剧本进行处理,然后跑SLAM。 3.跑ORB-SLAM

这一部分其实是和这篇博客说的实质是相通的,不错参考。为了竣工性,这里再浅易列一下。

3.1 数据处理

在之前的博客中也提到了,AirSim径直保存的影像由于步调的问题,不可径直拿来跑ORB-SLAM。因此,需要对数据进行一些预处理。预处理不错使用之前依然写好的剧本,这里就不再赘述了。

3.2 ORB-SLAM运行

数据准备好以后,就不错跑ORB-SLAM了。成就好相干文献,运行即可。诈欺无东谈主机收集数据,并跑SLAM的恶果如下动图所示。

图片

可视化的轨迹以及和真值的相比如下所示。

图片

图片

4.参考贵府 [1] https://blog.csdn.net/weixin_44691296/article/details/119605213 本站仅提供存储就业,统统实质均由用户发布,如发现存害或侵权实质,请点击举报。

上一篇:荣耀X50剧场设备的这一冲破无疑为行业拓荒了新的标杆
下一篇:任何一个修车师父都不会是全能