第七章 PX4-Mavlink解析

PX4-Mavlink解析
本文介绍了Mavlink协议在PX4飞行控制系统中的应用,详细分析了消息的打包发送及接收解析过程,包括波特率设置、控制模式选择、消息ID获取及数据发布等关键步骤。


第七章 PX4-Mavlink解析

首先我们是还是来说一说mavlink吧。Mavlink协议是无人机的一种开源通信协议。可以理解就是按照一定的格式来发送数据。

这一章节涉及到了消息的打包发送和接收解析。

         首先我们还是找到入口函数然后回到脚本启动中找到mavlink的启动 ,这个找到应该不难吧,前面几章都有这个。这里有一个需要提一下,很多人在后台nsh调试出现乱码需要拔掉SD卡就行了,造成这个问题的原因是同时也发送了mavlink消息,这个的启动如图:

         回到start函数找到创建的任务start_helper在到else中找到task_main中。首先还是对波特率进行初始化设置速率设置模式设置。然后根据启动参数我们可以知道_daterate=1200_device_name=/dev/tty1很显然数传用的是串口1,我们对应到硬件确实是串口1哦,这个没什么好说的吧。

然后就是选择控制模式这个也可以找到,在new初始化的时候就可以看到。进入这个if可以看到对串口进行了配置这个没什么好说的跟GPS的配置方式差不多,如果大家不明白去看看GPS这一章节。然后初始化发送是否有冲突。更新mavlink参数所有的参数都是有用的这里贴出一个网站http://mavlink.org/messages/common大家自己去查查看,那些参数如果英文水平还可以的话可以自己去理解。

         接着就创建了mavlink消息接收这里面就也创建了一个任务查看这个start_helper函数,首先还是new 然后执行receive_thread函数,在这个函数中一开始获取串口,到while中开始读取串口数据然后就需要解析获取的数据这里有两个一样的我们用的mavlinkV2.0,剩下的就自己找。然后就是获取数据ID 并解析这里的解析需要自己去定义结构体然后去赋值和发布数据(最好是用msg文件)。这里我们举个例子这个消息帧是138,里面就有对接收到的数据赋值然后就是发布数据

         在回到mavlink_main.cpp中继续往下分析,接下来就是数据流的配置和参数的数据流的配置。往下走你可以看到switch语句这里面就有对数据发送频率配置了。如果某些没用的数据或者不是很重要的数据你想传的慢一点或者快一点就在这里修改了哦。。讲到这个configure_stream数据函数,接下来就对这个进行描述一下,熟悉了这个你就可以自己添加数据进行传输了。首先找到这个函数,前面是对数据进行搜索是否存在,然后通过for来找到这个数据流的列表,这里我们需要看一看streams_list列表了这是一个数组都是对这些要发送的数据进行一个初始化。我们随意找一帧数据,我们就找第一个数据帧心跳包的,回到定义的这个类中,首先就是获取这个名字,然后它的ID ,这里的ID我们稍后再讲,然后就是send函数,这里面就有函数,这个函数可以自己编写也可以生成。接下来我们就讲这个ID和这个函数了。

         这个ID是唯一的,这个我们只需加入ID然后利用mavlink工具就可以生成相关函数,打包函数和发送函数,这些都不用管。首先我们去找一个文件common.xml我们用的是2.0的协议,我们在这个文件中的最后加入一个IDname,这个你只需模仿就行,这里面有field name(参数名字)和type(数据类型)这个不难理解,大家相加多少就加多少。注意哦ID的个数是有限制的不能无限往上加。编辑好这个文件后你就要用mavlink工具了。

先下载工具gitclone https://github.com/mavlink/mavlink mavlink-generator,回到工具目录cd mavlink-generator,执行python mavgenerete.py就会出现一个配置GUI ,将该下的common.xml文件加入,生成文件目录为这个要对应不要搞错了,然后你在该目录下就可以看到你要的.h文件了命名是mavlink_msg_***.h,然后你就可以使用了。如何加入一个新的数据帧就将完了。然后回到mavlink_main中,我们就到while中去执行。这个里面当中就基本上是对定义的消息帧去赋值了,赋值完了调用发送函数就算是完事。

timi@timi--R7000P2021:~/PX4-Autopilot$ make px4_sitl gazebo [0/4] Performing build step for 'sitl_gazebo-classic' ninja: no work to do. [3/4] cd /home/timi/PX4-Autopilot/buil...i/PX4-Autopilot/build/px4_sitl_default SITL ARGS sitl_bin: /home/timi/PX4-Autopilot/build/px4_sitl_default/bin/px4 debugger: none model: iris world: none src_path: /home/timi/PX4-Autopilot build_path: /home/timi/PX4-Autopilot/build/px4_sitl_default GAZEBO_PLUGIN_PATH /home/timi/model_editor_models/Plugin_v0/build::/home/timi/PX4-Autopilot/build/px4_sitl_default/build_gazebo-classic GAZEBO_MODEL_PATH :/home/timi/PX4-Autopilot/Tools/sitl_gazebo/models:/home/timi/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/models LD_LIBRARY_PATH /home/timi/PX4-Autopilot/build/px4_sitl_default/build_gazebo:/opt/ros/noetic/lib:/home/timi/catkin_ws/devel/lib:/opt/ros/noetic/lib:/opt/ros/noetic/lib/x86_64-linux-gnu:/home/timi/PX4-Autopilot/build/px4_sitl_default/build_gazebo-classic empty world, setting empty.world as default Using: /home/timi/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/models/iris/iris.sdf Warning [parser.cc:833] XML Attribute[version] in element[sdf] not defined in SDF, ignoring. gzserver: symbol lookup error: /home/timi/PX4-Autopilot/build/px4_sitl_default/build_gazebo-classic/libgazebo_mavlink_interface.so: undefined symbol: _ZN8mav_msgs4msgs17CommandMotorSpeedC1Ev SITL COMMAND: "/home/timi/PX4-Autopilot/build/px4_sitl_default/bin/px4" "/home/timi/PX4-Autopilot/build/px4_sitl_default"/etc ______ __ __ ___ | ___ \ \ \ / / / | | |_/ / \ V / / /| | | __/ / \ / /_| | | | / /^\ \ \___ | \_| \/ \/ |_/ px4 starting. INFO [px4] startup script: /bin/sh etc/init.d-posix/rcS 0 INFO [init] found model autostart file as SYS_AUTOSTART=10015 INFO [param] selected parameter default file parameters.bson INFO [param] selected parameter backup file parameters_backup.bson SYS_AUTOCONFIG: curr: 0 -> new: 1 SYS_AUTOSTART: curr: 0 -> new: 10015 CAL_ACC0_ID: curr: 0 -> new: 1310988 CAL_GYRO0_ID: curr: 0 -> new: 1310988 CAL_ACC1_ID: curr: 0 -> new: 1310996 CAL_GYRO1_ID: curr: 0 -> new: 1310996 CAL_ACC2_ID: curr: 0 -> new: 1311004 CAL_GYRO2_ID: curr: 0 -> new: 1311004 CAL_MAG0_ID: curr: 0 -> new: 197388 CAL_MAG0_PRIO: curr: -1 -> new: 50 CAL_MAG1_ID: curr: 0 -> new: 197644 CAL_MAG1_PRIO: curr: -1 -> new: 50 SENS_BOARD_X_OFF: curr: 0.0000 -> new: 0.0000 SENS_DPRES_OFF: curr: 0.0000 -> new: 0.0010 INFO [dataman] data manager file './dataman' size is 1208528 bytes INFO [init] PX4_SIM_HOSTNAME: localhost INFO [simulator_mavlink] Waiting for simulator to accept connection on TCP port 4560 Gazebo multi-robot simulator, version 11.15.1 Copyright (C) 2012 Open Source Robotics Foundation. Released under the Apache 2 License. http://gazebosim.org # # ####### ####### ### ##### ####### ## # # # # # # # # # # # # # # # # # # # # # # # # # ##### # # # # # # # # # # ## # # # # # # # # # ####### # ### ##### ####### This version of Gazebo, now called Gazebo classic, reaches end-of-life in January 2025. Users are highly encouraged to migrate to the new Gazebo using our migration guides (https://gazebosim.org/docs/latest/gazebo_classic_migration/) [Msg] Waiting for master. [Err] [ConnectionManager.cc:121] Failed to connect to master in 30 seconds. [Err] [gazebo_shared.cc:106] Unable to initialize transport. [Err] [gazebo_client.cc:56] Unable to setup Gazebo
最新发布
08-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值