こんにちはinukaiです!
“Cで実装する「実践ロボット制御」“の連載をスタートしたいと思います!
本連載では、「実践ロボット制御」の基礎的なアルゴリズムを、CRANE-X7を題材にC言語で実装していきます。CRANE-X7の7自由度全てをいきなり使用するわけではなく、ロボット工学初学者の方でも理解しやすいように、2自由度・3自由度のロボットアームと見立てて基礎的なアルゴリズムを実装していきます。本連載でロボット工学および実装方法の基礎を身に着けることができましたら、みなさん自身で7自由度を使って動かしたり、色々な制御に挑戦してもらえたらと思います。
CRANE-X7を持っていない方でもある程度学習できるように、数値やグラフを用いた検証も行っていきますが、実際に動かして体験することで理解できることもあると思いますので、実機がある方はぜひ動かして貰えればと思います。
ということで、今回は今後実装する予定の紹介と開発環境のセットアップまでを行います。
実装予定のアルゴリズム
第Ⅰ部 位置制御に関する運動学と軌道生成
ここでは、ロボットアームの各関節が位置制御(角度制御)されている場合の問題を取り扱います。
平面2自由度・垂直3自由度ロボットの順運動学・逆運動学
最初は、関節変位から作業座標(手先位置)を求める順運動学問題と、その逆に作業座標から関節変位を求める逆運動学問題を取り扱います。これで、ロボットの手先をある位置に持っていきたいときに、どういった角度指令値を各関節に送ればよいか計算します。解いた結果を用いてロボットアームを動かして実際に望みの手先位置が実現できているか確認します。(「実践ロボット制御」第1章に対応する内容です。)
目標軌道の生成
ロボットの手先位置が望みのものとなるように軌道生成する方法を取り扱います。また、関節空間(関節変位)で目標軌道を作るのか、作業空間(手先位置)で目標軌道を作るのかによってどういった違いが生まれるかをロボットを動かしながら体験します。(「実践ロボット制御」第3章に対応する内容です。)
同時変換行列を用いた順運動学(運動学の一般的表現)
同時変換行列を用いた順運動学を学びます。「平面2自由度・垂直3自由度ロボットの順運動学・逆運動学」では、幾何学的(図形的)に計算しやすい形状のロボットアームの運動学問題を取り扱ったわけですが、実際に複雑なロボットアーム(関節が直行していなかったり、関節間のオフセットが計算しにくいような場合)では図形的な計算だけでは難しくなります。そういったときに便利なのが運動学の一般的表現になります。ここでは、同時変換行列を用いた順運動学を計算して、「平面2自由度・垂直3自由度ロボットの順運動学・逆運動学」で幾何学的(図形的)に求めたものと一致することを確認します。(「実践ロボット制御」第4章に対応する内容です。)
第Ⅱ部 ヤコビ行列と微分運動学
第Ⅰ部では各関節が位置制御されている場合を想定していましたが、ここでは、各関節が速度制御されている場合についての問題を取り扱います。
ヤコビ行列を用いた関節速度と作業座標系の速度の変換
関節速度と作業座標系の速度を表すヤコビ行列を計算し、望みの手先速度を実現するための関節速度を計算します。(「実践ロボット制御」第6章6.2節に対応する内容です。)
基礎ヤコビ行列の計算
ヤコビ行列を用いて関節速度と作業座標系の速度の変換を行う場合は、予め解析的にヤコビ行列を計算する必要があります。ここでは数値解として求めることができる、基礎ヤコビ行列を計算します。数値解として求めるメリットとしては、運動学の一般的な表現と同様に、ロボットアームが複雑な形状である場合や自由度が高い場合(解析的な計算が大変な場合)にも使用できるという点があります。(「実践ロボット制御」第6章6.6節に対応する内容です。)
各軸速度制御による軌道制御
各関節が速度制御された場合に「目標軌道の生成」で生成した軌道をどう実現するかを考えていきます。(「実践ロボット制御」第7章7.2節に対応する内容です。)
逆運動学の数値解法(ニュートン・ラプソン法)
第Ⅰ部では、逆運動学を解析解として求めますが、ここではヤコビ行列を用いることで、ニュートン・ラプソン法により数値解として逆運動学の解を計算します。
第Ⅲ部 動力学と運動制御
第Ⅲ部では、各関節が力制御(トルク制御)された場合について取り扱います。
ニュートン・オイラー法による逆動力学
逆動力学は、ある軌道を与えた際に、それを実現するために必要な各関節トルクはいくらであるかを計算することができます。ニュートン・オイラー法を用いて逆動力学の数値解を求めます。(「実践ロボット制御」第9章9.8節・第11章11.1節に対応する内容です。)
各軸フィードバック制御と逆動力学によるフィードフォワード制御
ニュートン・オイラー法による逆動力学から計算したトルクを各関節のモータに指令するだけでは、実際の軌道には誤差が生じます。ここでは、一番簡単なフィードバックを実装して、各関節がトルク制御されたロボットアームを制御します。
今後の内容を簡単に紹介したところで、次回以降のために開発環境のセットアップに移りたいと思います。
開発環境のセットアップ
用意するもの
- Ubuntu 18.04 LTSをインストールしたPC
- CRANE-X7
セットアップ
Ubuntu 18.04 LTSをインストールしたPCの準備
Ubuntu 18.04 LTSをインストールしたPCを準備してください。
Dynamixel SDKのインストール
CRANE-X7には、ROBOTIS社製のDynamixelシリーズのモータが使用されています。ターミナルを開いて下記コマンドを入力し、モータとの通信に必要なDynamixel SDKをホームディレクトリにダウンロードし、インストールを行ってください。
$ ~ $ git clone https://github.com/ROBOTIS-GIT/DynamixelSDK.git $ cd DynamixelSDK/c/build/linux64 $ make $ sudo make install
CRANE-X7とPCの接続
CRANE-X7の入門ガイドの「7.2 ハードウェアセットアップ」に従って、PCと接続します。
接続したら下記コマンドを実行して、書き込み権限を与えます。
$ sudo chmod 666 /dev/ttyUSB0
動作確認用プログラムのダウロードとビルド
本ブログ連載のプログラムのgithubリポジトリから、動作確認用のプログラムをホームディレクトリにダウンロードしてビルドします。
$ ~ $ git clone https://github.com/rt-net/robotics_from_scratch.git $ cd ~/robotics_from_scratch/ch01/build $ make
動作確認用プログラムの実行
$ ../bin/crane_x7_test
動かす前に必ず入門ガイドの「2 安全に関する注意事項 」をよく読んで安全に配慮してください。付属のアルミクランプを用いて剛性のある台座・机等にしっかりと固定し、衝突を避けるために周囲の人・物との距離を十分に広く取った上で、ロボットを動かしてください。当該製品および当ソフトウェアの使用中に生じたいかなる損害も株式会社アールティでは一切の責任を負いかねます。
動作確認用のプログラムを下記コマンドで実行します。実行するとロボットが動き出します。
$ ../bin/crane_x7_test
以下動画のようにロボットが動けばセットアップは完了です。
今回はここまでです。
それでは、次回から「実践ロボット制御」の内容をC言語で実装していきます!