当前位置: 首页 > news >正文

做国外服务器网站创建属于自己的网站

做国外服务器网站,创建属于自己的网站,温岭网站建设,凡科网登录下载ArduPilot开源飞控之AP_OpticalFlow 1. 源由2. 框架设计2.1 启动代码2.2 任务代码 update2.3 任务代码 handle_msg2.4 任务代码 handle_msp2.5 任务代码 do_aux_function 3. 重要例程3.1 AP_OpticalFlow3.2 init3.3 update3.4 handle_msg3.5 handle_msp3.6 start_calibration3.…

ArduPilot开源飞控之AP_OpticalFlow

  • 1. 源由
  • 2. 框架设计
    • 2.1 启动代码
    • 2.2 任务代码 update
    • 2.3 任务代码 handle_msg
    • 2.4 任务代码 handle_msp
    • 2.5 任务代码 do_aux_function
  • 3. 重要例程
    • 3.1 AP_OpticalFlow
    • 3.2 init
    • 3.3 update
    • 3.4 handle_msg
    • 3.5 handle_msp
    • 3.6 start_calibration
    • 3.7 stop_calibration
  • 4. 总结
  • 5. 参考资料

1. 源由

光流传感器是使用地面纹理和可见特征来确定飞机地面速度的相机模块。

主要应用于室内定位,这里将光流传感应用的代码框架做一个整理。

2. 框架设计

2.1 启动代码

init_ardupilot└──> AP_OpticalFlow::init

2.2 任务代码 update

SCHED_TASK_CLASS(AP_OpticalFlow,          &copter.optflow,             update,         200, 160,  12),└──> AP_OpticalFlow::update

2.3 任务代码 handle_msg

SCHED_TASK_CLASS(GCS,                  (GCS*)&copter._gcs,          update_receive, 400, 180, 102)└──> GCS::update_receive└──> GCS_MAVLINK::update_receive└──> GCS_MAVLINK_Copter::packetReceived└──> GCS_MAVLINK_Copter::handleMessage└──> GCS_MAVLINK::handle_common_message└──> GCS_MAVLINK::handle_optical_flow└──> AP_OpticalFlow::handle_msg

2.4 任务代码 handle_msp

AP_Vehicle::setup└──> AP_MSP::init└──> AP_MSP::loop  //thread_create└──> AP_MSP_Telem_Backend::process_incoming_data└──> AP_MSP_Telem_Backend::msp_process_received_command└──> AP_MSP_Telem_Backend::msp_process_command└──> AP_MSP_Telem_Backend::msp_process_sensor_command└──> AP_MSP_Telem_Backend::msp_handle_opflow└──> AP_OpticalFlow::handle_msp

2.5 任务代码 do_aux_function

Copter::init_ardupilot└──> RC_Channels::init└──> RC_Channels::init_aux_all└──> RC_Channel::init_aux└──> RC_Channel_Copter::init_aux_function└──> RC_Channel::run_aux_function└──> RC_Channel_Copter::do_aux_function└──> RC_Channel::do_aux_function├──> AP_OpticalFlow::start_calibration└──> AP_OpticalFlow::stop_calibration

3. 重要例程

3.1 AP_OpticalFlow

根据变量表进行初始化赋值。

AP_OpticalFlow::AP_OpticalFlow├──> _singleton = this└──> AP_Param::setup_object_defaults(this, var_info)

3.2 init

支持以下协议的光流传感器:

  1. AP_OpticalFlow_PX4Flow
  2. AP_OpticalFlow_Pixart
  3. AP_OpticalFlow_Onboard
  4. AP_OpticalFlow_CXOF
  5. AP_OpticalFlow_MAV
  6. AP_OpticalFlow_HereFlow
  7. AP_OpticalFlow_MSP
  8. AP_OpticalFlow_UPFLOW
  9. AP_OpticalFlow_SITL
AP_OpticalFlow::init├──> _log_bit = log_bit││  /********************************************************************************│   * Pre-check                                                                    *│   ********************************************************************************/│   // return immediately if not enabled or backend already created├──> <(_type == Type::NONE) || (backend != nullptr)>│   └──> return││  /********************************************************************************│   * Sensor detect or configure                                                   *│   ********************************************************************************/├──> <case Type::PX4FLOW> <AP_OPTICALFLOW_PX4FLOW_ENABLED>│   └──> backend = AP_OpticalFlow_PX4Flow::detect(*this)├──> <case Type::PIXART> <AP_OPTICALFLOW_PIXART_ENABLED>│   ├──> backend = AP_OpticalFlow_Pixart::detect("pixartflow", *this)│   └──> <backend == nullptr>│       └──> backend = AP_OpticalFlow_Pixart::detect("pixartPC15", *this)├──> <case Type::BEBOP> <CONFIG_HAL_BOARD_SUBTYPE == HAL_BOARD_SUBTYPE_LINUX_BEBOP>│   └──> backend = new AP_OpticalFlow_Onboard(*this)├──> <case Type::CXOF> <AP_OPTICALFLOW_CXOF_ENABLED>│   └──> backend = AP_OpticalFlow_CXOF::detect(*this)├──> <case Type::MAVLINK> <AP_OPTICALFLOW_MAV_ENABLED>│   └──> backend = AP_OpticalFlow_MAV::detect(*this)├──> <case Type::UAVCAN> <AP_OPTICALFLOW_HEREFLOW_ENABLED>│   └──> backend = new AP_OpticalFlow_HereFlow(*this)├──> <case Type::MSP> <HAL_MSP_OPTICALFLOW_ENABLED>│   └──> backend = AP_OpticalFlow_MSP::detect(*this)├──> <case Type::UPFLOW> <AP_OPTICALFLOW_UPFLOW_ENABLED>│   └──> backend = AP_OpticalFlow_UPFLOW::detect(*this)├──> <case Type::SITL> <AP_OPTICALFLOW_SITL_ENABLED>│   └──> backend = new AP_OpticalFlow_SITL(*this)││  /********************************************************************************│   * Driver init                                                                  *│   ********************************************************************************/└──> <backend != nullptr>└──> backend->init()

3.3 update

光流数据更新及校准。

AP_OpticalFlow::update││  /********************************************************************************│   * Pre-check, exit immediately if not enabled                                   *│   ********************************************************************************/├──> <!enabled()>│   └──> return││  /********************************************************************************│   * Driver update                                                                *│   ********************************************************************************/├──> <backend != nullptr>│   └──> backend->update()││   // only healthy if the data is less than 0.5s old├──> _flags.healthy = (AP_HAL::millis() - _last_update_ms < 500)││  /********************************************************************************│   * Driver calibration                                                           *│   ********************************************************************************/└──> <AP_OPTICALFLOW_CALIBRATOR_ENABLED>│   // update calibrator and save resulting scaling└──> <_calibrator != nullptr> <calibrator->update()>│   // apply new calibration values├──> const Vector2f new_scaling = _calibrator->get_scalars()├──> const float flow_scalerx_as_multiplier = (1.0 + (_flowScalerX * 0.001)) * new_scaling.x├──> const float flow_scalery_as_multiplier = (1.0 + (_flowScalerY * 0.001)) * new_scaling.y├──> _flowScalerX.set_and_save_ifchanged((flow_scalerx_as_multiplier - 1.0) * 1000.0)├──> _flowScalerY.set_and_save_ifchanged((flow_scalery_as_multiplier - 1.0) * 1000.0)├──> _flowScalerX.notify()├──> _flowScalerY.notify()└──> GCS_SEND_TEXT(MAV_SEVERITY_INFO, "FlowCal: FLOW_FXSCALER=%d, FLOW_FYSCALER=%d", (int)_flowScalerX, (int)_flowScalerY)

3.4 handle_msg

处理MAVLink消息。

AP_OpticalFlow::handle_msg││  /********************************************************************************│   * Pre-check, exit immediately if not enabled                                   *│   ********************************************************************************/├──> <!enabled()>│   └──> return││  /********************************************************************************│   * Handle mavlink message                                                       *│   ********************************************************************************/└──> <backend != nullptr>└──> backend->handle_msg(msg)

3.5 handle_msp

处理MSP消息。

AP_OpticalFlow::handle_msp││  /********************************************************************************│   * Pre-check, exit immediately if not enabled                                   *│   ********************************************************************************/├──> <!enabled()>│   └──> return││  /********************************************************************************│   * Handle msp message                                                           *│   ********************************************************************************/└──> <backend != nullptr>└──> backend->handle_msp(pkt)

3.6 start_calibration

开始校准。

void AP_OpticalFlow::start_calibration├──> <_calibrator == nullptr>│   ├──> _calibrator = new AP_OpticalFlow_Calibrator()│   └──> <_calibrator == nullptr>│       ├──> GCS_SEND_TEXT(MAV_SEVERITY_CRITICAL, "FlowCal: failed to start")│       └──> return└──> <_calibrator != nullptr>└──> _calibrator->start()

3.7 stop_calibration

停止校准。

AP_OpticalFlow::stop_calibration└──> <_calibrator != nullptr>└──> _calibrator->stop()

4. 总结

支持9种光流传感器:

enum class Type {NONE = 0,PX4FLOW = 1,PIXART = 2,BEBOP = 3,CXOF = 4,MAVLINK = 5,UAVCAN = 6,MSP = 7,UPFLOW = 8,SITL = 10,
};

具体实现,详见以下对应驱动类:

  1. AP_OpticalFlow_PX4Flow
  2. AP_OpticalFlow_Pixart
  3. AP_OpticalFlow_Onboard
  4. AP_OpticalFlow_CXOF
  5. AP_OpticalFlow_MAV
  6. AP_OpticalFlow_HereFlow
  7. AP_OpticalFlow_MSP
  8. AP_OpticalFlow_UPFLOW
  9. AP_OpticalFlow_SITL

5. 参考资料

【1】ArduPilot开源飞控系统之简单介绍
【2】ArduPilot之开源代码Task介绍
【3】ArduPilot飞控启动&运行过程简介
【4】ArduPilot之开源代码Library&Sketches设计
【5】ArduPilot之开源代码Sensor Drivers设计

http://www.ds6.com.cn/news/19223.html

相关文章:

  • 浙江圣大建设集团有限公司网站百度搜索广告怎么收费
  • 学前教育网站建设做百度推广销售怎么找客户
  • 织梦网站图片修改不了精准客源app
  • 海门市住房和城乡建设局网站博客seo教程
  • 网站统计有哪些百度做广告多少钱一天
  • 做平面设计必知的网站百度竞价入门教程
  • 建设银行积分商城网站济南seo优化
  • 企业制作企业网站网站推广怎么做有效果
  • 大理州建设局网站51link友链
  • 网站备案之前需要建好网站吗免费发布网站seo外链
  • 创意广告图片及文字解析手机清理优化软件排名
  • 8小8x人成免费完整板杭州关键词优化测试
  • 局门户网站建设工作汇报太原seo计费管理
  • 帝国网站管理系统安装教程seo博客教程
  • 国外免费注册域名的网站网络营销与直播电商专业介绍
  • 上海网站开发技术最好公司电话怎么宣传自己的产品
  • 广渠门做网站的公司百度链接地址
  • 网站建设费用预算明细seo推广价格
  • 做张家界旅游网站多少钱销售网站排名
  • 医疗网络营销方式排名优化公司哪家效果好
  • 做网站的女生多么今日热点新闻头条
  • 17网站一起做网店广州新塘网站搜索引擎优化主要方法
  • 网站建设推广东莞网络推广及优化
  • 免费可信网站认证百度升级最新版本
  • 视觉设计部是干什么的seo服务商
  • 做网站用是内网穿透好网站优化内容
  • 什么网站系统做的最好seoul是啥意思
  • 怎么用源代码做网站网上的推广公司
  • 做食品批发的网站市场营销策划公司排名
  • 网页网站建设的ppt模板怎样在百度上建立网站