PX4与仿真入门教程-dronedoc-使用游戏手柄操作无人机
PX4与仿真入门教程-dronedoc-使用游戏手柄操作无人机
说明:
- 本页介绍如何使用游戏手柄(操纵杆)和 mavros_extras 包的 mavteleop 节点操作无人机。
步骤:
安装xbox360手柄,参考教程
启动joy_node
joy_node 是包含在joy 包中的一个节点,它读取游戏手柄输入并发布sensor_msgs/Joy 类型的消息。
要使用它,请连接您的游戏手柄并运行以下命令
新终端,启动roscore
roscore
- 新终端,启动joy_node
rosrun joy joy_node
- 如果节点运行成功,导航游戏手柄将向 /joy 主题发布类似于以下内容的消息:
- 查看话题
rostopic echo /joy
- 内容如下:
header:
seq: 69
stamp:
secs: 1544540912
nsecs: 248934345
frame_id: ''
axes: [-0.0, -0.0, 0.0, 0.0, 0.0, 0.0]
buttons: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
---
header:
seq: 70
stamp:
secs: 1544540912
nsecs: 312954596
frame_id: ''
axes: [-0.0, -0.0, 0.0, 0.0, 0.0, 0.0]
buttons: [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
---
- 启动 mavteleop 节点
- mavteleop 节点通过将游戏手柄输入转换为无人机控制输入并将它们发布到 setpoint_ * 主题(setpoint_velocity、setpoint_attitude、setpoint_position 等)来操纵无人机。
- 由于您可以根据给定的参数更改操作方法,因此这次我们将提供 -vel 选项来控制无人机的速度。
rosrun mavros_extras mavteleop -vel
- 除了 -vel 选项之外,还有 -att 和 -pos 选项,它们分别是操纵姿势和位置的模式。
- 目前的参数配置,xbox360手柄和ps手柄通用
创建参数设置文件
- 检查游戏手柄映射
- 调用joy_node 节点会将操纵杆输入发布到/joy 主题,如启动joy_node 中所述。
- 在发布的消息中,轴是棒输入,按钮是按钮输入。 请注意,每个索引都从 0 开始。
- 您可以在查看 /joy 主题内容的同时操作游戏手柄来查看游戏手柄映射。
- 游戏手柄硬件(按钮、摇杆等)与操作系统识别的按钮 ID 之间的对应关系称为映射。
- 创建一个 YAML 文件
- 在ROS中,可以使用YAML文件批量加载和保存参数(参考)。
- 这一次,我们将使用这种机制来加载与游戏手柄映射相关的所有参数。
- 以下是包含 Logitech F310 参数的文件。
- 这个文件中写入的内容保存为ROS参数,被mavteleop节点引用。
- 更改axes_map 和button_map 部分以匹配您的游戏手柄的映射。
- 也可以通过改变axis_scale来改变摇杆操作量和无人机移动速度的对应关系。
- f310_joy.yaml内容如下:
# Joystic configuration for Logitech F310 gamepad
axes_map:
roll: 3
pitch: 2
yaw: 0
throttle: 1
axes_scale:
roll: 0.5
pitch: 0.5
yaw: 0.5
throttle: 0.5
button_map:
takeoff: 0
land: 1
enable: 2
- 加载参数
- 使用以下命令加载参数。
rosparam load ~/dronedoc_ws/src/px4_sim_pkg/config/f310_joy.yaml mavteleop
- rosparam load 作为文件命名空间写入。 命名空间可以省略。
测试:
- 新开终端,启动PX4 SITL仿真
cd ~/tools/dronedoc/
source load_environment.sh
roslaunch px4_sim_pkg mymodel_sitl_tf.launch
- 新开终端,运行手柄
rosrun joy joy_node _autorepeat_rate:=5
- 新开终端,运行mavteleop
rosparam load ~/dronedoc_ws/src/px4_sim_pkg/config/f310_joy.yaml mavteleop
rosrun mavros_extras mavteleop -vel
- 在启动PX4 SITL仿真的终端下,执行起飞
commander takeoff
- 为了能够从游戏手柄操作无人机,必须处于OFFBOARD模式,因此请起飞然后更改模式。
- 新开终端,设置为OFFBOARD模式
rosrun mavros mavsys mode -c OFFBOARD
您必须已经有关于 setpoint_ * 主题的消息才能更改为 OFFBOARD 模式。 在这种情况下,mavteleop 节点已经向 /mavros/setpoint_velocity/cmd_vel 主题发布了一条消息,因此您可以更改模式。 如果您无法在自己的节点上更改为 OFFBOARD 模式,请确保在 setpoint_ * 主题上发布消息。
如果您操作游戏手柄,则无人机应如下移动。
- 左边摇杆,左右控制左右旋转,前后控制升降
- 右边摇杆,左右控制左右飞行,前后控制前后飞行
利用launch启动
- 您可以在启动 joy_node 和 mavteleop 节点的同时使用 Launch 文件设置参数。
- 使用 mavteleop 节点的 Launch 文件mavros_teleop.launch如下所示。
<launch>
<arg name="teleop_args" default="-vel" />
<node pkg="joy" type="joy_node" name="joy" required="True">
<param name="autorepeat_rate" value="5" /> <!-- Minimal update rate, Hz -->
</node>
<node pkg="mavros_extras" type="mavteleop" name="mavteleop" args="$(arg teleop_args)" required="True" output="screen">
<rosparam command="load" file="$(find px4_sim_pkg)/config/f310_joy.yaml" />
</node>
</launch>
位置放在px4_sim_pkg/launch/teleop/mavros_teleop.launch
在 mavros_teleop.launch 中,描述游戏手柄映射的文件 (f310_joy.yaml) 作为带有 rosparam 标签的 ROS 参数加载
新开终端,启动仿真
cd ~/tools/dronedoc/
source load_environment.sh
roslaunch px4_sim_pkg mymodel_sitl_tf.launch
- 新开终端,启动控制
cd ~/tools/dronedoc/
source load_environment.sh
roslaunch px4_sim_pkg mavros_teleop.launch
- 在启动仿真的终端,执行起飞
commander takeoff
- 新开终端,设置模式
rosrun mavros mavsys mode -c OFFBOARD
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号