登录
加入联盟
找回密码
航空人生
新一代连飞客户端下载
空管人生
中国航空运动协会推荐
WEFLY
模拟飞行玩家聊天工具
门户
文章
商城
二手市场
外包服务
模飞软件
硬件设备
飞行体验
学院
云课堂
问答
资料下载
论坛
模拟飞行
低空飞行
太空探索
航圈
资源
素材
下载
企业
无人机论坛
»
论坛
›
无人机DIY专区
›
飞控开发区
›
Pixhawk飞控
›
Ubuntu读取PixHawk硬件的IMU&GPS数据
返回列表
发新帖
查看:
806
|
回复:
1
Ubuntu读取PixHawk硬件的IMU&GPS数据
[复制链接]
远洋航空
远洋航空
当前离线
积分
1731
窥视卡
雷达卡
45
主题
831
帖子
1731
积分
金牌飞友
金牌飞友, 积分 1731, 距离下一级还需 1269 积分
金牌飞友, 积分 1731, 距离下一级还需 1269 积分
积分
1731
飞币
831
注册时间
2017-9-11
发消息
发表于 2022-10-25 21:58:09
|
显示全部楼层
|
阅读模式
简述
上周做的工作一半都是摸索如何
使用mavros话题读取到Pixhawk飞控的IMU和GPS数据
,分别体现于mavros发布的
两个话题/mavros/imu/data和/mavros/local_position/pose
。我们跑仿真想要读取这两个数据确定挺简单的,直接订阅这两个话题即可;但是真到了
硬件读取数据,总会遇到各种各样的问题
。此文
前半部分介绍IMU数据的读取,后半部分介绍GPS数据的读取
(差别其实不大,分开叙述更有条理)。
几天的摸索浓缩为一篇文章,希望能够有更多的靓仔分享自己的经验,走过路过点个赞~
IMU数据 /imu/data
Tips:mavros发布的Imu数据主要有两个话题,/mavros/imu/data_raw和/mavros/imu/data。二者的区别在于,
后者的数据中有px4自行生成的四元数数据
,通过解算四元数数据我们可以获取到姿态角。只不过我的测试结果显示,imu解算得到的姿态角漂移很大。
万事开头难,最近需要读取PixHawk2.4.8飞控的imu数据,用于cartographer的3D建图(把飞控当做IMU使用),结果连接上电脑一直没数据。也就是运行roslaunch mavros px4.launch之后,一直卡在 MAVROS started这里,如下图。
最终成功获取到IMU数据的解决方案:
引出飞控上的TELEM2端口,并通过USB转TTL模块连接电脑
。我最开始一直是使用飞控的micro-USB端口连接电脑,但是穷尽各种方法也都未能成功获取IMU以及其他数据(探索出来一个奇怪的方式,后文叙述)。
Pixhawk飞控上面有
5个串口,分别为TELEM1、TELEM2、SERIAL4/5和micro-USB
。其中TELEM1和TELEM2处的接线线序是相同的。一般而言,TELEM1连接数传模块,TELEM2连接外部计算机,而SERIAL 4/5则连接外部传感器。搭好飞机后,一般都通过micro-USB端口连接QGC进行传感器、遥控器校准、参数设置等操作(新版本的Pixhawk飞控是type-C端口)。所以,我
选择TELEM2连接我的笔记本,并由此获取飞控的数据
。当然,使用TELEM1和SERIAL4/5都是可以的。
1 硬件接线
我们需要
将TELEM2端口通过USB转TTL连接到电脑
,其接线如下图所示。TELEM2从上到下的线序为:GND、TXD、RXD、5V。GND往下的两根线不用接,更加详细的线序可以去参考官网的。
2 QGC设置参数
我们不但需要连接好硬件,还需要通过micro-USB连接QGC并设置一下对应的参数。我这里
使用TELEM2连接我的笔记本电脑,需要设置的参数如下
(使用TELEM1需要的设置不同)。可以在Parameters界面搜索需要设置的参数,
参数设置完成后,需要重启才能生效
。点击Parameters界面右上角的Tools,然后选择最下面的"Reboot Vehicle"。对于一个新购买的飞控,我们需要先对其进行Sensors的校准之后,才能够搜索到下面的参数。此外,
需要设置完参数MAV_1_CONFIG并reboot之后,才可以搜索到另外两个参数
。
MAV_1_CONFIG:配置可以运行mavlink的端口,需要将其配置为TELEM2。reboot后,可见后面两个参数。
SER_TEL2_BAUD:telem2的波特率,数值越大通信速率越快。默认为921600,但是如果你使用的
USB转TTL的芯片为CH340
,那么最大只能设置为115200,我上图中使用的便为CH340的串口芯片。其他的串口芯片或许可以支持921600,比如cp2102,试试就知道。
MAV_1_MODE:设置为Onboard即可,默认也为Onboard。
MAV_1_RATE参数不需要修改,让他默认为0即可。
3 运行mavros
首先
将USB转TTL连接到自己的笔记本USB端口
,然后我们需要确认一下设备的名称。使用micro-USB连接笔记本的USB端口,对应的设备名称和这里不一样,一般为ttyACMO。可以通过如下方式确认设备名:
# 将USB转TTL连接USB端口
ls /dev/
# 将USB转TTL拔掉
ls /dev/然后我们找不同就行了,如下图就可以发现我们这个设备名称为ttyUSB0。
当然,其实我们是可以直接通过下面这个命令更方便的找到设备名的。如果检测不到类似名称的USB设备就会报错,如下图所示。
ls /dev/ttyUSB*
得知我们的USB设备名称/dev/ttyUSB0之后,便可以运行mavros了。
# 给端口加权限(可以不加)
sudo chmod 777 /dev/ttyUSB0
# 启动launch文件 后面的fcu_url很重要!
# fcu_url:="[设备名]:[波特率]" 需要对应修改
# 使用ch340芯片的 USB转TTL 设置波特率 115200
roslaunch mavros px4.launch fcu_url:="/dev/ttyUSB0:115200"
# 使用cp2102芯片的 UBS转TTL 设置波特率 921600
roslaunch mavros px4.launch fcu_url:="/dev/ttyUSB0:921600"
# 如果不想每次都加一个 fcu_url 可以编辑一下 px4.launch文件
cd /opt/ros/melodic/share/mavros/launch
sudo gedit px4.launch
# 对应修改之后,就可以不用加 fcu_url了
roslaunch mavros px4.launch之后,如果你前面设置的参数和启动launch文件时加的参数一致,那就能够成功连接pixhawk飞控。
此时,可以看看是否能够获取到IMU的数据。如果mavros卡在MAVROS started那里,是无法获取到IMU的数据的,经过rostopic list可以看见对应的话题。
rostopic echo /mavros/imu/data
这里拓展一个小知识点。我们可以把前面运行的px4.launch放到launch文件中,如下:
<include file=&#34;$(find mavros)/launch/px4.launch&#34;>
</include>
4 Micro-USB连接Ubuntu
尽管尝试了很多的方法,最终还是未能直接通过micro-USB读取pixhawk飞控的IMU数据。不过依旧有一些内容值得记录一下。也方便后面对pixhawk飞控更加了解之后,得出相应的解决方案。如果通过micro-USB将飞控连接到Ubuntu,其设备名称默认为/dev/ttyACM0,可以使用前面提到的ls /dev/或者ls /dev/ttyACM*命令查询。QGC中暂未发现用于设置micro-USB的波特率等内容的参数,所以我尝试的内容主要就是围绕着运行mavros的那条指令。
# 围绕着这个
roslaunch mavros px4.launch fcu_url:=&#34;/dev/ttyACM0:[波特率]&#34;一个奇奇怪怪的,可以成功连接的方案为:
先打开QGC连接上飞控,然后关闭QGC并运行roslaunch
。之后基本上
只要不动飞控连接到笔记本的USB端口,运行roslaunch都可以连接成功
,并读取到IMU的数据。并且,波特率随便取,不管是设置为115200、921600还是57600都不影响连接。下面则是其他的一些尝试方案,最后都未成功(不借助QGC)。
1)修改fcu_url后面的波特率,115200、921600、57600都无效。
2)尝试修改启动的这个px4.launch文件:
cd /opt/ros/melodic/share/mavros/launch
sudo gedit px4.launch这个文件默认为下面的内容:
<launch>
<!-- vim: set ft=xml noet : -->
<!-- example launch script for PX4 based FCU&#39;s -->
<arg name=&#34;fcu_url&#34; default=&#34;/dev/ttyACM0:57600&#34; />
<arg name=&#34;gcs_url&#34; default=&#34;&#34; />
<arg name=&#34;tgt_system&#34; default=&#34;1&#34; />
<arg name=&#34;tgt_component&#34; default=&#34;1&#34; />
<arg name=&#34;log_output&#34; default=&#34;screen&#34; />
<arg name=&#34;fcu_protocol&#34; default=&#34;v2.0&#34; />
<arg name=&#34;respawn_mavros&#34; default=&#34;false&#34; />
<arg name=&#34;config_yaml&#34; default=&#34;$(find mavros)/launch/px4_config.yaml&#34; />
<include file=&#34;$(find mavros)/launch/node.launch&#34;>
<arg name=&#34;pluginlists_yaml&#34; value=&#34;$(find mavros)/launch/px4_pluginlists.yaml&#34; />
<arg name=&#34;config_yaml&#34; value=&#34;$(arg config_yaml)&#34; />
<arg name=&#34;fcu_url&#34; value=&#34;$(arg fcu_url)&#34; />
<arg name=&#34;gcs_url&#34; value=&#34;$(arg gcs_url)&#34; />
<arg name=&#34;tgt_system&#34; value=&#34;$(arg tgt_system)&#34; />
<arg name=&#34;tgt_component&#34; value=&#34;$(arg tgt_component)&#34; />
<arg name=&#34;log_output&#34; value=&#34;$(arg log_output)&#34; />
<arg name=&#34;fcu_protocol&#34; value=&#34;$(arg fcu_protocol)&#34; />
<arg name=&#34;respawn_mavros&#34; default=&#34;$(arg respawn_mavros)&#34; />
</include>
</launch>按照网上的一些教程,新增了关于 hearbeat的参数设置,无效:
<launch>
<!-- vim: set ft=xml noet : -->
<!-- example launch script for PX4 based FCU&#39;s -->
<arg name=&#34;fcu_url&#34; default=&#34;/dev/ttyACM0:57600&#34; />
<arg name=&#34;gcs_url&#34; default=&#34;&#34; />
<arg name=&#34;tgt_system&#34; default=&#34;1&#34; />
<arg name=&#34;tgt_component&#34; default=&#34;1&#34; />
<arg name=&#34;log_output&#34; default=&#34;screen&#34; />
<arg name=&#34;fcu_protocol&#34; default=&#34;v2.0&#34; />
<arg name=&#34;respawn_mavros&#34; default=&#34;false&#34; />
<arg name=&#34;config_yaml&#34; default=&#34;$(find mavros)/launch/px4_config.yaml&#34; />
<include file=&#34;$(find mavros)/launch/node.launch&#34;>
<arg name=&#34;pluginlists_yaml&#34; value=&#34;$(find mavros)/launch/px4_pluginlists.yaml&#34; />
<arg name=&#34;config_yaml&#34; value=&#34;$(arg config_yaml)&#34; />
<arg name=&#34;fcu_url&#34; value=&#34;$(arg fcu_url)&#34; />
<arg name=&#34;gcs_url&#34; value=&#34;$(arg gcs_url)&#34; />
<arg name=&#34;tgt_system&#34; value=&#34;$(arg tgt_system)&#34; />
<arg name=&#34;tgt_component&#34; value=&#34;$(arg tgt_component)&#34; />
<arg name=&#34;log_output&#34; value=&#34;$(arg log_output)&#34; />
<arg name=&#34;fcu_protocol&#34; value=&#34;$(arg fcu_protocol)&#34; />
<arg name=&#34;respawn_mavros&#34; default=&#34;$(arg respawn_mavros)&#34; />
<!-- enable heartbeat send and reduce timeout -->
<param name=&#34;conn_heartbeat&#34; value=&#34;5.0&#34; />
<param name=&#34;conn_timeout&#34; value=&#34;5.0&#34; />
<!-- automatically start mavlink on USB -->
<param name=&#34;startup_px4_usb_quirk&#34; value=&#34;true&#34; />
<param name=&#34;mocap/use_tf&#34; value=&#34;true&#34;/>
<param name=&#34;mocap/use_pose&#34; value=&#34;false&#34;/>
</include>
</launch>3)更改相同路径下的px4_config.yaml,将其中的heartbeat_rate修改为10,也还是无效。
5 提高IMU数据发布频率
参考:https://blog.csdn.net/sinat_16643223/article/details/114698028
有两个imu数据,/mavros/imu/data_raw和/mavros/imu/data,前者没有orientation数据,后者有。
# 查看话题的发布频率
rostopic hz /mavros/imu/data_raw
# 调整发布频率 /mavros/imu/data_raw 100hz
rosrun mavros mavcmd long 511 105 10000 0 0 0 0 0
# 调整发布频率 /mavros/imu/data 100hz
rosrun mavros mavcmd long 511 31 10000 0 0 0 0 0
GPS数据 /local_position/pose
Tips:mavro中发布的global_postion和local_positon等相关的话题的数据,都是
通过融合GPS数据获取得到的
,所以获取到GPS数据是很重要的一步,最好去空旷的室外。其中的/mavros/local_position/pose发布的数据为
以GPS上电时刻为原点而建立的NED坐标系的位置数据和四元数数据
。(这里不对NED坐标系进行介绍)
只要能够成功建立与PX4飞控的连接,我们就可以获取到mavros发布的关于imu的数据,但是却不一定能够获取到/mavros/local_position/pose以及其他相关话题的数据。正如前面所说的,我们
需要获取到GPS信号
才可以,为此我们需要带着飞控和GPS到比较空旷的室外。然后,我们通过micro-USB将飞控连接QGC,多等一会。等到左上角
搜索到的卫星数目大于等于6之后
,便可以关闭QGC,然后尝试运行px4.launch文件,看看能否获取到数据,即rostopic echo /mavros/local_position/pose。要点就一个,到空旷的室外等!
一般情况下,就算卫星数目大于6他也不一定能获取到gps数据,
需要多等一会
。我这几天每次获取到GPS数据,都等了一二十分钟以上。如果开着QGC,运行px4.launch会直接报错的。但是同时,
千万不能让pixhawk飞控和PX4断电,不然他又得重新搜索卫星
。为此,建议将micro-USB和telem2引出的USBtoTTL都连接到电脑的USB,或者采用电池一直给飞控供电。或者直接买一个USB拓展,实现USB端口自由!像下面这种分线器,都是免驱的。不太建议买那种USB+网口的,那种Ubuntu不一定能用,当时问了好多家都说不能用或者让我自己试试。
此外,还有两个参数可以看一下是否设置正确(默认应该都是一样的):
EKF2_AID_MASK:勾选使用GPS,&#34;use GPS&#34;
EKF2_GPS_CHECK:如下图勾选。
如果等来等去还是没有获取到rostopic echo /mavros/local_position/pose的数据,怎么办?换一个飞控试试。我之前便是使用
新买的飞控,虽然读取到了imu数据,但是死活获取不到GPS数据
,无奈之下换了一个飞控就可以了。当时那个飞控每次连接上QGC、刷完固件都会有个报错,不知道是不是这个原因导致不能获取到GPS数据。这个报错如下,网上搜来搜去都没有找到相关的解决方案。
最近又测试了一下,发现下面这个报错的原因是
由飞控上插的TF卡导致的
,
只需要取下TF卡或者将TF卡格式化
,之后再烧录一下固件就没有这个报错了。
ubuntu
,
数据
,
读取
,
硬件
相关帖子
•
无人机数据链技术,无人机数据链路系统技术详解,无人机数传技术
•
无人机数据链知识,数据链路系统技术详解,数据链的构成及功能
•
【科技创新】|无人机数据链技术,无人机数据链路系统技术详解,无人机数传技术
•
( )主要是制定无人机飞行任务、完成无人机载荷数据的处理和应用,指挥中 ...
•
无人机图数传数据链遮挡问题及解决方案,无人机图数传中继解决方案可行性分析
•
无人机数据链技术,无人机图传数传技术实现详解,无人机数据传输技术原理
•
【模型工具】利用多源数据进行城市雨洪预报的时空深度学习方法
•
无人机4G/5G数据链图数传技术,无人机远距离传输数据链解决技术方案
•
蓝易云 - Ubuntu搭建APM固件编译环境教程!
•
无人机技术,旋翼无人机硬件总体介绍,多旋翼无人机机架技术详解
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
cnlcncn
cnlcncn
当前离线
积分
1696
窥视卡
雷达卡
32
主题
854
帖子
1696
积分
金牌飞友
金牌飞友, 积分 1696, 距离下一级还需 1304 积分
金牌飞友, 积分 1696, 距离下一级还需 1304 积分
积分
1696
飞币
837
注册时间
2017-8-8
发消息
发表于 2022-10-25 22:04:09
|
显示全部楼层
赞一个,都是干货[机智][机智][机智]
回复
支持
反对
使用道具
举报
照妖镜
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
加入联盟
本版积分规则
发表回复
回帖后跳转到最后一页
快速回复
返回顶部
返回列表