flowchart TD
A[Start] --> B[Initialize ROS Node: joy_to_twist]
B --> C[Create JoyToTwist Object]
C --> D[Subscribe to /joy Topic]
D --> E[Advertise /cmd_vel_joystick Publisher]
E --> F[Enter ROS Spin Loop]
F --> G[Wait for Joystick Input]
G -->|Joy Input Received| H[joyCallback]
H --> I[Check if Axes Size is Valid]
I -->|Invalid| J[Ignore Message]
I -->|Valid| K[Convert Joy Input to Twist Message]
K --> L[Publish Twist Message to /cmd_vel_joystick]
L --> F
J --> F
必要なパッケージは以下
sudo apt-get install ros-melodic-joy -y
sudo apt-get install ros-melodic-joystick-drivers -y
sudo pip install ds4drv
PS4コントローラーを有線で接続すると、以下のデバイス名で認識される
/dev/input/js0
実行
roscore
rosrun joy joy_node
[ INFO] [1631175050.163510303]: Opened joystick: /dev/input/js0. deadzone_: 0.050000.
roslaunch joy_to_twist joy_to_twist.launch
sudo chmod 666 /dev/ttyACM0
rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0
sudo pip install ds4drv
1.「システム設定」等からPCのBluetooth機能をONにします。
sudo ds4drv
[info][controller 1] Created devices /dev/input/js0 (joystick) /dev/input/event17 (evdev)
[info][bluetooth] Scanning for devices
2.DS4の「PSボタン」と「SHARE」ボタンを同時に10秒くらい押し続けます。するとコントローラ背後のライトバーがチカチカッ、チカチカッという感じで白く点滅します。こうなったらもうボタンから手を話してOKです。
[info][bluetooth] Found device DC:0C:2D:CE:0A:07
[info][controller 1] Connected to Bluetooth Controller (DC:0C:2D:CE:0A:07)
[info][bluetooth] Scanning for devices
[info][controller 1] Battery: 87%
3.なおペアリング後にds4drvを終了すると、DS4のライトバーが青点灯のまま残ってしまいますが、PSボタンを10秒くらい長押しすると消えます。
4.実行
sudo ds4drv
source ~/catkin_ws/devel/setup.bash
roslaunch joy_to_twist joy_to_twist.launch
rosrun rosserial_python serial_node.py /dev/ttyACM0 _baud:=115200
linear:
x: 0.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0
PS4コントローラーで動作確認
- 左スティックを上に傾けると前進
- 左スティックを下に傾けると後退
- 右スティックを右に傾けると右旋回
- 右スティックを左に傾けると左旋回
- PS4コントローラーでロボットを走行させて、mapを生成
- 自律移動区間以外での人によるロボットの操作時
- 前進後退
joystick_.MOV
- 右旋回左旋回