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之精准降落 的相关文章

  • PIXHAWK飞机侧翻原因

    转载自 xff1a http pix 1yuav com wen ti ji jin fei ji ce fan yuan yin html 飞机侧翻原因 飞机侧翻有以下几个原因 xff0c 请认真检查 1 电机顺序 xff0c 电机转向
  • Pixhawk之姿态控制篇(1)_源码算法分析(超级有料)

    摘自 xff1a https blog csdn net qq 21842557 article details 51439171 Pixhawk之姿态控制篇 xff08 1 xff09 源码算法分析 xff08 超级有料 xff09 20
  • pixhawk似乎也是用的四环串级

    pixhawk似乎也是用的四环串级 https blog csdn net sinat 16643223 article details 106973618 阿木社区的pixhawk的课里 https bbs amovlab com plu
  • Pixhawk无人机教程-8.1 在Mission Planner中下载与分析日志(转载)

    摘自 xff1a https www ncnynl com archives 201608 491 html Pixhawk无人机教程 8 1 在Mission Planner中下载与分析日志 闪存日志 目录 闪存日志日志类型 闪存 VS
  • PIXHAWK机架类型的的设置选择与电机通道顺序设置

    1 共轴直升机 main1 左侧斜盘电机 xff0c 控制俯仰 main2 xff1a 左侧斜盘电机 xff0c 控制滚转 main3 xff1a 上面旋翼 xff0c 逆时针旋转 main4 xff1a 下面旋翼 xff0c 顺时针旋转
  • 关于pixhawk硬件IMU和compass那点事儿

    文章目录 前言一 IMU和compass是什么 xff1f 二 导航坐标系与机体坐标系三 安装IMU xff0c compasss四 hwdef中设置IMU xff0c compass朝向总结 前言 继上一篇讲解了pixhawk的硬件组成
  • Pixhawk_bootloader简介

    Pixhawk Bootloader引导过程简介 自己结合网络上的资源总结的内容 有不对的地方请及时指出 有侵权的请指出 QQ 4862879 Pixhawk硬件使用STM32的芯片 Cortex M3的内核有三种启动方式 xff0c 其分
  • pixhawk飞控小车倒车_Pixhawk 系列

    Pixhawk 系列 Pixhawk opens new window is an independent open hardware project providing readily available low cost and hig
  • PX4/PixHawk无人机飞控应用开发

    最近做的一个国防背景的field UAV项目 xff0c 细节不能多谈 xff0c 简单写点技术体会 1 PX4 Pixhawk飞控软件架构简介 PX4是目前最流行的开源飞控板之一 PX4的软件系统实际上就是一个firmware xff0c
  • pixhawk position_estimator_inav.cpp思路整理及数据流

    写在前面 xff1a 这篇blog主要参考pixhawk的高度解算算法解读 xff0c 并且加以扩展 xff0c 扩展到其他传感器 xff0c 其实里面处理好多只是记录了流程 xff0c 至于里面实际物理意义并不是很清楚 xff0c 也希望
  • pixhawk px4 spi设备驱动

    此篇blog是以nuttx官网介绍为出发点 xff0c 先分析如何初始化的 xff0c 再分析如何读取传感器数据的 xff0c 最后对比了字符型设备操作和spi驱动的实现方式的差别 如有错误还请指正 6 字符型设备 所有的结构体和API都在
  • pixhawk: px4代码初学分析:追溯电机控制--pwm输出

    追溯电机控制 pwm输出 正常工作状态下pwm输出过程简述 xff1a 其他状态下pwm输出 xff1a 正常工作状态下pwm输出过程简述 xff1a 姿态解算部分得出姿态控制量通过px4io cpp把姿态控制量发送给IOIO串口读取姿态控
  • 【Pixhawk】注册一个字符型驱动设备

    最近学习Pixhawk的SPI xff0c 本以为PX4是STM32单片机而已 xff0c 写个SPI驱动应该很简单 但是当我看到mpu9250的那些cpp文件 xff0c 我一下就蒙了 由于PX4用的NUTTX系统 xff0c 类似Lin
  • F450机架 Pixhawk飞控实现自动避障(2019.11.29)

    之前进行无人机项目 xff0c 实现避障 巡航 定点 航拍等功能 xff0c 项目结束 xff0c 在这里进行分享经验 xff0c 项目所用器件为自己使用的 xff0c 仅供参考 xff0c 实际实现须结合自己实际情况 1 传感器选择 权盛
  • 教程:使用树莓派连接Pixhawk飞控

    教程 xff1a 使用树莓派连接Pixhawk飞控 树莓派可以与Pixhawk飞控相连 xff0c 读取飞控中的状态信息 xff0c 同时对飞控发送指令 树莓派作为一个更高性能的计算平台 xff0c 可以运行图像识别 机器学习 实时路径规划
  • 自己组装Pixhawk F450无人机的一些细节

    首先参考文档为 xff1a 1 https mp weixin qq com s VXKU kIB v i0AX3zgtLig 2 https mp weixin qq com s Qzzl dQ6Tz2pXNp7Oj0lTg 3 http
  • openmv探索_4_AprilTag标记追踪

    原理及代码 AprilTag标记追踪 空间坐标系的建立 以镜头中心为坐标系原点 xff0c 建立空间坐标系 图2 1 空间坐标系 旋转角度 xff08 参考系是上图中的坐标系 xff09 1 初始状态 图3 1 物体摆放的初始位置 上图的
  • OpenMV:21控制多个舵机(需要模块PCA9685)

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

    文章目录 产品Hello World简单的数据发送 本节讲解 如何使用OpenMV通过串口来发送数据 OpenMV 是可以直接通过串口发送字符串的 为什么要用串口呢 xff1f 因为要时候需要把信息传给其他MCU xff08 单片机 xff
  • 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