Table of Contents
Motivation
Ich verwende hier das Logitech Gamepad F710.
Verbinde dein F710 per USB-Dongle, schalte es auf den Direct Input-Modus (Schalter auf “D”).
Wenn du sehen willst, ob das Gamepad richtig erkannt wird, gib
lsusb | grep Logitech
in das Terminal ein. Wenn Du
Bus 003 Device 005: ID 046d:c219 Logitech, Inc. F710 Gamepad [DirectInput Mode]
siehst, wurde es korrekt erkannt.
Den Roboter steuern
Um den Roboter mit einem Gamepad zu steuern, benötigen wir das Paket teleop_twist_joy
. Dieses Paket wandelt die Eingaben des Gamepads in Twist
Nachrichten um und
veröffentlicht diese auf einem bestimmten ROS 2 Topic, in der Regel /cmd_vel
.
Es werden dazu zwei nodes gestartet, der joy_node und der teleop_node.
Installation
Wie bei ROS üblich weren Pakete über apt installiert:
sudo apt install ros-humble-teleop-twist-joy
Wurde das Gamepad korrekt erkannt?
Um zu schauen, ob das Gamepad richtig erkannt wird, kannst du folgenden Befehl verwenden:
ros2 run joy joy_enumerate_devices
Es sollte eine Ausgabe wie diese erscheinen:
ID : GUID : GamePad : Mapped : Joystick Device Name
-------------------------------------------------------------------------------
0 : 030000006d0400001fc2000005030000 : true : true : Logitech F710 Gamepad (XInput)
Joy Node starten
Im ersten Schritt müssen wir den Joy Node starten.
ros2 run joy joy_node
Der joy node veröffentlicht die Daten des Gamepads auf dem Topic /joy
.
Um zu sehen, ob der Node richtig gestartet wurde, kannst du folgenden Befehl verwenden:
ros2 topic echo /joy
Die Ausgabe sieht so aus:
header:
stamp:
sec: 1739217047
nanosec: 710310619
frame_id: joy
axes:
- -0.0
- -0.0
- -0.0
- -0.0
- 0.0
- 0.0
buttons:
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
---
Button-Zuordnung
Achsen
- 0: Left Stick Horizontal (-1.0..1.0)
- 1: Left Stick Vertical (-1.0..1.0)
- 2: Right Stick Horizontal (-1.0..1.0)
- 3: Right Stick Vertical (-1.0..1.0)
- 4: Cross key Horizontal (-1.0..1.0)
- 5: Cross key Vertical (-1.0..1.0)
Buttons
- 0: X
- 1: A
- 2: B
- 3: Y
- 4: LB
- 5: RB
- 6: LT
- 7: RT
- 8: BACK
- 9: START
- 10: Left Stick Button
- 11: Right Stick Button
Teleop
Im nächsten Schritt starten wir den Node teleop_node
. Dieser Node abonniert die Daten des Gamepads und veröffentlicht die Twist
Nachrichten auf dem Topic /cmd_vel
.
Öffne ein weiteres Terminal und starte den Node mit folgendem Befehl:
ros2 run teleop_twist_joy teleop_node
Konfiguration
Die Konfiguration des Gamepads erfolgt in der Datei twist_joy.yaml
.
joy_node:
ros__parameters:
device_id: 0
deadzone: 0.05
autorepeat_rate: 20.0
teleop_node:
ros__parameters:
axis_linear:
x: 1
scale_linear:
x: 0.5
scale_linear_turbo:
x: 1.0
axis_angular:
yaw: 0
scale_angular:
yaw: 0.5
scale_angular_turbo:
yaw: 1.0
enable_button: 6
enable_turbo_button: 7
require_enable_button: true
Launch File
Um die zwei Nodes nicht per Hand smarten zu müssen, kannst du ein Launch File verwenden.
Erstelle eine Datei teleop_twist_joy.launch.py
im Ordner launch deines Paketes.
from launch import LaunchDescription
from launch_ros.actions import Node
from ament_index_python.packages import get_package_share_directory
import os
def generate_launch_description():
ld = LaunchDescription()
package_path = get_package_share_directory('ball_tracker')
twist_joy_config_file_path = os.path.join(package_path, 'config', 'twist_joy.yaml')
joy_node = Node(
package='joy',
executable='joy_node',
name='joy_node',
output='screen'
)
teleop_twist_joy = Node(
package='teleop_twist_joy',
executable='teleop_node',
output='screen',
remappings=[
('/cmd_vel', '/turtle1/cmd_vel')
],
parameters=[twist_joy_config_file_path]
)
ld.add_action(joy_node)
ld.add_action(teleop_twist_joy)
return ld
Hier mappen wir cmd_vel auf trutle1/cmd_vel
Turtlesim starten
ros2 run turtlesim turtlesim_node