ROS 与 SITL

ROS 与 SITL

将 ArduPilot 连接到 ROS

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

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

好的 ROS 已准备就绪,让我们启动一个 SITL 实例。 请参阅在 Linux 上设置 SITL 以了解如何安装 SITL。 导航到您的 SITL 安装并启动直升机会话:

sim_vehicle.py -v ArduCopter --console --map

(–控制台显示 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”都是指由MAVProxy创建的UDP连接。我们将使用马夫罗斯的UDP访问。

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

mkdir launch
cd launch

提示

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

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

roscp mavros apm.launch apm.launch

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

gedit apm.launch
<launch>
    <!-- vim: set ft=xml noet : -->
    <!-- example launch script for ArduPilotMega based FCU's -->

    <arg name="fcu_url" default="/dev/ttyACM0:57600" /> <!-- Port et baudrate of the connexion with Pixhawk -->
    <arg name="gcs_url" default="" /> <!-- Retransmission to a GCS like Mavproxy does -->
    <arg name="tgt_system" default="1" /> <!-- MAVLink id of your drone, default is 1 -->
    <arg name="tgt_component" default="1" /> <!-- MAVLink component id of your drone, default is 1 -->
    <arg name="log_output" default="screen" /> <!-- Where ROS will output its message, screen is your current terminal -->

    <include file="$(find mavros)/launch/node.launch"> <!-- This launch file will launch another launch file -->
        <arg name="pluginlists_yaml" value="$(find mavros)/launch/apm_pluginlists.yaml" /> <!-- Mavros plugin configuration, we will modify that later -->
        <arg name="config_yaml" value="$(find mavros)/launch/apm_config.yaml" /> <!-- Mavros plugin list to use -->

        <arg name="fcu_url" value="$(arg fcu_url)" /> <!-- Pass the parameter to the other launch file -->
        <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>

To connect to SITL we just need to modify the first line to . save you file and launch it with<arg name="fcu_url" default="udp://127.0.0.1:14551@14555" />

roslaunch apm.launch

You should see some verbose from MAVROS that read its configuration and some line that indicate a connexion:

[ INFO] [1496336768.500953284]: CON: Got HEARTBEAT, connected. FCU: ArduPilotMega / ArduCopter
[ INFO] [1496336768.536761724]: RC_CHANNELS message detected!
[ INFO] [1496336769.533950451]: VER: 1.1: Capabilities         0x0000000000001bcf
[ INFO] [1496336769.534021653]: VER: 1.1: Flight software:     03060000 (8a4a2722)
[ INFO] [1496336769.534146986]: VER: 1.1: Middleware software: 00000000 (        )
[ INFO] [1496336769.534195446]: VER: 1.1: OS software:         00000000 (        )
[ INFO] [1496336769.534280663]: VER: 1.1: Board hardware:      00000000
[ INFO] [1496336769.534309086]: VER: 1.1: VID/PID:             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: parameters list received
[ INFO] [1496336783.535151119]: WP: mission received

连接完成!

让我们使用 RQT 来了解 ArduPilot 信息在 ROS 中的显示方式。通常,MAVROS 将完成大部分翻译 MAVLink <–> ROS 打开另一个终端并启动 RQT

rqt

转到插件/主题/主题监视器 嘭! !!!!您会看到 mavros 必须从 ArduPilot 信息中创建的所有主题,单击该框以查看当前值。 您可以在插件/机器人工具/运行时监视器中看到一切正常!

让我们尝试使用 mavros 更改模式: 转到插件/服务/服务调用方 将服务设置为 /mavros/set_mode 将custom_mode设置为“引导”,然后单击呼叫按钮 响应应该是真的,你可以在 /mavros/state 主题上查看该模式现在是 GUIDED 的。它应该在您的MAVProxy控制台中相同。

现在,您知道了使用 ArduPilot 的 ROS 的基础!ROS还有很多其他功能,您可以使用,例如绘图,3D可视化等。

Last updated