🤖

【OpenRR】RustでRobot!#03 「実機(iRobot Create3)とopenrr-teleop」

2022/07/15に公開1

https://github.com/openrr/openrr


3-1. はじめに

こんにちは、Smile Roboticsの内山活です。iRobotのCreate3というロボットで遊んでみます。これ以外のロボットでも同じようにして簡単に扱えるので、買ったロボットや自作したロボットそれぞれと思いますが、是非試してみてください。

3-1-1. Create3とは

Create3iRobot社が販売している教育用のロボットでROS2に対応しています。Turtlebot4の足回りにも使われています。

3-1-2. セットアップ

まずはCreate3を動かせるように環境構築をします。基本的に公式のドキュメントに従って行きます。

Create3以外のロボットで行う場合は各々でネットワークの設定などをしていただければと思います。

3-2. openrr_apps_velocity_senderで動かす

openrr_appsのおかげでtomlでconfigを作成するだけでロボットを操作できます。既にある別のconfigファイルをもとに作成します。

create_robot_client_config_ros2.toml
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が動いてくれます。

3-3. openrr_apps_robot_teleopで動かす

velocity_senderで操作できるようになりました。しかし実機を動かす上では、画面を注視しマウスで操作するというのは少し不便です。そのためお馴染みのゲームパッドでロボットを操作できるようにします。そこで利用するのがrobot_teleopです。

ここでも同じようにconfigファイルを作ります。openrr-apps/configにある他のファイルに従って作成していきます。

create_teleop_config_ros2.toml
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

と表示されれば成功です。現状のモードがbasemove_base)であることを示しています。

右のトリガーと左のジョイスティックを同時に押すことでロボットが前進します。右のトリガーと右のジョイスティックではロボットが回転してくれます。

これでGamepadからOpenRRを通じてCreateを動かせるようになりました。

今回書いたconfigであるcreate_teleop_config_ros2.tomlの[control_nodes_config]ではmove_base_modeを指定していますが、これの正体はopenrr-teleopにあります。現在はopenrr-teleopには5つのモードがあります。今回使用したのはmove_baseモードのみですので、次節で各モードを試してみます。

3-4. openrr_apps_robot_teleopを試す

openrr_apps_robot_teleopは主にopenrr-teleopから成り立っています。各モードにそれぞれ1つのRustのファイルがあり、モードが例えばmove_baseのときはopenrr-teleop/src/move_base.rsが動きます。openrr-appsopenrr-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を使うことができます。以下のようにして設定します。

command/arc_transform.txt
openrr_apps_robot_command send_base_velocity 1.0 2.0 1.57 -d 3.0

まず、上記のように使用するコマンドを書いたテキストファイルを作ります。今回は円を描くようロボットが移動するようにします。

sample_teleop_config_urdf_viz.toml
[[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-appsREADMEにはPR2やUR10などのロボットアームをROS上で操作する方法が載っていますので、合わせてそちらでも遊んでみてください。

3-5. 結び

OpenRRを用いてiRobotのCreate3を動かしました。その延長線上としてopenrr-teleopも扱ってみました。今回の機能は比較的汎用性が高いものですので、ぜひ各自の環境で利用してみてくださるとうれしいです。

更新歴

2022-07-15 完成

Discussion

kokokoko

Create3の操作に関して分かりやすかったです!ありがとうございました。
ちなみにこちらのCreate3のバッテリの定格電圧や電流って分かりますでしょうか?バッテリ交換を考えております。