QGC通过网络连接飞控(树莓派+ROS桥接MavLink)

本文详细介绍如何在树莓派上安装配置Ubuntu Mate系统,安装ROS Kinetic,并通过MavROS桥接MavLink,实现对无人机的遥控。此外,还介绍了如何使用QGroundControl通过网络连接飞控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 为树莓派刷ubuntu

    因为无界面的ubuntu在连接无线,设置自动登录等方面的设置比较复杂,我经过各种百度尝试后,均没有成功,所以我放弃了.转而又刷了ubuntu mate(带界面).然后连接了无线,设置了自动登录,静态IP.自此树莓派的准备工作到此结束.这部分工作的目的是,可以通过远程登录树莓派进行操作,这样就免除了操作树莓派时需要树莓派连接显示器,鼠标,键盘.

    刷写 ubuntu(无界面)官方教程:https://wiki.ubuntu.com/ARM/RaspberryPi

    刷写ubuntu mate(带界面),只需在官方教程基础上将压缩包换为ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi.img.xz即可.

    提示:官方教程里SD卡插到电脑上显示的驱动名为/dev/mmcblk0,而我用读卡器插到电脑上显示的驱动是/dev/sdb.因为后面要安装ROS,所以一定要选择16.04版本的ubuntu!

    连接无线路由器后查看本机IP及网关,在命令行中输入ifconfig,可以看到路由器分配的动态IP.输入netstat -nr,Gateway下面的那个非全0的IP地址就是网关.

2. 在树莓派上安装ROS

    通过电脑远程连接,因为我用的ubuntu,所以在命令行通过ssh连接即可.以我的树莓派为例,在命令行中输入如下图所示命令,回车输入密码后即可登录.

    之后安装ROS的步骤和在电脑ubuntu上安装没什么区别,请参考我的博客:ROS系列一:在Ubuntu中安装ROS Kinetic

3. 通过ROS桥接MavLink

3.1 安装MAVROS

    1. 打开命令行,输入如下命令

sudo apt-get install ros-kinetic-mavros ros-kinetic-mavros-extras
wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
chmod a+x install_geographiclib_datasets.sh
./install_geographiclib_datasets.sh

    2. 如果在台式计算机上使用,请同时安装RQT

sudo apt-get install ros-kinetic-rqt ros-kinetic-rqt-common-plugins ros-kinetic-rqt-robot-plugins

    3. 使用caktin_tools而不是默认的catkin_make,因为它更强大

sudo apt-get install python-catkin-tools

3.2 启用mavros节点

    1. 首先,一个好的ROS习惯是始终在工作区目录中工作,因此创建一个:打开一个终端

mkdir -p ~/src/ardupilot_ws/src
cd ~/src/ardupilot_ws
catkin init
cd src

    2. 创建存放启动文件的文件夹并创建启动文件(实际上是在官方提供的启动文件基础上更改)

mkdir launch
cd launch
roscp mavros apm.launch apm.launch

    3. 使用vim编辑apm.launch.将"fcu_url"和"gcs_url"更改为如图所示.

    注:ubuntu mate默认应该是没有vim的,请通过"sudo apt-get install vim"命令,安装vim.

    4. 更改驱动读写权限

sudo chmod 666 /dev/ttyUSB0

    5. 通过USB转串口模块连接树莓派和飞控(数传1接口)

    注:USB转串口模块插到树莓派上显示的驱动应该为/dev/ttyUSB0或/dev/ttyACM0。我的是/dev/ttyUSB0,所以上面的"fcu_url"和更改驱动读写权限都针对的是/dev/ttyUSB0.

    6. 给飞控上电,注意不能通过树莓派给飞控供电,不过这有可能和我使用的给树莓派的供电电源(2.5A)有关,如果使用额定电流更大的电源有可能可以通过树莓派供电,如果可以通过树莓派供电,那就可以通过USB线直接和飞控通信,不再需要USB转串口模块,而且通信的波特率也可以调整为921600(飞控USB接口的波特率是自适应的,更改ros启动文件里的波特率即可).

    7. 启动mavros节点.

roslaunch apm.launch

    如果你能看到如下结果,证明mavros节点启用成功了

[ INFO] [1541565442.422317696]: Known MAVLink dialects: common ardupilotmega ASLUAV autoquad icarous matrixpilot paparazzi slugs standard uAvionix ualberta
[ INFO] [1541565442.422407850]: MAVROS started. MY ID 1.240, TARGET ID 1.1
[ WARN] [1541565442.519014524]: TM: Wrong FCU time.
[ INFO] [1541565442.613707556]: CON: Got HEARTBEAT, connected. FCU: ArduPilotMega / ArduCopter
[ INFO] [1541565442.756024441]: IMU: Raw IMU message used.
[ INFO] [1541565442.814808952]: RC_CHANNELS message detected!
[ WARN] [1541565443.282026545]: GP: No GPS fix
[ INFO] [1541565443.638235652]: VER: 1.1: Capabilities         0x0000000000003bcf
[ INFO] [1541565443.638564080]: VER: 1.1: Flight software:     03070000 ( ecd69e4)
[ INFO] [1541565443.638752876]: VER: 1.1: Middleware software: 00000000 ( 8ca93fb)
[ INFO] [1541565443.638919954]: VER: 1.1: OS software:         00000000 ( 1472b16)
[ INFO] [1541565443.639138438]: VER: 1.1: Board hardware:      00000000
[ INFO] [1541565443.639386555]: VER: 1.1: VID/PID:             0000:0000
[ INFO] [1541565443.639571550]: VER: 1.1: UID:                 0000000000000000
[ WARN] [1541565443.639881124]: CMD: Unexpected command 520, result 0
[ INFO] [1541565452.614353679]: HP: requesting home position
[ INFO] [1541565452.628424776]: FCU: ArduCopter V3.7-dev (ecd69e43)
[ INFO] [1541565452.630931733]: FCU: PX4: 8ca93fbd NuttX: 1472b16c
[ INFO] [1541565452.636172048]: FCU: PX4v2 002C0041 31345116 36383835
[ INFO] [1541565452.636898069]: FCU: Frame: QUAD
[ INFO] [1541565457.631559590]: WP: mission received
[ INFO] [1541565462.614800604]: HP: requesting home position
[ERROR] [1541565463.618754156]: FCU: PreArm: Throttle below Failsafe
[ERROR] [1541565463.621093545]: FCU: PreArm: Hardware safety switch
[ERROR] [1541565463.627553390]: FCU: PreArm: 3D Accel calibration needed
[ERROR] [1541565463.630187359]: FCU: PreArm: Compass not calibrated
[ERROR] [1541565463.632828567]: FCU: PreArm: Compass not calibrated

4. 使用QGC通过网络连接飞控

    在使用QGC通过网络连接飞控之前,请确保你所使用的电脑和树莓派在同一网段.

    1. 打开QGC,点击左上角图标,选中"通信连接"点击"添加"

    2. 添加通信连接.设置自己想要的名称,在"类型"栏中选择UDP,监听端口设置为14500(之前配置文件中设置的端口号),在"目标主机"栏先点击"添加"然后输入你的树莓派的IP地址,再此点击"添加"按钮.最后点击右下角的确定按钮退出.

    3. 选中你所创建的连接,点击"连接"按钮.你就可以通过网络连接到飞控了.

<think>我们被要求详细解释ros-px4。首先,需要明确ros-px4指的是什么。ROS(Robot Operating System)是一个机器人开发框架,而PX4是一个开源的无人机飞控软件。ros-px4通常指的是ROS与PX4之间的通信和集成,使开发者能够在ROS环境中控制PX4飞控的无人机。 主要解释点: 1. ROS与PX4的关系:ROS通过MAVROS(一个ROS包)与PX4飞控通信。MAVROS充当ROS和PX4之间的桥梁,它使用MAVLink协议(无人机通信协议)进行通信。 2. 通信架构:ROS节点(如MAVROS节点)运行在机载计算机(如NVIDIA Jetson, Raspberry Pi等)上,通过串口或UDP与飞控板(运行PX4)通信。 3. 核心功能:通过MAVROSROS可以获取无人机的状态(如位置、姿态、电池状态)并发送控制指令(如起飞、降落、设定目标位置等)。 4. 典型应用:在无人机自主导航中,ROS负责高层决策(如路径规划),而PX4负责底层的飞行控制和稳定。 接下来,我们可以详细说明其工作流程,并给出一个简单的代码示例,展示如何通过ROS控制无人机起飞。 注意:按照要求,最后必须提出3-5个相关问题,且以“§§相关问题§§”开头。 下面开始组织回答。</think>### ROS-PX4 详细解析 ROS-PX4 是 **机器人操作系统(ROS)** 与 **PX4 开源飞控系统** 的深度集成框架,用于实现无人机/无人系统的全栈式开发。其核心是通过 MAVROS 包建立通信桥梁,实现地面站、机载计算机与飞控的协同控制。以下是关键模块解析: --- #### 一、核心架构与通信机制 ```plaintext [地面站] ← ROS网络 (WiFi/4G) → [机载计算机] ← MAVLink协议 (UART/USB) → [PX4飞控] ``` 1. **MAVROS 节点** - 作用:ROS 与 PX4 的协议转换器(MAVLinkROS Topic) - 关键 Topic: - `/mavros/state`:飞控状态(如连接状态、飞行模式) - `/mavros/setpoint_position/local`:发送目标位置指令 - `/mavros/imu/data`:IMU 原始数据流 2. **PX4 飞控层** - 运行实时操作系统(RTOS),处理: - 传感器融合(EKF2 滤波器) - 低阶控制(姿态环 PID 调节) - 安全协议(失控保护、电池监测) 3. **机载计算机(ROS Master)** - 运行 SLAM、路径规划等算法 - 通过 MAVROS 发送高层指令(如 `OFFBOARD` 模式切换) --- #### 二、开发流程示例(无人机自主飞行) **步骤1:启动通信链路** ```bash # 终端1:启动PX4软件在环仿真(SITL) make px4_sitl gazebo # 终端2:启动MAVROS桥接 roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14557" ``` **步骤2:发送目标点指令(Python示例)** ```python #!/usr/bin/env python import rospy from geometry_msgs.msg import PoseStamped def fly_to_point(x, y, z): pub = rospy.Publisher('/mavros/setpoint_position/local', PoseStamped, queue_size=10) pose = PoseStamped() pose.pose.position.x = x pose.pose.position.y = y pose.pose.position.z = z pub.publish(pose) if __name__ == '__main__': rospy.init_node('offboard_control') rate = rospy.Rate(20) # 20Hz while not rospy.is_shutdown(): fly_to_point(5, 3, 10) # 目标点(5,3,10) rate.sleep() ``` **步骤3:切换 OFFBOARD 模式** ```bash # 通过MAVROS服务切换模式 rosservice call /mavros/set_mode "base_mode: 0 custom_mode: 'OFFBOARD'" ``` --- #### 三、关键特性对比 | **功能** | ROS-PX4 方案 | 传统飞控方案 | |------------------|-------------------------------|--------------------------| | **开发效率** | 高(ROS 可视化工具 Rviz/QGC 集成) | 低(需裸机编程) | | **实时性** | 中(依赖机载计算机性能) | 高(飞控直接处理) | | **扩展性** | 强(可接入激光雷达/视觉传感器) | 弱(受限于飞控接口) | | **适用场景** | 自主导航、集群协作 | 基础航拍、定高巡航 | --- #### 四、典型应用场景 1. **室内自主避障** - PX4 处理底层稳定,ROS 运行 RTAB-MAP 实时建图 2. **无人机集群** - 多机通过 ROS Topic 共享位置信息(如 `/uav1/position`) 3. **精准农业** - 结合 ROS 的 OpenCV 作物识别与 PX4 精准喷洒控制 > **调试工具链**: > - `rqt_graph`:可视化节点通信拓扑 > - `rostopic echo /mavros/battery`:实时监控电池状态 > - `Gazebo+ROS`:硬件在环(HITL)仿真
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值