OnboardSDK分析

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

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

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

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

3.     简单的demo,给出了dji_sdk的使用方法。OnboardSDK分析_第1张图片

图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文件自动编译产生。

OnboardSDK分析_第2张图片

OnboardSDK分析_第3张图片

OnboardSDK分析_第4张图片

图2

2.2     
dji_sdk_mission.h

OnboardSDK分析_第5张图片

图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类中的方法,以方便开发者调用。

你可能感兴趣的:(OnboardSDK分析)