pixhawk无人机结合openmv之精准降落

2023-05-16

pixhawk飞控与openmv之精准降落

  • 一.精准降落概述
  • 二.精准降落流程
  • 三.代码逻辑流程
  • 四.总结反思改进

一.精准降落概述

1.概述
无人机在生产生活中逐渐获得更大的用途,京东的物流无人机有望解决用户快递最后一分钟的问题,对无人机的精准识别和降落的要求也就越来越高。在经过细致研究,我决定用openmv和pixhawk飞控结合apriltag图像识别来完成精准降落,飞控端的固件是apm,而不是px4,这点是需要注意的,但这并不意味着px4固件不可以实现精准降落,只是说在apm固件中已经有完善的精准降落的逻辑了,而openmv例程也提供相应的代码。

2.apriltag标签
所谓的apriltag其实就是有黑白色块组成的被识别物,本质就是最简单的二维码,apritag分不同的家族,下面就是几个家族的apriltag标签
在这里插入图片描述

3.openmv
openmv是一款低成本的图像处理模块,可以轻松实现常用的图像处理,串口通讯功能,刚接触openmv时我们可以只关心函数的作用而不去了解底层算法实现,简化我们的步骤。openmv可以识别apriltag标签,并测算其位于镜头中的位置。openmv在本项目中,仅充当与降落位置有关信息的传输,也就是通过串口通信将数据传回飞控,而具体引导降落的逻辑则是飞控去完成。openmv充当传感器的作用,所以是可以替代的,比如官方的IRLOCK模块等。

4.mavlink通讯协议
mavlink通讯协议是专门为无人机数据通讯制定的一种通讯协议,openmv通过mavlink通讯协议向飞控传输数据。有兴趣可以去研究一下协议消息包中每一位代表的含义。

二.精准降落流程

1.多旋翼无人机调试
无人机调试也就是在地面站中校准无人机的传感器,电调,遥控器等部件,使无人机可以相对平稳的起飞降落。这点至关重要,无人机偏航严重也会影响精准降落的实现

2.openmv与飞控pixhawk硬件连接
openmv与pixhwak需要连接三根线,两根电源线,一根通讯线。飞控上有TELEM1和TELEM2,两者可以任选其一连接,只是后续在参数设置方面略有不同。至于连接方式,只要能够接触良好就可以,可以用杜邦线进行连接,或者焊接。openmv镜头的焦距在飞行前也要调节,保证清晰。
在这里插入图片描述

3.openmv代码烧录
直接使用官方例程,打开openmvIDE,在示例中选择mavlink_apriltags_landing_target.py文件,将其保存在openmv中即可,为了无人机飞行过程中可以轻松判断识别与否可以在其中判断是否识别到的位置加入LED灯亮的代码,可以参考openmv函数库中有关LED的控制函数。

4.无人机地面站参数设置
有三个参数需要设置,PLND_ENABLED设置为1(enabled),PLND_TYPE设置为1,若使用TELEM1,则将SERIAL1_BAUD设置为115(115200),若使用TELEM2,则将SERIAL2_BAUD设置为115(115200),参数在missionplanner地面站的全部参数表中搜索即可。若出现有些参数找不到的问题,可以尝试重刷较新版本固件来解决。至于为什么要设置PLND_ENABLED和PLND_TYPE参数,在第三部分代码逻辑层面进行介绍,而SERIAL_BAUD参数则是波特率的设置。

5.地面站mavlink消息接收
这一步可以用来判断硬件连接和通讯功能是否生效。将无人机连接openmv后连接地面站,手拿apriltag图像让openmv识别,openmv识别到后,会在地面站mavlink消息窗口生成两个84HZ的消息,LANDING_TARGETDISTANCE_SENSOR,如果可以收到这两个消息,那证明通讯和硬件连接没有问题了。

5.测试
无人机起飞后在,将其控制到目标图像斜上方附近,切换到LAND模式,无人机开始精准降落。这一步还是建议去室外空旷场地测试。

三.代码逻辑流程

1.openmv端代码

while(True):
    clock.tick()
    img = sensor.snapshot()
    tags = sorted(img.find_apriltags(fx=f_x, fy=f_y, cx=c_x, cy=c_y), key = lambda x: x.w() * x.h(), reverse = True)

    if tags and (tags[0].id() in valid_tag_ids):
        if MAX_DISTANCE_SENSOR_enable: send_distance_sensor_packet(tags[0], valid_tag_ids[tags[0].id()])
        send_landing_target_packet(tags[0], img.width(), img.height(), valid_tag_ids[tags[0].id()])
        img.draw_rectangle(tags[0].rect())
        img.draw_cross(tags[0].cx(), tags[0].cy())
        print("Distance %f mm - FPS %f" % (z_to_mm(tags[0].z_translation(), valid_tag_ids[tags[0].id()]), clock.fps()))
    else:
        print("FPS %f" % clock.fps())

这里我只截取主要逻辑部分,完整代码在openmvIDE中去找即可。在这个代码中,如果识别到的标签是目标标签,那么则发送两个消息 send_landing_target_packetsend_distance_sensor_packet,有没有发现,其实就是上个目录中讲的地面中mavlink消息窗口收到的消息。实际上就是向飞控发送了目标位置的横纵坐标和距离信息。

2.飞控端代码
从github上下载apm固件(ardupilot)源码,与精准降落有关的代码分布在以下两个文件
ardupilot\libraries\AC_PrecLand文件夹ardupilot\ArduCopter\mode.cpp源文件

3.AC_PrecLand文件夹
该文件夹中包含以下头文件和源文件
在这里插入图片描述
有C++基础的应该可以看出来,其实在这个文件夹中定义了一个基类AC_PreLand和其他继承于AC_PreLand的派生类,其实到这里我们就应该可以理解为什么这个精准降落过程可以用openmv也可以用IRLOCK或者是其他替代品,原因就是这里定义好了应用于不同硬件的接口。事实上,在这个文件夹中我们可以看出有Companion,IRLock,SITL和SITL_Gazebo等不同的精准降落实现方式,而Companion应该就是指代那些非官方提供的硬件,也就是伴侣计算机,例如openmv,树莓派等

这段代码取自AC_Preland.h头文件

    enum PrecLandType {
        PRECLAND_TYPE_NONE = 0,
        PRECLAND_TYPE_COMPANION,
        PRECLAND_TYPE_IRLOCK,
        PRECLAND_TYPE_SITL_GAZEBO,
        PRECLAND_TYPE_SITL,
    };

这段代码定义了枚举变量PrecLandType,分别对应0到4其实也就对应了我们选择的硬件类型,看到这里我们就应该明白了为什么地面站中要将参数PLND_TYPE设置为1了吧。

这段代码取自AC_Preland.h头文件

void init(uint16_t update_rate_hz);

    // returns true if precision landing is healthy
    bool healthy() const { return _backend_state.healthy; }

    // returns true if precision landing is enabled (used only for logging)
    bool enabled() const { return _enabled.get(); }

    // returns time of last update
    uint32_t last_update_ms() const { return _last_update_ms; }

    // returns time of last time target was seen
    uint32_t last_backend_los_meas_ms() const { return _last_backend_los_meas_ms; }

    // returns estimator type
    uint8_t estimator_type() const { return _estimator_type; }

    // returns ekf outlier count
    uint32_t ekf_outlier_count() const { return _outlier_reject_count; }

    // give chance to driver to get updates from sensor, should be called at 400hz
    void update(float rangefinder_alt_cm, bool rangefinder_alt_valid);

    // returns target position relative to the EKF origin
    bool get_target_position_cm(Vector2f& ret);

    // returns target relative position as 3D vector
    void get_target_position_measurement_cm(Vector3f& ret);

    // returns target position relative to vehicle
    bool get_target_position_relative_cm(Vector2f& ret);

    // returns target velocity relative to vehicle
    bool get_target_velocity_relative_cms(Vector2f& ret);

    // returns true when the landing target has been detected
    bool target_acquired();

    // process a LANDING_TARGET mavlink message
    void handle_msg(const mavlink_message_t &msg);

    // parameter var table
    static const struct AP_Param::GroupInfo var_info[];

在这段代码中,定义精准降落流程中需要用到的方法,包括状态安全检测,更新时间检测,目标获取时间检测,目标三维向量,目标二维向量,与扩展卡尔曼滤波器(EKF)有关的函数。

这段代码取自AC_Preland.h头文件


AP_Int8 _ estimator_type;//精确着陆估计器类型

AP_Float _ yaw_align;//身体x轴到传感器x轴的偏航角。

AP_Float _ land_ofs_cm_x;//车体框架中目标前方摄像机期望的着陆位置

AP_Float _ land_ofs_cm_y;//目标右侧摄像机在车体框架中的理想着陆位置

AP_Float _ accel_noise;//加速度计过程噪声

AP_Vector3f _ cam_offset;//相机相对于CG的位置

uint32_t _ last_update_ms;//上次调用update时的系统时间(毫秒)

bool _ target_acquired;//如果目标最近被看到,则为true

uint32_t _ last_backend_los_meas_ms;//系统时间目标最后一次出现

PosVelEKF _ ekf_x _ekf_y;//卡尔曼滤波器的x和y轴

uint32_t _ outlier_reject_count;// mini-EKF的离群值计数器(连续3个离群值导致EKF接受更新)

Vector3f _ target_pos_rel_meas_NED;//目标的相对位置作为3D矢量

Vector2f _ target_pos_rel_est_NE;//目标相对于IMU的位置,没有补偿延迟

Vector2f _ target_vel_rel_est_NE;//目标相对于IMU的速度,没有补偿滞后

Vector2f _ target_pos_rel_out_NE;//目标相对于相机的位置,馈入位置控制器

Vector2f _ target_vel_rel_out_NE;//目标相对于CG的速度,馈入位置控制器

这段代码定义了精准降落过程中需要使用的变量

这段代码取自AC_Preland_Companion.cpp源文件

void AC_PrecLand_Companion::handle_msg(const mavlink_message_t &msg)
{
    // parse mavlink message
    __mavlink_landing_target_t packet;
    mavlink_msg_landing_target_decode(&msg, &packet);

    _timestamp_us = packet.time_usec;
    _distance_to_target = packet.distance;

    // compute unit vector towards target
    _los_meas_body = Vector3f(-tanf(packet.angle_y), tanf(packet.angle_x), 1.0f);
    _los_meas_body /= _los_meas_body.length();

    _los_meas_time_ms = AP_HAL::millis();
    _have_los_meas = true;
}

这是mavlink消息处理函数
_distance_to_target = packet.distance将消息包中的距离信息赋值给 _distance_to_target
_los_meas_body = Vector3f(-tanf(packet.angle_y), tanf(packet.angle_x), 1.0f); 将消息包中的x,y坐标进行计算赋值给一个三维向量,用于降落。这也对应了地面站中mavlink消息窗口中的数据。

4.mode.cpp文件

这段代码取自mode.cpp源文件

void Mode::land_run_vertical_control(bool pause_descent)
{
#if PRECISION_LANDING == ENABLED
    const bool navigating = pos_control->is_active_xy();
    bool doing_precision_landing = !copter.ap.land_repo_active && copter.precland.target_acquired() && navigating;
#else
    bool doing_precision_landing = false;
#endif
}

这段代码定义了垂直方向的控制函数,
#if PRECISION_LANDING == ENABLED这段预处理代码用来判断是否开启精准降落模式,读到这里我们应该也理解了地面站中为什么要将参数PLND_ENABLED设置为ENABLED了吧,其实就是为了通过这个标志来进入精准降落的入口。

这段代码取自mode.cpp源文件

#if PRECISION_LANDING == ENABLED
    bool doing_precision_landing = !copter.ap.land_repo_active && copter.precland.target_acquired();
    // run precision landing
    if (doing_precision_landing) {
        Vector2f target_pos, target_vel_rel;
        if (!copter.precland.get_target_position_cm(target_pos)) {
            target_pos.x = inertial_nav.get_position().x;
            target_pos.y = inertial_nav.get_position().y;
        }
        if (!copter.precland.get_target_velocity_relative_cms(target_vel_rel)) {
            target_vel_rel.x = -inertial_nav.get_velocity().x;
            target_vel_rel.y = -inertial_nav.get_velocity().y;
        }
        pos_control->set_xy_target(target_pos.x, target_pos.y);
        pos_control->override_vehicle_velocity_xy(-target_vel_rel);
    }

这段代码是mode.cpp中水平方向的控制函数
target_pos.x = inertial_nav.get_position().x;
target_pos.y = inertial_nav.get_position().y;

将目标位置设置成为了航点位置
pos_control->set_xy_target(target_pos.x, target_pos.y);
进行位置控制,将无人机向目标引导

四.总结反思改进

1.无人机的初期调试非常重要,将无人机飞稳是精准降落的保证

2.建议在室外测试,代码中位置控制函数被调用,可能需要GPS(GPS功能很多)支持

3.apritag二维码大小直接影响有效识别距离,建议大一些,本人测试,A3大小的二维码识别高度可以到2.5米,水平范围1.5米,当然,水平范围受高度影响。

4.openmv与pixhawk飞控连接要稳固,容易出现接触不良的现象

5.后期可以通过在飞控代码中的修改实现识别到目标自主降落的功能,目前采用遥控器切land模式来实现降落

6.感谢阅读,欢迎交流

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pixhawk无人机结合openmv之精准降落 的相关文章

  • APM、PIXHAWK、PX4的关系

    摘自 xff1a https bbs amovlab com forum php mod 61 viewthread amp tid 61 1202 amp extra 61 page 3D1 Pixhawk PX4 APM傻傻分不清 xf
  • 我发现GAAS,阿木的SLAM无人机,XTDrone都是用的pixhawk !

    我发现 xff0c 七月的GAAS xff0c 阿木的SLAM无人机 xff0c 还有这个开课吧的智能无人机的课 xff0c 这三个都是用的pixhawk飞控 xff0c 对不对 xff0c 没有一个去用上面自己写的简单飞控啥的没有 xff
  • Pixhawk无人机教程-8.1 在Mission Planner中下载与分析日志(转载)

    摘自 xff1a https www ncnynl com archives 201608 491 html Pixhawk无人机教程 8 1 在Mission Planner中下载与分析日志 闪存日志 目录 闪存日志日志类型 闪存 VS
  • pixhawk飞控小车倒车_Pixhawk 系列

    Pixhawk 系列 Pixhawk opens new window is an independent open hardware project providing readily available low cost and hig
  • pixhawk飞控调试_px4飞控调试方法

    2 BRD SAFETYENABLE 0 禁用安全开关 1 启用安全开关 3 3 2 这个界面是正常工作的界面 xff0c 此时通过串口的数据是 2 进制数据 xff0c 所以看到的是 乱码 从 Open com port 之后就是乱码 可
  • 使用者——初见Pixhawk

    是什么 Pixhawk简单介绍 直接使用二次开发 Pixhawk总体概述怎么用 Pixhawk初次使用 搭建调试环境初始化配置测试试飞调整参数提高性能 xff08 是什么 Pixhawk简单介绍 PixHawk是著名飞控厂商3DR推出的新一
  • pixhawk commander.cpp的飞行模式切换解读

    commander cpp逻辑性太强了 xff0c 涉及整个系统的运作 xff0c 所以分别拆分成小块看 另此篇blog大部分是参考 xff08 Pixhawk原生固件解读 xff09 飞行模式 xff0c 控制模式的思路 xff0c 笔者
  • pixhawk mc_pos_control.cpp源码解读

    好久没跟新blog了 xff0c 这段时期边调试边看程序 xff0c 所以有点慢 要开始着手调试了 这篇blog是顺着上一篇pixhawk 整体架构的认识写的 xff0c 接下来看程序的话 xff0c 打算把各个功能模块理解一遍 xff0c
  • pixhawk源码下载与编译

    今天和同学在一起讨论发现自己还在看的pixhawk源码的版本好低啊 xff0c 就下个最新的吧 想起有些人还不会下载源码 xff0c 以及用什么工具查看 源码的下载我用的是git shell工具下的 xff0c px4的github网址是h
  • pixhawk串口读取传感器数据

    1 Pixhawk板上串口说明 xff1a 测试 使用Pixhawk板上TELEM2接口的USART2 xff0c 对应的Nuttx UART设备文件尾 dev ttyS2 xff1a 2 读取数据测试 步骤 xff1a 在Firmware
  • APM与Pixhawk间的关系

    1 APM 本文APM指代 xff1a https github com ArduPilot ardupilot 2 Pixhawk 本文Pixhawk指代 xff1a https github com PX4 Firmware 3 关系
  • 我设计了一款开源飞控,性能远超Pixhawk,运行APM固件-怒飞垂云

    从2009年到现在 xff0c 我从事无人机研发将近11年了 xff0c 中途设计过很多飞控 xff0c 有闭源的无人飞艇飞控 大型固定翼无人机飞控 xff0c 也有在开源飞控Pixhawk基础上修改的飞控 xff0c 如今 xff0c 基
  • openmv 自学笔记(APRILTAG标记追踪)

    由图可知 id 为5 旋转角度 为11 0 左边旋转 角度增加 正式时候调度接近0 右边旋转 角度减少 由360度 向右减少 Tx 在左边的时候 为负数 右边为正值 Ty 在上边的时候为正数 左边为负值 Tz 从远处 到近处 由负数到向正数
  • OpenMV——色块识别

    OpenMV有很多示例代码 xff0c 下面是我学习过程中有关知识的总结 目录 前言 一 阈值选择 二 代码 前言 函数RGB 255 0 0 表示的是红色 RGB 255 0 0 含义 xff1a 红色值 Red 61 255 xff1b
  • OPENMV结合PIX飞控实现四轴定点 循迹 2017电赛

    本文章代码已上传Github xff1a https github com Kevincoooool 2017 Follow 有兴趣的可以加个STAR 自从17年国赛之后 xff0c 自己做了openmv xff0c 加了很多群 xff0c
  • OpenMV:21控制多个舵机(需要模块PCA9685)

    文章目录 连接代码控制单个舵机的旋转pc8596 pyservo pymain py利用两个舵机拓展板控制16个舵机 今天我们来学习下 OpenMV的舵机拓展板来控制多个舵机同时使用 如果我们想控制三个以上的舵机 xff0c 就需要用到舵机
  • 步骤五:PIXHAWK遥控器的使用

    采用福斯i6s遥控 1 连接飞控 打开遥控器 xff0c 接收机插上飞控 xff0c 再插上送的短接线 xff0c 进行匹配对码RX 2 遥控器长按两秒锁 xff0c system output mode Output mode按照图片这样
  • 通过Python调用OpenMV识别小球获取坐标

    OPenMV介绍 OpenMV是基于Python的嵌入式机器视觉模块 xff0c 目标是成为机器视觉界的 Arduino 它成本低易拓展 xff0c 开发环境友好 xff0c 除了用于图像处理外 xff0c 还可以用Python调用其硬件资
  • pixhawk之NSH调试

    一 ardupilot固件 windows环境 前期准备 1 xff1a pix烧录程序 xff0c Arducopter或者library中的example都可以实现 2 xff1a 拔掉SD卡 xff08 脚本中提到的没有SD卡进入ns
  • 2021全国电设(F题)openmv的图像识别之数字识别

    基于openmv的图像识别 通过参加全国电子设计大赛F题总结出openmv4的数字识别 其它版本暂时没试过 欢迎交流 openmv简介 OpenMV是一个开源 低成本 功能强大的机器视觉模块 以STM32F427CPU为核心 集成了OV77

随机推荐

  • PixHawk Bootloader

    在https github com PX4这里下载的Bootloader代码 xff0c 编译TARGET HW PX4 FMU V2这个版本的 xff0c 然后将代码烧录到STM32F4探索者这块开发板上 xff0c 代码能够正常运行 x
  • 解决Ubuntu 显卡驱动升级导致的 显卡驱动和内核版本不匹配的问题

    解决Ubuntu 显卡驱动升级导致的 显卡驱动和内核版本 xff08 同时内核存在问题 xff09 不匹配的问题 不要轻易升级显卡驱动版本 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xff01 xf
  • NVIDIA Jetson Xavier NX入门(1)——镜像烧写

    NVIDIA Jetson Xavier NX入门 xff08 1 xff09 镜像烧录 1 准备SD卡并且格式化 推荐使用SD Card Formater软件进行SD卡格式化 xff0c SD Card Formater软件下载地址 界面
  • NVIDIA Jetson Xavier NX入门(2)——系统设置;环境搭建

    NVIDIA Jetson Xavier NX入门 xff08 2 xff09 系统设置 环境搭建 1 NVIDIA Jetson Xavier NX连接显示器 键盘 鼠标 xff1b 2 Jetson Xavier NX连接电源后 xff
  • NVIDIA Jetson Xavier NX使用UART进行串口通信

    NVIDIA Jetson Xavier NX使用UART进行串口通信 一 NVIDIA Jetson Xavier NX的40pin接口 NVIDIA Jetson Xavier NX开发板俯视图 xff1a 2 开发板上打印出的UART
  • 远程服务器时Ubuntu报错:qt.qpa.xcb: could not connect to display

    远程服务器时Ubuntu报错 xff1a qt qpa xcb could not connect to display 远程服务器时Ubuntu报错 xff1a qt span class token punctuation span q
  • linux下USB设备编号固定

    linux下USB设备插入时系统自动分配编号 xff0c 多个相同设备时 xff0c 按插入顺序分配编号 以串口为例 xff0c 插入的USBtoSerial顺序不一样时 xff0c 系统分配的设备号是不一样的 但是每个USB接口对设备来说
  • Java进阶书籍推荐

    学习Java xff0c 书籍是必不可少的学习工具之一 xff0c 尤其是对于自学者而言 废话不多说 xff0c 下边就给大家推荐一些Java进阶的好书 第一部分 xff1a Java语言篇 1 Java编程规范 适合对象 xff1a 初级
  • GitHub+Docker Hub自动构建镜像

    一 什么是Dockerfile xff1f Dockerfile是一个包含用于构建镜像的命令的文本文档 可以使用在命令行中调用任何命令 Docker通过读取Dockerfile中的指令自动生成镜像 它们简化了从头到尾的流程并极大的简化了部署
  • 前端工程化 - 剖析npm的包管理机制(完整版)

    导读 现如今 xff0c 前端开发的同学已经离不开 npm 这个包管理工具 xff0c 其优秀的包版本管理机制承载了整个繁荣发展的NodeJS社区 xff0c 理解其内部机制非常有利于加深我们对模块开发的理解 各项前端工程化的配置以加快我们
  • GPRS模块开发初步(软件)

    文章来源 xff1a http blogold chinaunix net u1 56388 showart 1121149 html 1 AT 指令简介 AT 指令集一般指专门用来控制调制解调器的指令集 该指令集最初由美国 Hayes 公
  • 【安装库】matlab2020b安装及百度网盘提速

    安装库 matlab2020b安装及百度网盘提速 matlab2020b安装 一 xff0c 下载 百度网盘 链接 xff1a https pan baidu com s 18iLFaAbWt8IntUefX3eWfA 提取码 xff1a
  • FreeRTOS系统中CPU使用率统计方法分析

    FreeRTOS系统中CPU使用率统计方法分析 基本概念 操作系统中CPU使用率是在软件架构设计中必须要考虑的一个重要性能指标 它直接影响到程序的执行时间以及优先级更高的任务能否实时响应的问题 而CPU使用率也不能过高 xff0c 避免资源
  • NVIDIA GeForce 940M 设备是不可移动的,无法弹出或拔出问题解决办法

    上个月在新入手的笔记本上安装了一个CUDA的开发环境 xff0c 并选择安装了GeForce Experience工具 xff0c 前两天打开GeForce Experience工具浏览时 xff0c 工具提醒可以更新NVIDIA显卡驱动
  • 大学生职业规划要穿“营销三点式”

    我们现在就是这样的环境 xff0c 这样的 教育 xff0c 这样的模式 xff0c 这一切是无法改变的 xff0c 那你适应它吗 xff1f 不是 xff0c 你若适应它 xff0c 你只能茫然 xff01 为什么 xff1f 因为你适应
  • 网络与串口调试工具TCPCOM

    TCPCOM xff0c 网络与串口二合一调试助手 xff0c 将网络调试助手与串口调试助手合二为一 xff0c 绿色软件 xff0c 简单高效 软件特色 1 支持中英文双语言 xff0c 自动根据操作系统环境选择系统语言类型 xff1b
  • Cmake以及CmakeLists

    CMake使用 CMake1 gcc make和CMake的关系2 CMake一般使用流程2 1 生成构建系统2 2 执行构建 xff08 比如make xff09 xff0c 生成目标文件 xff1b 2 3 执行测试 安装或打包 3 C
  • 卡尔曼滤波公式及其详细推导(不涉及矩阵求导)

    卡尔曼滤波公式及推导 1 前言 卡尔曼滤波 Kalman Filter 是一种关于线性离散系统滤波问题的递推算法 其使用递推的形式对系统的状态进行估计 xff0c 以测量中产生的误差为依据对估计值进行校正 xff0c 使被估计的状态不断接近
  • Nmap常用命令及扫描原理

    Nmap常用参数 sS TCP SYN扫描 sU UDP扫描 sA ACK扫描 sW 窗口扫描 scanflags RSTSYNFIN 自定义扫描 O 检测目标操作系统类型 sV 检测目标上运行服务的版本 v 增加输出信息的详细程度 vv
  • pixhawk无人机结合openmv之精准降落

    pixhawk飞控与openmv之精准降落 一 精准降落概述二 精准降落流程三 代码逻辑流程四 总结反思改进 一 精准降落概述 1 概述 无人机在生产生活中逐渐获得更大的用途 xff0c 京东的物流无人机有望解决用户快递最后一分钟的问题 x