zoukankan      html  css  js  c++  java
  • OnboardSDK分析

    本文主要介绍Onboard-SDK-ROS的代码设计思想和文件分析,该软件包主要用来完成M100的开发等。

    该软件包框架图如图1所示,主要有3个部分

    1.     核心的API部分dji-sdk-lib,用于串口通信,建立各种任务的线程,读取信息的线程。

    2.     用于封装核心API为ROS接口的dji_sdk

    3.     简单的demo,给出了dji_sdk的使用方法。

    图1

    1  设计思想

    所有的控制和信息都是从一个串口读写的,因此在解析串口的API的里边上边做了一个Adapter,将原来的cpp的接口转换为ROS的订阅广播机制。因此构造了三种ROS 通信机制分别是messages, services, actionlib. 第一种用来广播飞机的状态数据,第二种用来对飞机完成任务的控制。第三种同样是任务控制,但是增加了任务的监控。

    2  DJI_SDK

    2.1     dji_sdk_node.h/dji_sdk_node.cpp

    定义了一个类DJISDKNode,成员变量有飞机的状态信息,如位姿,加速度,速度等。如图2所示,该类定义并初始化Publisher,上述飞机的状态信息通过ros的广播发布出去;定义并初始化Service Server,提供飞机的位置姿态控制服务,速度控制服务;定义并初始化ActionLib Server,提供沿特定飞行路线飞行、导航等高级行为,功能同服务提供类似,但增加了反馈和监控。


    其中service和action对应回调函数由定义好的.srv文件和.action文件自动编译产生。

    图2

    2.2     
    dji_sdk_mission.h

    图3

    定义了一个类DJISDKMission,成员变量有任务状态、任务事件等,如图3所示,定义并初始化Publisher,将任务状态、任务事件等信息发布成广播;定义并初始化Service,提供开始、暂停、取消任务等服务。

    2.3     dji_sdk.h

    包含dji_lib_ros_adapter.h及众多由.msg文件、.srv文件、.action文件生成的头文件,作为其他文件公共的头文件。

    2.4     dji_lib_ros_adapter.h

    将原生dji_sdk_lib包装成ROS能够使用的形式。

    2.5     DJI_HardDriver_Manifold.h

    运行在妙算上的M100驱动文件

    2.6     dji_drone.h

    定义了一个dji_drone类,该类构成了ROS中的客户端,定义并初始化Subscriber,订阅dji_sdk_node中发布的话题信息;定义并初始化Service Client和ActionLib Client,调用相关服务和行为。总之,该头文件的作用是将ROS中的功能封装成dji_drone类中的方法,以方便开发者调用。

  • 相关阅读:
    ACM_“IP地址”普及(进制转换)
    goj 堆箱子咯(栈)
    ACM_夏天到了,又到了出游的季节
    ACM_迟到的祝福(四)
    ACM_梦中的函数
    ACM_ZHANGZHANG喜欢手表
    ACM_出题人这样不好吧
    ACM_Mystery
    ACM_Repeating Characters
    P1160 队列安排 luogu洛谷
  • 原文地址:https://www.cnblogs.com/muyangshaonian/p/9650492.html
Copyright © 2011-2022 走看看