带有 SITL 的 ROS

将 ArduPilot 连接到 ROS

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

mkdir -p ardupilot_ws/src
CD 阿杜皮洛特_WS 柔荑 启动
CD 来源

好了,ROS 已准备就绪,让我们启动一个 SITL 实例。参考 在 Linux 上设置 SITL 了解如何安装 SITL。导航至您的 SITL 安装,然后启动一个旋翼飞行器会话:

sim_vehicle.py -v ArduCopter --控制台 --地图

(控制台用于显示 mavproxy 控制台,地图用于在地图上显示旋翼飞行器)。

现在,您已经启动了一个可以访问 TCP 和 UDP 的 SITL 实例,您应该可以看到一些类似的行:

"mavproxy.py" "--master" "tcp:127.0.0.1:5760" "--sitl" "127.0.0.1:5501" "--out" "127.0.0.1:14550" "--out" "127.0.0.1:14551" "--map" "--console";

-out "和"-out "都指 MAVProxy 创建的 UDP 连接。我们将通过 mavros 使用 UDP 访问。

返回 ROS 终端。为我们的启动文件创建一个新目录。

mkdir 启动
CD 启动

提示

编写启动文件比记住 ROS 命令更简单。

让我们为 ArduPilot 复制 MAVROS 的默认启动文件 :

鹏程 马夫罗斯 apm.launch apm.launch

你的目录中应该有一个名为 "apm.launch "的新文件。"roscp "命令只是在 ROS 软件包上调用系统命令的辅助工具。用你喜欢的编辑器打开它,我用的是 gedit。

编辑 apm.launch
<launch> <!-- vim: set ft=xml noet : --> <!-- 基于 ArduPilotMega 的 FCU's 启动脚本示例 --> <arg name="fcu_url" default="/dev/ttyACM0:57600" /> <!-- 与 Pixhawk 连接的端口和波特率 --> <arg name="gcs_url" default="" /> <!-- 像 Mavproxy 一样转发到 GCS --> <arg name="tgt_system" default="1" /> <!-- 无人机的 MAVLink id,默认为 1 --> <arg name="tgt_component" default="1" /> <!-- ROS 将在其中输出信息,screen 是你当前的终端 --> <include file="$(find mavros)/launch/node.launch"> <!-- 这个启动文件将启动另一个启动文件 --> <arg name="pluginlists_yaml" value="$(find mavros)/launch/apm_pluginlists.yaml" /> <!-- Mavros 插件配置,我们稍后会修改 --> <arg name="config_yaml" value="$(find mavros)/launch/apm_config.yaml" /> <!-- 要使用的 Mavros 插件列表 --> <arg name="fcu_url" value="$(arg fcu_url)" /> <!-- 将参数传递给其他启动文件 --> <arg name="gcs_url" value="$(arg gcs_url)" /> <arg name="tgt_system" value="$(arg tgt_system)";/> <arg name="tgt_component" value="$(arg tgt_component)" /> <arg name="log_output" value="$(arg log_output)" /> </include> </launch>;

要连接 SITL,我们只需将第一行修改为 <arg name="fcu_url"; default="udp://127.0.0.1:14551@14555" />;保存文件,然后用

玫瑰发射 apm.launch

你会看到 MAVROS 读取其配置的一些冗余信息,以及一些表示连接的行:

[ info] [1496336768.500953284]:CON: 收到 HEARTBEAT,已连接。FCU: ArduPilotMega / ArduCopter [ INFO] [1496336768.536761724]:检测到 RC_CHANNELS 消息![ info] [1496336769.533950451]:VER: 1.1:能力 0x0000000000001bcf [ INFO] [1496336769.534021653]:VER: 1.1:飞行软件: 03060000 (8a4a2722) [ INFO] [1496336769.534146986]:VER: 1.1:中间件软件: 00000000 ( ) [ INFO] [1496336769.534195446]:VER: 1.1:操作系统软件: 00000000 ( ) [ INFO] [1496336769.534280663]:VER: 1.1:板硬件: 00000000 [ INFO] [1496336769.534309086]:VER: 1.1:VID/IDP: 0000:0000 [ info] [1496336769.534331512]:VER: 1.1:uid: 0000000000000000 [ warn] [1496336769.534370049]:CMD: Unexpected command 520, result 0 [ INFO] [1496336778.533962739]:FCU: APM:Copter V3.6-dev (8a4a2722) [ INFO] [1496336778.534247677]:FCU: Frame:quad [ info] [1496336779.021134163]:PR:已收到参数列表 [ INFO] [1496336783.535151119]:WP:已收到任务

连接已完成 !

让我们使用 RQT 在 ROS 中显示 ArduPilot 的信息。通常,MAVROS 会完成 MAVLink <-> ROS 会打开另一个终端并启动 RQT,其中包括

rqt

转到 plugins/ topics /topics monitor TADAM!!!!!您将看到 mavros 根据 ArduPilot 信息创建的所有主题,点击方框可查看当前值。在 plugins/robot tools/ runtime monitor 中可以看到一切正常!

让我们尝试使用 mavros 更改模式:转到插件/服务/服务调用器,将服务设置为/mavros/set_mode,将自定义模式设置为 "GUIDED",然后单击调用按钮。响应应为 true,您可以在/mavros/state 主题中查看模式现在是 GUIDED。

现在,您已经了解了 ROS 与 ArduPilot 的基本用法!ROS 还有很多其他功能,如绘图、3D 可视化等。