PX4学习记录

别光想着执行命令就完了,要学会看源码,为什么执行这条命令

MAVROS 的源代码地址:

GitHub - mavlink/mavros: MAVLink to ROS gateway with proxy for Ground Control Station

XTDrone 的源代码地址:

XTDrone: 基于PX4、ROS和Gazebo的无人机通用仿真平台 - Gitee.com

PX4学习资料:

MAVROS Offboard control example (Python) | PX4 Guide (main)

完全关闭ubuntu:

killall -9 gzclient
killall -9 gzserver

2024.10.22

1.roslaunch px4 mavros_posix_sitl.launch的意思

roslaunch px4 mavros_posix_sitl.launch

mavros_posix_sitl.launch 文件用于启动 MAVROS 和 PX4 的软件在环(SITL)环境。它配置并启动 Gazebo 模拟器、PX4 飞控软件以及 MAVROS 节点,从而使用户能够在仿真环境中控制无人机,进行飞行测试和开发,而不需要真实的硬件。这使得开发和调试变得更加方便和安全。 

roslaunch 后面通常跟以下内容:

  1. 包名: 你想要启动的 ROS 包的名称。
  2. 启动文件: 包内的具体启动文件(.launch)名称。

2.MAVROS 和 PX4 的作用

MAVROS

  • 功能:MAVROS 是一个 ROS (Robot Operating System) 包,提供了与 MAVLink 协议兼容的无人机接口。
  • 用途:它允许 ROS 节点与无人机进行通信,支持遥控、传感器数据获取、状态监控等功能,方便开发和测试无人机应用。

PX4

  • 功能:PX4 是一个开源的无人机飞控软件,支持多种类型的无人机和飞行器。
  • 用途:它提供飞行控制算法、传感器融合、航点导航等功能,能够在 SITL(软件在环)和真实硬件上运行,适用于研究、开发和商业应用。

总结

结合使用时,MAVROS 使得 ROS 系统能够轻松与 PX4 飞控系统进行交互,促进无人机的开发和应用。

3. SITL(软件在环)是什么意思

SITL(Software In The Loop)是一种模拟测试环境,用于验证和测试无人机控制算法和软件的功能,而无需使用实际的硬件。具体来说:

  • 模拟环境:在 SITL 中,无人机的飞行控制软件(如 PX4)在计算机上运行,而不是在实际的飞控硬件上。通过这种方式,可以在没有物理硬件的情况下进行测试和开发。

  • 实时反馈:SITL 允许开发人员实时观察飞行控制算法的行为,测试不同的飞行场景和条件,从而识别潜在的问题。

  • 集成:它通常与其他软件工具(如 Gazebo)结合使用,以模拟无人机的飞行环境和传感器输入,使得开发人员可以更全面地评估控制算法的性能。

  • 节省成本和时间:通过在 SITL 中进行测试,可以降低开发成本和时间,避免在早期阶段使用实际硬件可能导致的损坏或错误。

总之,SITL 是无人机软件开发和测试中的重要工具,帮助开发人员在真实飞行之前验证和优化其控制算法。

4. make px4_sitl_default gazebo

make px4_sitl_default gazebo 是一条命令,用于在 PX4 飞控软件的构建系统中编译并启动软件在环(SITL)模式下的 Gazebo 模拟环境。具体来说:

  • make:这是一个构建命令,通常用于根据 Makefile 中的指令编译软件。

  • px4_sitl_default:这是指定的目标,表示构建 PX4 的 SITL 模式,通常包含飞行控制软件和所需的模拟器组件。

  • gazebo:这个参数表明要启动 Gazebo 模拟器,提供3D环境用于模拟无人机的飞行。

整体上,这条命令将编译 PX4 的 SITL 版本,并在 Gazebo 中启动模拟环境,允许用户测试和开发无人机的飞行控制功能。

5. make 后面接什么参数

make 后面可以接多个参数或目标,这些通常与要构建或运行的特定功能有关。常见的参数包括:

  1. 构建目标

    • px4_sitl_default:构建软件在环(SITL)模式的 PX4。
    • px4_sitl_default gazebo:构建并启动 Gazebo 模拟器。
  2. 特定配置

    • px4_fmu_v5_default:构建针对特定硬件(如 PX4 FMU v5)的固件。
  3. 清理目标

    • clean:清理构建目录,删除所有生成的文件。
  4. 调试选项

    • debug:以调试模式构建,可以用于问题排查。
  5. 其他选项

    • 可以在命令中添加其他参数,例如 -j4 以并行构建,指定使用的核心数。

可以根据具体需求和项目文档选择适合的参数和目标。

6. sudo apt-get install ros-noetic-mavros ros-noetic-mavros-extras这句话装了什么

这条命令安装了 ROS Noetic 版本的 MAVROS 及其附加功能包。具体来说:

  1. ros-noetic-mavros:这是 MAVROS 的主要包,它提供了与 MAVLink 兼容的无人机控制和通信接口。
  2. ros-noetic-mavros-extras:这是 MAVROS 的附加功能包,包含一些额外的插件和功能,例如支持特定无人机的扩展功能和工具。

安装这两个包后,你将能够使用 MAVROS 与 MAVLink 兼容的无人机进行通信和控制。

7. 装的这几个包和源代码有什么关系

安装的 ROS 包(如 ros-noetic-mavrosros-noetic-mavros-extras)与源代码之间的关系如下:

  1. 预编译的二进制包通过 apt-get 安装的包是预编译的二进制文件,用户可以直接使用,而不需要自己编译源代码。这些包已经在ROS的构建服务器上编译并测试过,确保它们能正常工作。

  2. 源代码如果你需要对 MAVROS 或其功能进行修改或添加新特性,你需要访问源代码。源代码通常在 GitHub 上的 MAVROS 仓库中。用户可以从那里下载源代码,并在本地进行编译和修改。

  3. 相互依赖:二进制包通常是源代码的编译结果。因此,安装这些包的过程简化了用户的使用体验,免去手动编译的麻烦。

  4. 开发和调试:如果你在开发或调试中需要查看源代码,可以通过 GitHub 获取源代码,并与安装的包进行比较,了解包的具体实现。

总结来说,安装的包是源代码编译后得到的结果,用户可以使用这些包来实现功能,而需要源代码时则可以直接去相关的代码仓库获取。

8. rostopic echo /mavros/state什么意思

rostopic echo /mavros/state 是一个 ROS 命令,用于显示 /mavros/state 主题上发布的消息内容。这个主题通常包含关于 MAVROS 的状态信息,例如无人机的飞行状态(如起飞、降落、航行等)、连接状态和其他相关参数。这可以帮助用户监测无人机的当前状态以及与地面控制站的连接情况。

是的,/mavros/state 是一个 ROS 话题(topic)。在 ROS 中,话题是用于节点间传递消息的通信机制。这个话题通常由 MAVROS 节点发布,包含无人机的状态信息。

要查看所有可用的话题,可以使用以下命令:

rostopic list

要查看具体的话题内容,可以使用:

rostopic echo /mavros/state

话题的定义和发布通常在 MAVROS 的源代码中,你可以在 MAVROS 的 GitHub 仓库或相关文档中找到关于此话题的信息。具体消息类型通常在 MAVROS 的消息定义文件中定义,例如在 mavros_msgs 包内。

9. /mavros/state这个话题在源码的哪里

/mavros/state 这个话题在 MAVROS 的源代码中通常定义在 MAVROS 的状态消息相关部分。具体来说,它的定义可以在以下几个地方找到:

  1. 消息定义:在 mavrosmsg 目录下,可以找到与 MAVLink 相关的消息定义文件,如 State.msg,用于描述 MAVROS 状态消息的结构。

  2. 话题发布:在 src 目录下的相关节点(例如 mavros_node.cpp)中,话题的发布逻辑会被实现,通常通过 ros::Publisher 来发布状态信息。

  3. 服务和回调:可能还有相关的服务和回调函数,处理从飞控系统接收的状态信息,并在 /mavros/state 上发布。

如果需要具体的路径,可以在 MAVROS 的 GitHub 仓库中搜索 mavros/state 或相关的消息文件,通常是 mavros_msgs 包中的消息定义。

10. 包和节点是什么意思

在 ROS(Robot Operating System)中:

包(Package)

  • 定义:包是 ROS 中的基本构件单元,用于组织代码、数据和资源。一个包可以包含节点、库、配置文件、文档等。
  • 用途:包使得代码管理和分发变得更简单,可以将功能相关的节点和资源打包在一起,便于重用和共享。
  • 结构:一个包通常包含一个 package.xml 文件(定义包的元数据)、一个或多个源文件、可执行文件和其他资源。

节点(Node)

  • 定义:节点是 ROS 中的执行单元,每个节点是一个独立的进程,可以执行特定的任务。
  • 功能:节点可以执行各种功能,如数据处理、传感器读取、控制算法等,并通过发布/订阅或服务调用与其他节点进行通信。
  • 并行性:多个节点可以并行运行,提供系统的灵活性和可扩展性。

总结来说,包是组织代码和资源的容器,而节点是执行特定任务的程序。

11. 节点是什么意思

在 ROS(Robot Operating System)中,节点(Node) 是一个基本的执行单位。它是一个独立的进程,可以执行特定的任务,如感知、控制或通信。节点可以相互通信,传递数据、命令和状态信息。以下是一些关键点:

  1. 功能模块化:每个节点可以专注于特定的功能,例如传感器数据采集、路径规划或运动控制。这种模块化设计使得系统更易于管理和扩展。

  2. 通信机制:节点通过发布/订阅模式(Publish/Subscribe)或服务调用(Service)来进行通信。例如,一个节点可以发布某个主题的数据,而其他节点可以订阅该主题以获取信息。

  3. 并行执行:节点是并行执行的,可以在不同的计算机上运行,这样可以提高系统的性能和灵活性。

  4. 运行时环境:每个节点在独立的进程中运行,这意味着它们之间的崩溃不会影响其他节点。

通过这种设计,ROS 提供了一个灵活的框架,使得开发复杂的机器人系统变得更加高效和可管理。

12. 回调函数是怎么用的?程序什么时候会调用回调函数

在ROS(机器人操作系统)中,回调函数主要用于处理订阅的消息。当节点订阅了某个话题(Topic),并且有消息发布到这个话题时,回调函数会自动被调用,以处理收到的数据。通过回调函数,程序可以对话题中传递的消息作出相应的处理,例如更新变量、发布新消息或执行特定的操作。

  • 回调函数是在 收到消息 时被调用的。只要节点订阅了话题并且有其他节点发布消息,ROS就会自动调用该回调函数来处理接收到的消息。
  • **ROS的spin()spinOnce()**函数确保节点保持活动状态,持续监听订阅的话题。如果没有调用这些函数,回调函数将不会被触发。

13. 话题和节点有什么关系

在ROS中,**话题(Topic)节点(Node)**是通信系统的两个核心概念。节点负责执行任务和处理数据,而话题则充当节点间数据传输的渠道。

节点(Node)

  • 节点是独立的进程,用于执行特定的任务。例如,一个节点可以是用来控制无人机的速度、处理传感器数据、或进行路径规划。
  • 在一个ROS系统中,通常会有多个节点,每个节点都可以**发布(Publish)订阅(Subscribe)**不同的话题,从而实现各个任务模块间的数据交互。
  • 节点可以通过话题发布消息,也可以通过订阅话题来接收其他节点发布的消息。

话题(Topic)

  • 话题是数据传输的管道,每个话题都有一个唯一的名称(比如 /cmd_vel/sensor_data)。
  • 话题基于发布/订阅(Publisher/Subscriber)模型运行,即发布者将消息发布到特定话题上,订阅者可以接收该话题的消息。
  • 话题是多对多的,即一个话题可以有多个发布者和多个订阅者,这使得话题适合于广播数据。例如,多个传感器数据可以通过一个话题广播给所有需要它的节点。

节点与话题的关系

  • 发布消息:节点可以创建一个发布者,将消息发布到指定的话题上,使其他订阅该话题的节点都能接收到消息。
  • 接收消息:节点可以创建一个订阅者,订阅一个或多个话题,从而接收其他节点发布的数据。
  • 无需直接通信:由于通过话题进行通信,节点之间并不需要知道彼此的存在,只需要知道话题的名称。因此,话题在节点之间充当了解耦的桥梁

示例

比如,在一个无人机控制系统中:

  1. 传感器节点:一个节点负责读取传感器数据(如GPS或IMU数据),并将数据发布到话题 /sensor_data
  2. 控制节点:另一个节点订阅 /sensor_data,根据传感器数据做出控制决策,并发布控制指令到 /cmd_vel
  3. 执行节点:负责实际执行控制指令的节点订阅 /cmd_vel,从而接收到控制节点发布的指令。

在这个例子中,传感器节点、控制节点和执行节点通过话题进行通信,实现数据的获取、处理和应用。

14.一个节点只能对应一个话题吗

在ROS中,一个节点可以对应多个话题,并且在不同的话题上发布和订阅消息。节点的设计非常灵活,可以在任意数量的话题上发布和接收消息,从而实现复杂的数据交互和任务控制。具体来说,一个节点可以:

  1. 发布多个话题:例如,一个节点可以发布速度控制指令到 /cmd_vel,同时将状态信息发布到 /status
  2. 订阅多个话题:一个控制节点可以订阅多个传感器话题,如 /gps_data/imu_data,并根据这些数据做出决策。
  3. 同时发布和订阅多个话题:一个节点既可以作为某个话题的发布者,也可以是另一个话题的订阅者,从而在不同话题间传递或处理信息。

例子

假设你有一个无人机控制节点,它可能需要:

  • 发布:位置指令到话题 /setpoint_position,速度指令到 /cmd_vel
  • 订阅:接收来自 /sensor/gps 的位置数据,接收 /sensor/imu 的姿态数据。

这样,无人机控制节点能够同时接收和发布多种数据,实现复杂的功能。

2024.10.23

1. 卡在INFO  [simulator] Waiting for simulator to accept connection on TCP port 4560

roslaunch px4 px4.launch和roslaunch px4 single_vehicle_spawn.launch启动不了gazebo环境,只能在已启动的gazebo中加入一个新的无人机

2. Offboard模式是什么意思

Offboard模式是PX4飞控中的一种飞行模式,在该模式下,飞行器的控制指令由外部计算设备(例如计算机、单板机等)实时发送,而不是依赖飞控内部的自动化或手动控制。换句话说,飞行器的姿态、速度、位置等控制指令都由外部程序通过MAVLink协议发布给飞行器,飞行器的飞控系统会追踪并执行这些外部指令

在Offboard模式下,常见的使用场景包括无人机的自动导航、编队飞行、自动避障等,通过编写程序实现自定义的飞行路径和行为。它适用于高级自主飞行应用,因为用户可以动态调整飞行器的运动,而不依赖于飞控板预设的飞行模式。

OFFBOARD 模式允许飞行器接收并执行来自外部程序(如 ROS 节点)发送的控制命令,而不是依赖飞控自身的自动飞行模式

3.Takeoff,Land,Return,Loiter和Mission模式是什么意思

这些模式在PX4飞行控制系统中用于控制无人机的不同飞行状态。它们有各自的用途,适用于不同的任务和飞行场景。下面是每种模式的解释:

1. Takeoff 模式(起飞模式)

  • 作用:无人机自动从地面起飞到预设的高度。
  • 用途:Takeoff 模式用于让无人机安全地从地面起飞,不需要手动操控。在使用其他模式(例如 Offboard 或 Mission)之前,通常会先使用 Takeoff 模式让无人机稳定升空。

2. Land 模式(降落模式)

  • 作用:无人机自动从空中安全降落到地面。
  • 用途:当任务完成或需要紧急降落时,Land 模式可用于让无人机自主找到合适的地点平稳着陆。通常在飞行结束或遇到低电量时会切换到这个模式。

3. Return 模式(返航模式,Return to Launch, RTL)

  • 作用:无人机自动返回到起飞位置或预设的返航点,并降落。
  • 用途:Return 模式通常用于在任务完成、失去信号、或电量不足时让无人机自动返回起点。这是一个安全措施,保证无人机能够在突发状况下自主返航。

4. Loiter 模式(悬停模式)

  • 作用:无人机在当前位置保持悬停,持续自动调整姿态和位置以保持稳定。
  • 用途:Loiter 模式可以用于需要无人机在某个固定位置悬停的场景,通常用于观察、侦察或等待进一步指令。无人机会自动使用 GPS 等传感器来维持悬停的位置和高度。

5. Mission 模式(任务模式)

  • 作用:无人机根据预先规划的飞行任务自动飞行,包括到达多个航点,执行特定动作(如拍照、改变高度等)。
  • 用途:在 Mission 模式下,无人机会自动按照预设的航线完成一系列任务,适用于需要无人机自主飞行的场景,如测绘、巡检或物流配送。

这些模式都是为不同的任务和操作需求设计的,提供了高度自动化的控制能力,帮助用户根据实际应用场景选择合适的飞行模式。


2024.10.24 让无人机悬停

1. 参考:

MAVROS Offboard control example (Python) | PX4 Guide (main)

不用写下面这个launch文件,因为你代码有没有问题还不知道,先启环境,再启Python文件就行,写成launch文件的目的是让环境和python文件一起启动罢了

(写成下面这个launch文件,再运行这个launch文件的话,会报错)

2. 运行:

运行环境

运行python文件

运行QGC

一开始飞机飞不了,报错

QGC这里要点开虚拟游戏手柄,就能飞了,因为飞无人机也需要人拿一个手柄去操作


2024.10.26 坐标系

1. 欧拉角是什么意思

欧拉角是一种用来描述三维空间中物体旋转的方式。它通常由三个角度组成,这三个角度表示物体围绕三个轴(通常是 x、y、z 轴)的旋转。欧拉角的定义和使用在不同的应用中可能有所不同,但最常见的方式是使用以下三个旋转:

  1. 俯仰角 (Pitch):围绕 x 轴的旋转,通常表示物体的上下倾斜程度。
  2. 横滚角 (Roll):围绕 y 轴的旋转,通常表示物体的左右倾斜程度。
  3. 偏航角 (Yaw):围绕 z 轴的旋转,通常表示物体的水平转向。

欧拉角的特点

  • 直观性:对于人类来说,欧拉角的表示比较直观,因为它与日常生活中观察物体旋转的方式相似。
  • 顺序依赖性:欧拉角的旋转是顺序依赖的,不同的旋转顺序会导致不同的最终姿态。这是欧拉角的一个重要缺陷,容易导致万向锁(gimbal lock)问题。

万向锁

万向锁是指在特定角度下,两个旋转轴重合,导致一个自由度的丧失,从而使得物体的旋转变得不可预测。例如,当物体的俯仰角达到 90 度时,偏航角和横滚角的旋转就无法独立控制。

示例

在航空领域,飞机的姿态通常用欧拉角表示:

  • 俯仰角(Pitch):飞机的头部上抬或下压。
  • 横滚角(Roll):飞机的翼尖抬起或下降。
  • 偏航角(Yaw):飞机的头部向左或向右转动。

转换

欧拉角可以转换为其他表示方式,如旋转矩阵或四元数,这在计算机图形学和机器人控制中非常常见。尽管欧拉角易于理解,但在进行复杂旋转时,四元数通常是更优的选择。

2. 四元数是什么意思

四元数是一种数学表示法,常用于计算机图形学、机器人学、航空航天等领域,特别是在表示三维空间中的旋转时。四元数的形式为:

q=w+xi+yj+zkq = w + xi + yj + zkq=w+xi+yj+zk

其中:

  • www 是标量部分;
  • x,y,zx, y, zx,y,z 是虚部,表示三维空间中的方向;
  • i,j,ki, j, ki,j,k 是虚单位。

四元数的特点

  1. 避免万向锁:与传统的欧拉角表示法相比,四元数可以避免在旋转过程中出现万向锁的问题,这种现象会导致自由度损失和旋转顺序问题。

  2. 更高效的计算:四元数的旋转计算比旋转矩阵更高效,且更节省内存。

  3. 插值:在动画和物体运动中,四元数支持平滑的旋转插值(如球形线性插值,SLERP),使得物体的运动看起来更加自然。

四元数的使用

  • 表示旋转:四元数常用于表示物体在三维空间中的旋转状态。
  • 复合旋转:四元数可以通过乘法组合多个旋转,使得复杂的旋转变得简单。
  • 从欧拉角或旋转矩阵转换:可以将欧拉角或旋转矩阵转换为四元数,这使得不同的旋转表示法之间能够相互转换。

示例

如果我们有一个四元数 q=0.7071+0i+0j+0.7071kq = 0.7071 + 0i + 0j + 0.7071kq=0.7071+0i+0j+0.7071k,它可以表示一个绕 z 轴旋转 90 度的旋转。

四元数是三维空间旋转的强大工具,广泛应用于机器人控制、游戏开发、虚拟现实等领域。

States_cb回调函数

States_cb回调函数从从 /gazebo/model_states 话题接收到的消息中获得真目标的x,y坐标(target_x,target_y)

这个坐标是什么参考系下的?

这段代码中获取的目标位置坐标 (target_xtarget_y) 是相对于 Gazebo 中的全局坐标系(通常称为世界坐标系)。在 Gazebo 中,模型的位置信息一般是以地面为基准的全局坐标系来表示的,X、Y、Z 轴分别对应东、北和上方的方向

全局坐标系,机体坐标系

aa

zhihang_vtol_position_cb回调函数

current_pose是无人机在哪个坐标系下的位置

vtol_standard_yaw是无人机相对于哪个坐标系的yaw角

vtol_pose是什么