Unitree社は、Unitree A1やGo1をはじめ様々な四足歩行ロボットを研究開発・販売を行う企業で、量産型機の販売はBoston DynamicsのSpotを超える勢いがあります。価格もBoston Dynamicsに比べれば圧倒的に安価であり、個人でも購入できるくらいです。
従来は、実機がないために実機実験ができず、シミュレーション実験で完結しているものが大半でした(少し大げさかも)。今は、歩行可能な実機を使って実験できる時代が来たのです。これは、大きな革命だと思います。
では、今後、すべてのロボットの実験が実機実験に置き換わるのでしょうか?
いいえ、それは絶対にありえないでしょう。まず、ロボットの実験でシミュレータを用いる大きな理由の1つに、実機の耐久性の問題があります。例えば強化学習実験では、何万回にもおよぶ反復的な学習が必要となりますが、もし実機で反復的な動作を何万回も繰り返したらほぼ確実に故障するでしょう。また、シミュレータの時間の進みを高速化したり、大量のロボットを読み込んで学習させることで、実機を用いた実験に比べ圧倒的に高速に実験を進めることができます。このような理由から、シミュレーション実験は今後もなくなることはないでしょう。むしろ、シミュレータの精度向上により実機実験が不必要になると考えます。
であれば、実機は必要ないのでは?なぜ、実機が手に入るのが画期的なのか?という純粋な疑問が生じるのではないでしょうか?
あくまでも私の考えですが、シミュレーション実験は、実機実験の代替なので、シミュレータ内に構築した仮想ロボットは、実機ロボットに限りなく近い特性を持つ必要があります。そのような仮想ロボットを作るには、実機が必要です。
その点で、四足歩行ロボットの実機が容易に手に入るようになったのは、実機の特性を確認しながら仮想ロボットの構築が可能になるので、先程も述べたとおり大きな革命なのですが、実機と同様の動作をさせるには、実機と同等の歩行制御プログラムを作成する必要があります。流石に制御プログラムまで公開してくれる企業はほぼないので、自分でなんとかしないといけないんですよね。
私が調べた限りだとUnitreeは歩行制御のAPIは公開していますが、具体的な制御プログラムは公開していません。結構困っていたので、ネットサーフィンしていたら、大変貴重なリポジトリを見つけました。そのリポジトリとは下に示したa1_sim_pyです。
これは、Go1ではなくA1の歩行制御を扱っており、Gazeboに読み込んだ仮想A1をROSを介してジョイスティックから歩行制御できるというものです(公式のものではありません)。使用されているスクリプトは分かりやすく、複雑なライブラリを用いているわけではないため、歩行制御のプログラムを作成する際の大きな手がかりにできそうです。
まずは、このリポジトリが提供する技術が何かを知ることが第一だと思いますので、とりあえず遊んでみようと思います。そこで本記事では、このリポジトリのインストール方法と使い方にフォーカスし、解説していきます。
※a1_sim_pyには暫定リポジトリとの記載があるので、作成者により削除される可能性があります。
インストール方法
このプログラムを使うには、インストールする環境にROSがインストールされている必要があります。
すでに、ROSがインストールされていれば導入は簡単ですが、インストールされていない場合は、ホストPCで使おうとすると面倒な作業が必要になります。
そこで、Dockerを使って用意に試せるプログラムも紹介しますので、ROSがインストールされていない方は、そちらを試してみてください。
ホストPCバージョン
ホストPCにnoeticがインストールされていることを仮定して話を進めていきます。以下のコードを順番に実行してください。
# 必要に応じて以下のプログラムを実行してください
mkdir -p ~/catkin_ws/src
# catkin_ws/srcフォルダに移動し、a1_sim_pyのリポジトリをインストールします
cd ~/catkin_ws/src
git clone https://github.com/lnotspotl/a1_sim_py.git
catkin_init_workspace
cd .. && catkin_make
source devel/setup.bash
roscd a1_controller/scripts && chmod +x robot_controller_gazebo.py
roscd a1_joystick/scripts && chmod +x ramped_joystick.py
apt update
# ジョイスティックのコントローラをインストールします
apt install -y ros-noetic-ros-controllers
apt install -y ros-noetic-joy
ホストPCにインストールする場合の手順は以上です。
Dockerバージョン
Dockerで試す場合は、DockerからGUIが起動できるnoeticインストール済みのコンテナイメージを使用する必要があります。そのようなコンテナイメージを簡単に用意できるリポジトリを発見したので、それを使用します。
まず、以下のコードをホストPCのターミナルで実行し、コンテナを作成します。
git clone https://github.com/turlucode/ros-docker-gui.git
cd ros-docker-gui
make cpu_ros_noetic
xhost local:root
docker run -it --privileged --net=host --ipc=host \
--device=/dev/dri:/dev/dri \
-v /dev:/dev \
-v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=$DISPLAY \
-v $HOME/.Xauthority:/home/$(id -un)/.Xauthority \
-e XAUTHORITY=/home/$(id -un)/.Xauthority \
-e ROS_IP=127.0.0.1 turlucode/ros-noetic:cpu
コンテナを起動したら、コンテナ内のターミナルで、以下のコードを実行します。
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
git clone https://github.com/lnotspotl/a1_sim_py.git
catkin_init_workspace
cd .. && catkin_make
source devel/setup.zsh # bashではないので注意
roscd a1_controller/scripts && chmod +x robot_controller_gazebo.py
roscd a1_joystick/scripts && chmod +x ramped_joystick.py
apt update
apt install -y ros-noetic-ros-controllers
apt install -y ros-noetic-joy
インストールの手順は以上です。
追記
コンテナを終了したあとに、続きから作業する場合、コンテナを削除していなければdocker startでコンテナを起動できますが、場合によって、以下のような記載が表示され、起動できない可能性があります。
$ docker start -i [コンテナID]
-->DOCKER_USER* variables not set. You need to set all four! Using 'root'.
Setting up environment for user=root
No protocol specified
Unable to init server: Could not connect: Connection refused
You need to run terminator in an X environment. Make sure $DISPLAY is properly set
この場合は、docker runの直前に使用した、xhost local:root
を再度実行してください。そうすれば、docker startができます。
実行
xboxコントローラーなどをPCに接続します。
以下のコマンドを実行すると、Gazeboが起動します。
roslaunch a1 run_robot_gazebo.launch
最初は、ロボットがひっくり返っているので、マウスを使ってロボットの位置をずらしたり回転させたりして、立たせてあげます。
あとは、ジョイスティックを操作すれば、何らかの動作をしてくれるはずです。
歩かせたいときは、コントローラのBボタンを押してから、ジョイスティックを操作します。