初めに
ROS2 Humble 上で、ラズパイにつないだルンバをJoystickで操作できるようにします。
準備
ラズパイ自動ログイン、リモートログイン
Ubuntu や ROS2 はラズパイとリモート操作用PCにインストール済みの前提で説明します。ラズパイは電源投入でログインさせるため、設定(settings)>users>の中で自動ログインに設定します。また、リモートログインするために、ラズパイに sshサーバー をインストールします。
sudo apt install openssh-server
sudo apt install avahi-daemon
リモートPCの端末からラズパイにログインする場合は以下の通りです。xx@yy はラズパイのユーザー名等です。通信がつながるとラズパイのpasswordを聞かれるので、入力します。ログイン出来たら、プロンプトが2行目のように変わります。
ssh xx@yy.local
xx@yy:~:$
ラズパイ終了する場合は、リモートPCからshutdownして下さい(本当に終了?とか聞かれないので注意)。
shutdown -h now
次に、ルンバのROS2ドライバで定番の AutonomyLab/create_robot から ROS2 の version に合わせたブランチ(foxy や humble)を選んで、github の指定通りラズパイにインストールします。
ラズパイのUSBとルンバの通信端子をつなぐTTL変換ボードの接続は色々な所で出ていますので、それを参考に接続します。以上で、準備完了です。
実行
### 指令待ち状態になるかの確認
ノートPCから ssh でラズパイに入り、ラズパイ上で以下を実行すれば指令待ち状態になります。
ros2 launch create_bringup create_2.launch
このとき、端末上で以下のメッセージを確認できれば接続はOKです。メッセージが大量に速く流れるので、途中でCtrl-Cで止めて確認してもいいでしょう。
... 大量のメッセージ
... Connection established.
... Battery level ##.# %
... Ready.
... 大量のメッセージ
接続されていない場合は、ルンバの電源ボタンを押すと、あっさり動いたりします。また、USBシリアル変換ボードがだめで接続されない場合があります(私は安物のボードを買って、時間を無駄にしました。ちょっと値段が高めのボードを買って使ったら、一発でつながりました)。この場合、「ルンバが power-off か確認しろ」、みたいなメッセージがでて、Retryを繰り返します。
接続確認後、指令を出して動かす
接続できたら、以下のコマンドで動くはずです(ラズパイでもノートPCでも、どちらでコマンドを発行しても動きます)。
ros2 topic pub /cmd_vel geometry_msgs/Twist '{linear: {x :0.1}, angular: {z: 0.3}}'
ここで、:(コロン)の後に必ず、半角スペースを入れる必要があります。入れないと、エラーが出ます。私はこれで、時間を無駄にしました。
### キーボードで操作する
コマンドラインではなく、キーボードで操作したければ turtlebot3 の teleop_keyboard が使えます。
sudo apt install ros-humble-turtlebot3-msgs
sudo apt install ros-humble-turtlebot3
export TURTLEBOT3_MODEL=burger
ros2 run turtlebot3_teleop teleop_keyboard
ジョイスティックで操作する
ジョイスティック用のプログラムをインストールします。
sudo apt install ros-humble-joy-linux
sudo apt install ros-humble-joy-linux-dbgsym
Joystick F310 をUSBで有線で接続します。認識されたかどうかは以下で確認します。ついでに、権限も付与します。jstest 実行中にスティックをいじって、値が変わればOKです。
lsusb # F310 が表示される
ls /dev/input/ # js0 が表示される
sudo chmod a+rw /dev/input/js0 # 権限付与
# 以下を実行し、Joystickを操作すると表示が変化
jstest /dev/input/js0
なお、F310のスティック操作とAxes番号との対応は以下の通りでした。ボタン操作とButtons番号の対応も調査したが、説明は省略します。
# Joystick と Axes 番号の対応(F310限定)
# 左スティック 左右 0 上下 1
# 右スティック 左右 3 上下 4
# 向こう側の側面 左 2 右 5
# 十字キー 左右 6 上下 7
端末で以下を入力すると、ジョイスティック操作は /joy として発行されます。
ros2 run joy_linux joy_linux_node
別端末で以下を入力すると、発行内容が確認できます。
ros2 topic echo /joy
このままでは、ルンバは操作内容を受け取れないので、/joy の情報を /cmd_vel へ変換する必要があります。プログラムは、@moriitkys(CHE MOT) さんの ROS2 Joy Stick Controller を使って Turtlesim を動かす の記事が参考になります。ノートPC上で以下の操作をすればジョイスティックでルンバが動きます。
cd ~
mkdir ~/rmba_ws/src
cd ~/rmba_ws/
ros2 pkg create --build-type ament_python --node-name joy_translate_node joy_translate
...
... cd で該当フォルダに移動し、
... joy_translate_node.py に
... 適当なプログラムを書き込み、保存
...
cd ~/rmba_ws/
colcon build
source install/setup.bash
ros2 run joy_translate joy_translate_node