# 基于跟踪相机的室内自主飞行实现

**注意：本文只适用于Kerloud Nano VIO Indoor无人机产品**

室内定位作为无人机室内自主飞行的关键技术，实现方式有光流、激光和基于视觉的SLAM方法。 区别于市场已有产品，我们基于对视觉可提供丰富信息（不限于定位）的理解，专注研究视觉方法在室内场景的应用。这里我们将为高级用户提供Kerloud vision drone。

## 如何配置

### 固件设置

机载的Kerloud飞控单元在出厂阶段已正确配置。Kerloud Nano VIO indoor可执行室内、室外任务， 我们提供的EKF2\_INDOOR\_EN参数可便捷切换室内、室外场景：将EKF2\_INDOOR\_EN置1，无人机自动切换为室内模式。

![](https://872799980-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Ml3VlSesh_3iSoHlURD%2Fuploads%2Fgit-blob-f3b815854ca6854f950f4fe3b326f0b174124b3b%2Fvision_indoor_param.png?alt=media)

### 网络设置

将Kerloud vision drone通过Wi-Fi连接到本地网络，可以轻松实现远程操作。基于ssh工具，用户可以通过相应的IP地址访问机载电脑。

```
        ssh ubuntu@<drone IP address>
```

登录所连路由器的管理页面可以查阅无人机的IP地址。以TP-Link路由器为例，用户可以访问192.168.1.1或者<http://tplogin.cn>来检阅本地网络所连接的全部电脑。 Kerloud vision drone默认使用的计算机名为ubuntu，IP地址显示如下：

![](https://872799980-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Ml3VlSesh_3iSoHlURD%2Fuploads%2Fgit-blob-33e7a2de528612f6486db309a5795ebee646b274%2Ftplink_admin.png?alt=media)

{% hint style="info" %}
你也可以考虑使用手机热点功能来建立需要的局域网
{% endhint %}

## 室内半自动飞行

我们建议所有用户第一步先完成室内半自动飞行，这样有助于验证板载软件的定位精度。Kerloud vision drone采用Intel Realsense追踪摄像头T265作为板载感知， 板载软件含realsense library、mavros和visual odometry 软件包，工作环境位于\~/src/catkinws\_realsense。

编译工作环境，

```
    cd ~/src/catkinws_realsense
    catkin build -j 3
```

在系统上电启动后等待至少1分钟，启动定位程序，

```
    cd ~/src/catkinws_realsense
    bash run.sh
```

然后我们将在terminal中看到被提取的必要节点，需确认“Realsense is up”消息显示如下：

![](https://872799980-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Ml3VlSesh_3iSoHlURD%2Fuploads%2Fgit-blob-044b76bdb29bf00793382087bae0dfd218e27bd3%2Ft265_bootok.png?alt=media)

若Realsense摄像头启动失败，并显示“No realsense devices were found”，这是realsense library的一个已声明bug，详见：<https://github.com/IntelRealSense/librealsense/issues/3657>, 用户可尝试如下建议：

* 重新拔插摄像头的USB口，作为临时解决办法；
* 可以使用如下指令重启usb hub：

  ```
    # install the uhubctl tool from source
    git clone https://github.com/mvp/uhubctl
    cd uhubctl
    make
    sudo make install

    # restart the usb hub manually
    sudo uhubctl -a cycle -p 1-4
  ```

说明：上述bug在我们最新发布的产品中已解决。

然后用户通过如下命令打印输出，确认定位结果：

```
    rostopic echo /mavros/odometry/out
```

在低高度飞行场景下，定位功能通常需20-30秒实现稳定。用户可查阅用于飞控的local position topic来确认定位状态，具体实现方法为在Qground地面站的Mavlink控制台输入如下指令：

```
    listener vehicle_local_position
```

由于网络负载情况，有时候控制台输出不完整。用户可选择尝试如下指令：

```
    listener vehicle_local_position -n 20
```

只有在x, y, z位置、速度值全部确认有效时，用户才可以尝试半自动飞行(Position mode)。飞行流程与快速启动章节相同。预期中，飞机的悬停效果与室外相当、甚至更好。

补充说明下，要确保相机前方具备一些特征，不要让飞机面对一堵白墙。

![](https://872799980-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Ml3VlSesh_3iSoHlURD%2Fuploads%2Fgit-blob-193c1c7adc75c917b729a0b7b10643826d1f9bc6%2Findoorhovering.png?alt=media)

## 演示视频

[视频链接](https://www.bilibili.com/video/BV1EX4y1K7vG)

{% embed url="<https://www.bilibili.com/video/BV1EX4y1K7vG>" %}
