このページは 1999年9月9日〜11日にわたって行われた、
「第17回日本ロボット学会学術講演会」において発表した
(11日セッション3C3)、
「非RT-Linux を用いたロボット制御法に関する提案」をより実践的に解説・情報提供していくページです。
対象は
- 今時のパソコンで、制御をすることになったけど、Windows(98/ME/2000/NT/XP)でする気にはならない。
名前は聞いたことがあるけど、リアルタイムOSなるものをいきなり買う勇気はない。
Linux は使ったことがあるけど、RT-Linux や ART-Linux は名前しか聞いたことがない、という方。
- RT-LinuxやART-Linuxを使ってみようとしたけど、使い始めの敷居が高くて、
うまく導入できなかった、運用開始できなかったという方。
- 失敗する度に、OSごとさよならするのはもういやだ、という方。
- 動かすことがまず先で、制御周期の微妙なずれとか細かなことは気にしないという方。
- いずれはART-Linuxをつかってみたいけど、その前段階として。
です。
すでに RT-Linux, ART-Linux, VxWorks等 を使いこなして、現状に不満が無い方には、そのままご使用を続けることをおすすめします。
ここで解説する方法は、「導入・慣れのための手間」・性能比には優れますが、性能そのものは当然 RT-Linux, ART-Linux より多少は劣ります。
これから始める、という方には選択肢のひとつとして、おすすめの方法です。
そのへんのLinux系雑誌を一冊買ってくるだけで、制御環境が整うかもしれません。
そもそも、研究室のロボットの制御OSとして、それまで使用していたMS-DOSに別れを告げたことからすべては始まりました。
すでに、メジャーになっていた
RT-Linuxを採用することを当初検討していたのですが
(当時、
ART Linuxについてはまだ存在を知りませんでした)、
制御ルーチンをカーネル内で実行する、という点にある種の恐怖(食わず嫌い?)を抱いていました。
MS-DOS 時代にもプログラムのミスで、気付いたらハードディスクのランプが光りっ放しになってて、
あわててリセットしたけれどディスクの一部壊れていた、という経験をしていました。
RT-Linux の利点として、カーネル空間でプログラムを作成するため、ハードウェアに自由にアクセスできる、というものがありますが、
逆にいえば、ミスをすればいつでもシステムを破壊する危険性がある、ということです。
それに比べ、Linux をそのまま使う分には、メモリの扱いをミスしても、Segmentation fault で止まるので安全です。
(当然、I/Oの扱いを間違ったときにはだめですが、ポインタをミスってメモリを壊すことが失敗例として多いのではないでしょうか。
メモリ保護についてはART Linux でもその利点のひとつにはいっており、事前に存在を知っていたらいまごろは ART Linux を使っていたかもしれません)
当時、私の制御対象だった2脚歩行ロボットはいまだ発展途上であり、
時間にクリティカルな部分で行っている脚の運動制御アルゴリズムを頻繁に書き換えていました。
すでに実時間部分が固まっている用途ならまだしも、このような頻繁に変更する必要がある場合、危険性は高いものとなります。
さらに、大学の研究室というところは、プログラム作成の熟練者から、はじめてCのプログラムをつくるという初心者までが共同で実験を行う場です。
このような環境ではいくら上が注意しても、「巻き添え」という不幸が付き物です(一人ロボット1台なら別ですが...)。
それを考えるとRT-Linuxの採用にはためらいがありました。
そんなある日、カーネルのソースを眺めていて、もしかしたら、Linuxの機能には手を加えずに制御に使えるのではないか、と気付きました。
幾らかの試行錯誤と、実際のロボットの制御システムの組み上げを経て、十分使えるという結論に達したのでした。
この方法の特徴は
- Linux を機能的には変更しないため、任意のLinuxを使用することができます。
モトローラ系やSPARC系、組み込みのSH4系など、Linuxがサポートする全アーキテクチャが対象です。
また、最新のカーネルでも大丈夫(なはず)です。
(RT-Linux などはLinuxの改造という形で提供されるため、一部対象を追い掛けて提供になります)
- ごくふつうにプログラムを作成すればいいため、新しい制御環境に慣れる手間がそれほど大きくありません
(Linuxの使用経験があれば、手間は実質0)。
MS-DOSで制御したことがあるという場合にも比較的容易に制御ルーチンが移植できます。
- Linux をそのまま使うので、日常的に論文作成などに使う環境と共通化できます。
実際、論文執筆などで使っているコンピュータが制御システムの開発実験機だったこともあります。
- ちょっとしたミスでコンピュータをふっ飛ばす危険性がRT-Linuxにくらべ低く、
多人数で共用する時の技術レベルの違いによるリスクが少なくなります
(4年生からD3までいる研究室など)
- ただし、周期精度はRT-Linux,ART Linux には劣ります。
ハードウエアレベルの割り込みによる遅延は受けますし、まれに1ミリ秒とか周期が遅れることがあります。
この遅れた分を微分制御・積分制御などのサンプリング時間パラメータに反映させることで制御への影響が食い止められる、
また、間隔が多少狂うよりも、それ以外の外乱の方が支配的、といった場合には、あまり問題にはならないとおもいます。
まとめると、「楽をして、安全に、そこそこ十分な性能を得る」ということになります。
RT-Linux や ART-Linux を使用している方々やリアルタイムOSの専門家の方々にはいい加減な方法と映ると思いますが、
「目的に十分な性能なら、楽なほうがいいじゃないか」がこの手法のポリシーです。
OSなどという、多くの研究者にとって学術研究の土台にしかならない部分で「はまる」ことは時間の無駄と思います。
そういう意味からもRT-Linux や ART-Linux を簡単に使いこなせる、という場合には、それらを使用することを推奨しておきます。
こんな方法で十分な性能が得られるのかどうか、興味を持たれましたら、本ページのデータや実際にご自分でお確かめの上でご判断下さい。
それに必要な情報は公開しております。不明な点は、ご質問を受け付けております。
なんらかのハードウェアを制御するというとき、コンピュータのすべき仕事は、
- 計測:ハードウェアの情報を得ること
- 演算:しかるべき処理を行うこと
- 操作:ハードウェアに対して何らかの指令を送ること
です。
これらの仕事はいかなるコンピュータを使おうとも、いかなるOSを使おうとも必要となる機能で、
どんなコンピュータでも性能さえ足りていれば、やればできます。
もちろん、ハードウェアとのやり取りは、OSによって難易度が様々です。
その点、Linuxについては
デバイスドライバなしでも かなりのことが可能
ですし、デバイスドライバをつくることも難しくありません。
(くわしくは
デバイスドライバの作り方参照)。
次に問題になってくるのは
ということです。
近年の制御手法の多くは一定周期で制御則を実行するものが一般的です。
OSなしのシステムやMS-DOSのようなシングルタスクのOSでは、CPUを自由に使用できるため、この点問題がありません。
それに対して、マルチタスクのOSではCPUを使える時間が原則として不定であるため、うまくいかない可能性があります。
リアルタイムOSといわれるOSは、マルチタスクでありながら、この点を考慮して、ある仕事を確実にある時刻に(一定間隔も当然可)で
こなしたりすることが可能なようになっています。
RT-LinuxやART-LinuxはLinux本体を改造することで、リアルタイムOSとして使うことが出来るようにしたものです。
オリジナルのLinuxには、リアルタイムOSとしての機能がありません(一部、便宜は図ってくれますが)。
しかし、このことだけではLinuxがこのような制御に使えないということにはなりません。
RT-Linux, ART-Linux は「リアルタイム機能をつけて実行タイミングを保証」するものです(保証するよう努力)。
保証されなくとも、使える可能性はあるわけです。
事実、多少の周期のばらつきを容認できれば、十分つかえます。
このページは 「どのくらいつかえるか」を示し、多くの方の手間を省くことを目的としています。
ご注意
本手法は、熊谷自身はこれで十分やっていけると信じて、実際につかって成果を出した方法です。
ですが、上述の通り、確実さは保証されていません。
ディスクアクセスが頻繁であるなど、Linuxそのものへの負荷が大きい環境では十分な性能が出ないことも予想されますので、
大規模システムや信頼性重視のシステムに使用する場合はご注意下さい。
本ページの情報の利用について
情報公開のためにつくったページですので、本ページの情報のご利用に制限はございません。
ご利用に関する詳細につきましては、こちらをご覧下さい。
また、本ページの情報が研究上重要な意義を持つ場合がございましたら、
成果発表の際に引用などでご紹介いただければ幸いです。
発表済文献等:
- 熊谷正朗、江村超:「汎用Linuxによるロボット制御システムの開発」
日本ロボット学会誌 Vol20 No2, 157/163(2002)
- 熊谷正朗:
「Linuxでロボットを作る その1 Linuxによるロボット制御の基礎 」
LinuxJapan誌2001年7月号 Vol4 No7, 40/50(2001)
「Linuxでロボットを作る その2 ハードウェア操作のためのデバイスドライバ」
LinuxJapan誌2001年8月号 Vol4 No8, 58/70(2001)
「Linuxでロボットを作る その3 ロボット制御システムと歩行」
LinuxJapan誌2001年9月号 Vol4 No9, 39/46(2002)
履 歴
03/08/31 移転作業により一部修正。
03/08/31 「Linuxカーネル」によると、Linux2.6になると最初からHZ=1000で、カーネル再構築の手間も要らなくなるようです。
確認がとれ次第、報告します。