【OpenRR】RustでRobot!#03 「実機(iRobot Create3)とopenrr-teleop」
3-1. はじめに
こんにちは、Smile Roboticsの内山活です。iRobotのCreate3というロボットで遊んでみます。これ以外のロボットでも同じようにして簡単に扱えるので、買ったロボットや自作したロボットそれぞれと思いますが、是非試してみてください。
3-1-1. Create3とは
Create3はiRobot社が販売している教育用のロボットでROS2に対応しています。Turtlebot4の足回りにも使われています。
3-1-2. セットアップ
まずはCreate3を動かせるように環境構築をします。基本的に公式のドキュメントに従って行きます。
Create3以外のロボットで行う場合は各々でネットワークの設定などをしていただければと思います。
openrr_apps_velocity_sender
で動かす
3-2. openrr_apps
のおかげでtomlでconfigを作成するだけでロボットを操作できます。既にある別のconfigファイルをもとに作成します。
move_base = "arci_ros2"
[openrr_clients_config]
[plugins.arci_ros2]
path = "../../target/release/libarci_ros2"
[[plugins.arci_ros2.instances]]
name = "arci_ros2"
type = "MoveBase"
args = """
topic = "/cmd_vel"
"""
Turtlebot3用の例を参考に書き換えました。といっても、不要なNavigation
に関する部分を削除しただけです。では次のコマンドをターミナルで実行します。この記事を通して、カレントディレクトリは冒頭のGitHubのリポジトリをクローンしたopenrr
ディレクトリであることを前提にしています。
cargo build --release --features ros2
cargo install --path ./openrr-apps
openrr_apps_velocity_sender --config-path ./openrr-apps/config/create_robot_client_config_ros2.toml
velocity_sender
が起動して次のようなウィンドウが立ち上がったことでしょう。
このスライドバーを動かすだけでロボットの操作ができます。
前回、Gazebo上にてTurtlebot3を動かしたときと同様です。/cmd_vel
を送ることでCreate3が動いてくれます。
openrr_apps_robot_teleop
で動かす
3-3. velocity_sender
で操作できるようになりました。しかし実機を動かす上では、画面を注視しマウスで操作するというのは少し不便です。そのためお馴染みのゲームパッドでロボットを操作できるようにします。そこで利用するのがrobot_teleop
です。
ここでも同じようにconfigファイルを作ります。openrr-apps/config
にある他のファイルに従って作成していきます。
robot_config_path = "create_robot_client_config_ros2.toml"
initial_mode = "base"
[control_nodes_config]
move_base_mode = "base"
1行目のcreate_robot_client_config_ros2.toml
は先程velocity_sender
用に作成したものです。
openrr_apps_robot_teleop --config-path ./openrr-apps/config/create_teleop_config_ros2.toml
のコマンドを実行します。
PrintSpeaker: base
と表示されれば成功です。現状のモードがbase
(move_base
)であることを示しています。
右のトリガーと左のジョイスティックを同時に押すことでロボットが前進します。右のトリガーと右のジョイスティックではロボットが回転してくれます。
これでGamepadからOpenRRを通じてCreateを動かせるようになりました。
今回書いたconfigであるcreate_teleop_config_ros2.toml
の[control_nodes_config]ではmove_base_mode
を指定していますが、これの正体はopenrr-teleop
にあります。現在はopenrr-teleop
には5つのモードがあります。今回使用したのはmove_base
モードのみですので、次節で各モードを試してみます。
openrr_apps_robot_teleop
を試す
3-4. openrr_apps_robot_teleop
は主にopenrr-teleop
から成り立っています。各モードにそれぞれ1つのRustのファイルがあり、モードが例えばmove_base
のときはopenrr-teleop/src/move_base.rs
が動きます。openrr-apps
はopenrr-teleop
などで実装されている機能のインターフェースを担っています。
先程は/cmd_vel
を用いて移動ロボットを扱いましたが、teleop
ではロボットアームなども動かすことができます。今回は前々回のようにurdf-viz
を用いていきます。
urdf-viz ./openrr-planner/sample.urdf &
openrr_apps_robot_teleop --config-path ./openrr-apps/config/sample_teleop_config_urdf_viz.toml
これを実行すると下の1行目のように出力されます。ゲームパッドの北ボタンを押すとモード切り替えとなり、出力が更新されていきます。PrintSpeaker: arm0
になったところで東ボタンを押すと数字が変わっていきます。これはサブモードの切り替えです。
PrintSpeaker: arm0
PrintSpeaker: base
PrintSpeaker: i k
PrintSpeaker: pose arm_collision_checked zero
PrintSpeaker: arm0
# ここまでは北ボタン(モード切り替え)
PrintSpeaker: arm1
PrintSpeaker: arm2
PrintSpeaker: arm3
PrintSpeaker: arm4
PrintSpeaker: arm5
PrintSpeaker: arm0
# ここまでは東ボタン(サブモード切り替え)
PrintSpeaker: base
最終の出力がbase
のときに先程と同じように操作するとロボットが動いてくれます。arm3
のときはロボットアーム部分の3つ目のリンクが動いてくれます。アームの状態を初期に戻したい場合は、pose arm_collision_checked zero
を選択した状態で有効スイッチと西ボタンを押すことでアームが動いてくれます。これはjoints_pose_sender
モードです。各モードにおける具体的な操作方法はopenrr-teleop
のREADMEにありますので参考にしてください。これ以外にも、もし特定のコマンドをゲームパッドから実行させたい場合にはrobot_command_executor
を使うことができます。以下のようにして設定します。
openrr_apps_robot_command send_base_velocity 1.0 2.0 1.57 -d 3.0
まず、上記のように使用するコマンドを書いたテキストファイルを作ります。今回は円を描くようロボットが移動するようにします。
[[control_nodes_config.command_configs]]
name = "arc transform"
file_path = "command/arc_transform.txt"
また、openrr_apps_robot_teleop
の引数として示すパスのファイルにコマンドの名前とコマンドを記したテキストファイルのパスを書きます。これにより、コマンドを実行するrobot_command_executor
モードが追加されます。モードを選択して次のように出てくれば成功です。
PrintSpeaker: command arc transform
これが選択された状態で有効スイッチと西ボタンを押せばロボットがぐるっと回ってくれます。テキストファイルに書くことのできるコマンドはopenrr_apps_robot_command
に準じていて、サンプルはここから見られます。特にopenrr_apps_robot_command execute_command -- date
のようにして、--
以下を、実行したいコマンドに置き換えれば、ターミナルで実行できるものであれば割り当てることができます。
move_base
モード
joints
モード
robot_command_executor
モード
ここではurdf-viz
を用いましたが、openrr-apps
のREADME
にはPR2やUR10などのロボットアームをROS上で操作する方法が載っていますので、合わせてそちらでも遊んでみてください。
3-5. 結び
OpenRRを用いてiRobotのCreate3を動かしました。その延長線上としてopenrr-teleop
も扱ってみました。今回の機能は比較的汎用性が高いものですので、ぜひ各自の環境で利用してみてくださるとうれしいです。
更新歴
2022-07-15 完成
Discussion
Create3の操作に関して分かりやすかったです!ありがとうございました。
ちなみにこちらのCreate3のバッテリの定格電圧や電流って分かりますでしょうか?バッテリ交換を考えております。