px4自定义uORB消息,并实现收发

 

如题,实现以上需求。主要有三个步骤:

一、添加一个新的topic(话题)(以uORB_test.msg为例)

      1.在根目录中msg文件下添加uORB_test.msg,并在该文件中加入所需的数据。(在新版本中必须要添加时间戳,否则编译不过)

px4自定义uORB消息,并实现收发

       2.在msg文件下的CMakeLists.txt文件中添加uORB_test.msg。

px4自定义uORB消息,并实现收发

      3.编译。

注:要编译过后在build/xxx/uORB/topic文件中才有相应的topic,这时候添加才有效。xxx依据自身板子和编译的代码版本有关。

二、uORB消息发布。

      1.在需要用到该topic的文件中包含头文件

px4自定义uORB消息,并实现收发

       2. 声明并定义一个该topic类型的结构体,清零用以装新的uORB数据。

px4自定义uORB消息,并实现收发

      3.广播一下该topic,获得消息句柄。告诉系统当下我该用什么结构体

px4自定义uORB消息,并实现收发

     4.给该结构体赋值。使用该topic ID,消息句柄,数据结构体发布该消息。

px4自定义uORB消息,并实现收发

三、uorb消息订阅

      1.声明并定义一个该topic类型的结构体,清零,用以装新的uorb数据。

      2. 订阅该topic的消息,获得句柄。

px4自定义uORB消息,并实现收发

     3.可以用阻塞等待,也可以用检查更新,也可以不用,依具体情况而定。

       px4自定义uORB消息,并实现收发

 px4自定义uORB消息,并实现收发

       4.使用消息ID,订阅句柄,topic类型结构体取出数据

       px4自定义uORB消息,并实现收发

完成以上步骤,可以编译并烧录代码,运行相关进程,打印test1,2,3数据,检查是否传输成功。