带有 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 可视化等。