# 有效载荷和摄像头

PX4 支持多种有效载荷和相机。

有效载荷连接到 战斗控制器输出通常可在任务中自动触发,或使用遥控直通、映射到操纵杆或 MAVLink/MAVSDK 命令手动触发。

备注

有效载荷(执行器)可在 预上膛状态这样可以关闭电机,但允许执行器移动。这可能比在载具上膛时进行测试更安全。

# 无人机测绘

在勘测过程中,测绘无人机使用相机按时间或距离间隔捕捉图像。

支持 MAVLink 摄像机协议 (打开新窗口) 提供与 PX4 和 QGroundControl 的最佳集成。MAVSDK 提供了简单的应用程序接口,可在以下两个方面使用该协议 独立摄像机操作 (打开新窗口) 并在 任务 (打开新窗口).

也可使用 PWM 或 GPI 输出将摄像机直接连接到飞行控制器。对于连接到飞行控制器的相机,PX4 支持以下 MAVLink 命令/任务项目:

以下主题介绍了如何 接通 并配置摄像机:

# 货运无人机(包裹递送)

货运无人机通常使用夹具、绞盘和其他装置在目的地释放包裹。

PX4 支持 特派团包裹递送 使用 夹具.还可以使用 mav_cmd_doo_gripper (打开新窗口) MAVLink 命令,或通过操纵杆按钮手动操作。

有关设置和使用信息,请参阅

备注

还打算为绞盘和其他释放装置提供支持。

如果需要使用尚未集成的硬件执行货物交付,可以使用 通用执行器控制.

# 监视、搜索和救援

监视和搜索救援无人机的要求与测绘无人机类似。主要区别在于,除了在规划的勘测区域内飞行外,它们通常还需要对相机进行良好的独立控制,以捕捉图像和视频,而且可能需要能够在白天和夜间工作。

使用支持 MAVLink 摄像机协议 (打开新窗口) 因为它支持图像和视频捕捉、缩放、存储管理、同一载具上的多个摄像头以及在它们之间切换等功能。这些摄像头可以通过 QGroundControl 手动控制,也可以通过 MAVSDK 控制(两者都适用于 QGroundControl 和 MAVSDK)。 独立摄像机操作 (打开新窗口) 并在 任务 (打开新窗口)).参见 相机触发 以了解如何配置您的摄像机与 MAVLink 配合使用。

备注

直接连接到飞行控制器的摄像头 只是 支持摄像机触发,不太适合大多数监控/搜索工作。

搜救无人机可能还需要携带货物,例如为受困的徒步旅行者提供应急物资。参见 货运无人机 有关有效载荷运送的信息,请参阅上文。

# 农用无人机/农作物喷洒

农用无人机通常用于作物健康状况测绘、虫害检测和动物管理(放牧、跟踪等)。这些情况与 映射监视、搜索和救援 上述情况。虽然特定作物/动物可能需要专业相机,但与 PX4 的集成是一样的。

农用无人机也可用于作物喷洒。在这种情况下,必须将喷洒器控制为 通用促动器:

  • 使用 MAVLink 进行通用推杆控制 本节介绍如何将飞行控制器输出连接到喷洒器,以便使用 MAVLink 控制喷洒器。大多数喷洒器都提供启动/禁用泵的控制功能;有些喷洒器还允许控制流速或喷洒区域(例如,通过控制喷嘴形状或使用旋转器来分配有效载荷)。
  • 您可以使用 调查模式 (打开新窗口)或使用航点定义飞行网格。无论采用哪种方式,都必须确保飞行器的飞行路径和高度能够为所使用的特定喷雾提供足够的覆盖范围。
  • 您应该添加一个 "设置执行器"任务项目 在勘测模式之前和之后对任务进行设置,以便启用或禁用喷洒器。

# 通用执行器控制

您可以将任意硬件连接到未使用的 PX4 输出端,并使用 遥控控制MAVLink (作为命令或在 使命).

当您需要使用没有相关 MAVLink 命令或 PX4 不支持的有效载荷类型时,该功能非常有用。

备注

尽可能使用集成硬件和特定硬件的 MAVLink 命令,而不是通用的致动器控制。使用集成硬件可以优化任务规划和行为。

mav_cmd_doo_set_actuator (打开新窗口) 可用于设置最多 6 个执行机构(一次)的值。该命令可用于 任务 通过创建一个 "设置执行器"任务项目,或作为一个独立的命令。

要控制的输出端在 致动器 在配置屏幕上分配功能 车外执行器套件 1车外执行器套件 6 到所需的 执行器输出.

QGC 中的通用执行机构输出设置

mav_cmd_doo_set_actuator 参数1参数6 控制由 车外执行器套件 1车外执行器套件 6 分别是

例如,在上图中 AUX5 输出被赋予功能 车外执行器套件 1 功能要控制连接到 AUX5 的值。 MAV_CMD_DO_SET_ACTUATOR.param1.

# 使用 RC 控制通用致动器

使用 RC 通道最多可控制 6 个自动驾驶仪 PWM 或 CAN 输出。要控制的输出可在 致动器 在配置屏幕上分配功能 RC 辅助 1RC 辅助 6 到所需的 执行器输出.

将特定 RC 通道映射到输出功能 RC 辅助 n (并因此分配输出),您可以使用 RC_MAP_AUXn 参数相同的 n

例如,要控制连接到 AUX 针脚 3(例如)上的执行器,可以分配输出功能 RC 辅助 5 到输出端 AUX3.然后,您就可以通过设置遥控通道来控制 AUX3 使用 RC_MAP_AUX5.

# 任务中的通用执行器控制

要在任务中使用通用推杆控制,首先必须 配置要使用 MAVLink 控制的输出端.

那么在 QGroundControl 您可以在任务中使用 设置执行机构 任务项目(这将增加一个 mav_cmd_doo_set_actuator (打开新窗口) 到上传的任务计划)。

需要注意的是,在使用通用执行器控制时,既不能 QGroundControl 或 PX4 对被触发的硬件一无所知。在处理任务项目时,PX4 只需将输出设置为指定值,然后立即进入下一个任务项目。如果硬件需要时间来激活,而您需要在当前航点暂停以实现激活,那么您就需要在计划任务时添加额外的项目,以实现所需的行为。

备注

这也是首选集成硬件的原因之一!它允许以通用方式编写任务,由飞行算法池配置管理任何特定于硬件的行为或定时。

在任务中使用通用执行器:

  1. 在需要执行器命令的地方创建一个航点任务项目。

  2. 将航点任务项目更改为 "设置推杆 "任务项目:

    设置执行机构任务项目

    • 在航点任务编辑器上选择标题,打开 选择任务指令 编辑
    • 选择类别 高级然后 设置执行机构 项目(如果该项目不存在,请尝试更新版的 QGroundControl 或每日构建)。这将把任务物品类型改为 "设置推杆"。
  3. 选择已连接的执行机构,并设置其数值(数值在 -1 和 1 之间正常化)。

    设置执行机构任务项目

# MAVSDK (脚本示例)

以下是 MAVSDK (打开新窗口) 示例代码 (打开新窗口) 演示了如何使用 MAVSDK 动作插件的 set_actuator() (打开新窗口) 方法。

set_actuator() 索引值映射到为机身定义的 MAVLink 有效载荷输出。

备注

MAVSDK 发送 mav_cmd_doo_set_actuator (打开新窗口) 引擎盖下的 MAVLink 命令。

#包括 <mavsdk/mavsdk.h>;
#包括 <mavsdk/plugins/action/action.h>;
#包括 时间顺序<chrono>;
#包括 <cstdint>;
#包括 iostream>;
#包括 未来;

使用 命名空间 mavsdk;

空白 用法( 标准::字符串及样品; bin_name)
{
    标准::cerr <<; 使用方法:"; <<; bin_name <<; " <connection_url> <actuator_index> <actuator_value>\n";
              <<; "连接 URL 格式应为 :\n";
              <<; " 对于 TCP:tcp://[server_host][:server_port]\n";
              <<; "对于 UDP:udp://[bind_host][:bind_port]/n";
              <<; " 对于串行端口:serial:///path/to/serial/dev[:baudrate]\n";
              <<; 例如,要连接到模拟器,请使用 URL:udp://:14540\n";;
}

int 主要(int 参数, 烧焦** 参数)
{
    如果 (参数 != 4) {
        用法(参数[0]);
        返回 1;
    }

     标准::字符串 connection_url = 参数[1];
     int 索引 = 标准::脚踏(参数[2]);
     浮动 价值 = 标准::单链(参数[3]);

    Mavsdk mavsdk;
     连接结果 connection_result = mavsdk.添加任意连接(connection_url);

    如果 (连接结果 != 连接结果::成功) {
        标准::cerr <<; 连接失败:"; <<; 连接结果 <<; '\n';
        返回 1;
    }

    标准::cout <<; "等待发现系统...\n";;
    汽车 舞会 = 标准::承诺<;标准::共享_ptr<;系统>>;{};
    汽车 未来 = 舞会.获取未来();

    // 我们等待着新系统的发现,一旦我们找到一个有
    //自动驾驶仪,我们决定使用它。
    mavsdk.subscribe_on_new_system([及样品;mavsdk, 及样品;舞会]() {
        汽车 系统 = mavsdk.系统().();

        如果 (系统->;has_autopilot()) {
            标准::cout <<; "Discovered autopilot\n";;

            // 再次取消订阅,因为我们只想找到一个系统。
            mavsdk.subscribe_on_new_system(nullptr);
            舞会.设置值(系统);
        }
    });

    // 我们通常以 1Hz 的频率接收心跳,因此我们应该找到一个
    最长约 3 秒钟后 // 系统肯定会启动。
    如果 (未来.等待(标准::计时器::秒钟(3)) == 标准::未来状态::超时) {
        标准::cerr <<; "未找到自动驾驶仪,退出;;
        返回 1;
    }

    // 立即发现系统。
    汽车 系统 = 未来.获取();

    // 安装插件。
    汽车 行动 = 行动{系统};

    标准::cout <<; "设置执行机构...\n";;
     行动::结果 set_actuator_result = 行动.设置促动器(索引, 价值);

    如果 (设置致动器结果 != 行动::结果::成功) {
        标准::cerr <<; "设置执行器失败:"; <<; 设置致动器结果 <<; '\n';
        返回 1;
    }

    返回 0;
}