写真 1 2 台のジョイスティックとペダル 左右両用のジョイスティック 先日、 PC 用ゲームの店で、スティック部がほば左右対称なス ティックをみつけた。しかし、スティックだらけの作業環境にこ れ以 . ヒスティックを持ち込むこともできず、導入を医っている。 現在の環境でうまく歩けなければ、またもや道具のせいにして導 入するかもしれない。 する ) に加え、独立した 1 軸のスライダー ( 工ンジンのス ロットルとして使用 ) をもつ。つまり、プログラムからみ た場合は、 1 台で 4 軸のジョイスティックとして扱われる。 Thrustmaster のジョイスティックは、さらにスティック 先端にハットスイッチが 1 っと 4 個の独立したスイッチ、 ジョイスティックの本体側に数個のスイッチがある。 私はこのスティックを 2 台使うことにした。同じもの を並べても芸がないし、 2 台を識別するのカⅷ倒になるた め ( プログラムは、右手用と左手用を識別しなければなら ない ) 、同じシリーズの Fox 2 pro と Afterburner Ⅱを 選んだ ( 写真 1 上 ) 。どちらもスティック部分の構成は同じ ームで使うべダルには、自動車用と飛行機用がある。一般 だが、べース部分が異なっている。 Fox 2 pro は、べー 的な自動車用は、アクセルとプレーキの独立した 2 個のペ ス部にコンパクトなスライダーと 3 個のボタンカイ寸いてい ダルをもつ。飛行機用は、ラダー制御のみの 1 自由度のペ る。 Afterburner Ⅱは、ちょっと気合の入ったスロット ダルと、加えて個々のペダルを別々に操作できる 3 自由度 ルレバーを備え、このスロットルレバーに 4 個のボタンが のものがある。 こではもちろん、 3 自由度の飛行機用を 付いている。いまのところ、どちらのスティックもスロッ 使っている。 CH Pro pedals という製品だ ( 写真 1 下 ) 。 トル部を使う予定はないが、将来、制御体系を変えたり拡 ジョイスティックの言リ 張するときには使うことになるだろう。 この 2 台は、見た目はかなり異なるが、もっている制御 PC にジョイスティックを接続する場合、ゲームボート 要素はほとんど同じである。違いは、ボタンの総数 (Fox 2 では接続できる数などに制限があったが、 USB 接続なら多 Pro が 7 個、 Afterburner Ⅱが 8 個 ) と、 Afterburner 数のコントローラをつなぐことができる。この点は便利な Ⅱにはスロットルレバーにスティックのひねりと同じ機能 のだが、プログラムの作成時にはちょっと頭を使わなけれ をもつレバーがある ( どちらを使うかは、スイッチで切り ばならない。現在作っているプログラムのように、似たよ 替える ) 点くらいだ。 うな構成のコントローラを同時に複数使う場合、それぞれ を適切に識別する必要がある。 これら 2 台のスティックは、スプリングによりニュート 以前に紹介したが、 Windows の DirectInput 機能でジ ラルに戻る形式である。本当は、モーターを組み込んだフ ョイスティックを使う場合、初期化処理の際に、接続され ォースフィードバック・タイプカ駄しかったのだが、あい ているデバイスの列挙 ( コールバック関数の呼出し ) がお にく品切れだった。 こなわれる。以前のプログラムではコントローラは 1 台し ペダルの導入 か使わなかったので、コールバック関数は最初に示された コントローラを変えることにより、 Windows 側のプロ デバイスについて、それを管理するためのデータを取得す グラムも変更しなければならない。ついでに、以前から考 るだけだった。しかし、今度は 3 台のコントローラを使う えていたペダルも組み込むことにした。 PC に接続してゲ ので、それぞれを適切に識別しなければならない。複数の 150 UNIX MAGAZINE 2006 . 3
飛行機のペダル 飛行機のラダーは、連動して動作する左右のペダルによって操 作する。右側を奥のほうへ踏み込むと左側が手前に出てくる、つ まり、左右のペダルが逆方向に動く樹冓になっている。 現在の飛行機は、左右のペダルの連動によるラダー操作に加え て、個々のペダルを下へ踏み込むことで、着陸時に車輪にプレーキ をかけるという仕組みになっている。 3 自由度のペダルはこのよ うな構造になっており、左右が〕る前後の踏込み動作と、個々 のペダルの踏込みで、自由度 3 のコントローラとなっている。 ペダノレ・コントローラ コントローラが接続されている場合は、列挙の際に各コン トローラごとにコールバック関数カ鮃び出されるので、そ れぞれの管理情報を取得したあと、個別に保存する必要が ある。また、呼び出された回数を数えれば、コントローラ の数 ( 管理情報の数 ) カ吩かる。 現在のプログラムは、コントローラが 1 台なら PlaySta- ti 。 n 用コントローラであるとみなし、以前と同じ処理をお こなう。 3 台構成であれば、以前とは異なる処理に進む。 3 台の場合は、個々のジョイスティックの属性データ ( 軸数、 ボタン数など ) にもとづいて、左右のスティックとペダル を識別している。まったく同じ構成のジョイスティックを 2 台接続すると、オペレータか左右のスティックを明示的 に示さなければならず、設定操作カⅷ倒になる。 新しい制御体系 PC 用の飛行機向けジョイスティック 2 台とペダルを導 入したことで、以前よりも緻密な操作ができるようになる はずだが、それ以上の大きな変化がある。コントローラの 自由度が大幅に増えるのだ。 2 台のジョイスティックは、そ 左右のペダルは、個々に踏み込むことができ、さらに 左右が連動して前後に移動できる UN 工 X MAGAZINE 2006.3 連載 / ロボットのある暮らし 理想と現実 ちゃんとしたプログラムにするには、ジョイスティックの数、 個々のスティックの構成、制御モデルなどを柔軟に言定できるよ うにすべきである。たとえばロボット側には、ジョイスティック 構成を言杢し、それを制御モデルに対応づけるケイバビリティ・ ファイルを用意するといった方法カ考えられる。そして PC 側の 制御プログラムにも同等なファイルを用意し、 PC 側とロボット 側で制御方法についてネゴシェーションをおこなうのだ。 そうすべきことは分かっているが、プログラムの構築カリ那的 におこなわれているため、このような構造にするゆとりがない。 バージョンが 10 号くらいになったときには、よⅵ東された構 成になっているかもしれない。 表 1 飛行機用ジョイスティックとペダルによる期本系 ( 左右の個 乍 ) 操作 スティック左右 スティック前後 スティックひねり ペダル踏込み トリガーボタン ロポットの重乍 膝の屈伸 ( 以前と同じ ) くるぶしの前後移動似前と同じ ) 股関節のひねり ( 以前はハットスイッチ上 股関節の側方への曲け動作 ( 以前はハット スイッチ左右 ) くるぶしの月」動作似前と同じ ) れぞれ 4 自由度である。そのうち、 1 自由度はスロットル なので、片手だけでは操作できない。それでも、以前の片 手で 2 自由度から、ひねりを加えて 3 自由度になった。 さらに、ペダルの追加である。左右のペダルの踏込みは 別個に扱えるので、片手片足で 4 自由度となる。これによ り、以前はハットスイッチで操作していた股関節とくるぶ しの制御が、連続値が得られるスティックやペダルで操作 できることになる。 ペダルユニットは、左右の個々のペダルの踏込みとは別 に、左右のペダルが連動する前後方向への踏込み ( 飛行機 の操縦のラダー操作 ) がある。これは左右個別の操作では ないが、ロポットの挙動制御には便利に使えるだろう。 これらの操作要素を活用し、いままで以上に扱いやすい 下半身の操作系を考えてみた ( 表 1 ) 。以後、 PIayStation コントローラによる制御体系には見切りをつけ、この操作 体系で動くようにプログラムを作りこんでいくことにした。 これまで、ハットスイッチでおこなっていた脚のひねり と側方への持上げの制御が、スティックのひねりとペダル 踏込みになったことにより ( 図 3 左、中 ) 、以前あったニュ ートラル位置に戻すという操作はなくなった。スティック 151
図 2 新たな本系 プログラム コックピット Windows 側 UDP: 操縦データ、 センサーなど TCP: モード設定など ロポットの NetBSD ロポットデーモン プログラム 手動制御など テ、 / ヾッグ、 標準入力 : マンドを送るといった状況では、複数のコマンド行をまと めて受信することがある。 入力できない・・ UNIX MAGAZINE 2006.3 うことだ ) 。 していこうと考えている ( つまり、当面は何もしないとい こなっていない ) 。これらの不備に関しては、おいおい対処 分だ ( コネクションの切断などについて、適切に処理をお 中で TCP コネクションを切断した場合の対処なども不十 ができないという構造になってしまった。また、処理の途 ログラムからの接続を待っている状態では、コマンド入力 グラムは、プログラムを起動したあと、 Windows 側のプ このような事情により、現在のロボットデーモン・プロ る入力待ちに進む ) 。 がないので、 Windows 側の当た態に関係なく、 select によ いのだ (UDP のみの場合は、接続を確立するという手順 接続したあとでないと、標準入力の受付けはおこなわれな の確立後である。つまり、 Windows 側のプログラムから グラムの実行がこのループに進むのは TCP コネクション ープが始まってからである。 TCP を使用する場合、プロ select によって標準入力を受け付けるのは、入力処理ル ドを受理できないケースがあるのだ。 た。しかし、 1 つ見落しがあった。標準入力からのコマン QUIT コマンドでプログラムを終了させられるようになっ SLEEP コマンドを入力してロボットの動作を止めたり、 受理できるようにしたことで、たとえは驃準入力を使って select を使用し、 TCP 、 UDP 、標準入力を並行して 連載 / ロボットのある暮らし 歩けないのは道具のせい ? 149 とスティックのひねり ( 飛行機の場合はラダーとして使用 ー殳に飛行機用のジョイスティックは、前後左右の 2 軸 機用ジョイスティックを使うことにした。 イッチ類を操作できるものとして、 Thrustmaster の飛行 左手で握っても比較的違和感が少なく、なるべく多くのス げた。この問題はいまだに解決していないのだが、今回は、 左右の手で使える PC 用ジョイスティックがないことを挙 以前に、 PlayStation 用コントローラを使う理由として、 ある。より自由度の高い制御系としたかったのだ。 ほかに、コントローラを変更したもう 1 つの正当な理由が とにした。、、歩けないのは道具が悪いから " という理由の ントローラを、 PC 用のジョイスティックに取り替えるこ それまで使ってきた PlayStation 用の 2 スティック・コ うまく歩けないのは腕ではなく道具のせいと決めつけ、 ジョイスティックの変更 はずがないという糸喆侖にいたったわけだ。 からなのかは分からないが、このた態ではまともに歩ける る。もともとの仕様なのか、使い込んでくたびれた機器だ ニュートラルに戻したときで、得られる数値が違うのであ とえば前側からニュートラルに戻したときと、後ろ側から クの動かし方によって、得られる値カ畯わってしまう。た ということができない。また内部にガタがあり、スティッ 度が悪い。レバーをすこし動かして、関節を彳少に動かす まず、 PlayStation 用コントローラは、スティックの感 の欠如だと思う。しかし、道具が悪いような気もするのだ。 たしかに、うまく歩けない最大の理由は、練習不足や能力 がニュータイプではないことを認めるのは難しいものだ ) 。 の原因のせいにする人は多いが、私も例外ではない ( 自分 努力不足が主因であっても、それを素直に認めず、何か別 物事がうまくいかないとき、たとえ自分の能力の欠如や というのが、実際に操作してみての感想である。 したところで、とても歩けるようになるとは思えない・ 単に達成できるわけはない。とはいうものの、、、いくら練習 かかるのだから、ジョイスティックを使った歩行カそう簡 く歩けない。赤ん坊だって歩けるようになるまで何カ月も を始めたと書いた。しかし、多少練習してみたものの、うま 前回、プログラムの最低限の機能力働作し、歩行の練習
連載 ロボットのある暮らし 榊正憲 歩行プログラムを作る ( 5 ) 新たな制御体系 図 1 ネットワーク言のダイアログ TCP と UDP 前回、一部のコマンドの送信を TCP でおこなうように 変更すると述べた。これにより、 PC 側とロポット側のプ ログラムの双方で、 TCP と UDP の 2 系統の通信チャネ ルを扱うことになるので、プログラムの構成は大きく変わ ってくる。サービスを識別するためのポート番号について は、 UDP と同じものを TCP でも使う。 コックピット 2 型 Windows 側のコックピット・プログラムの起動時には、 同じポート番号を使用し、 2 つのソケットを準備する。接 続相手もポート番号も同じだが、プロトコルが UDP のも のと、 TCP のもの ( リスト 1 ) である。 プログラムで TCP を使うかどうかは、ダイアログで設 定できるようにした ( 図 1 ) 。 TCP を使わない場合は、以 前と同じように、すべてのコマンドを UDP で送ることに なる。 ソケットが 2 セットになるが、コマンドの送イ言処理は単 純だ。送信するコマンドごとに、 UDP と TCP のどちら を用いるかは決まっており、たとえばインターバル・タイマ ーによるジョイスティック・データの送信であれば UDP を使用し、制御ボタンのクリックやダイアログ・ポックス による定変更には TCP を使う。したがって、コマンド 文字列を生成し、送信の際に TCP を使うか UDP を使う かを指定するだけでよい。ネットワーク設疋のダイアログ で TCP を使用しないようにもでき、この場合はプロトコ ルの指定にかかわりなく UDP で送る。 146 ネプトワ”クの設定 マコマンドを TCP で送信 ロポットのポート番号 5005 UNIX MAGAZINE 2006 . 3 される。実際には同じ解釈ルーチンカ駛われるので、プロ こなわれるが、どちらも同じように解釈され、適切に処理 られ、 TCP では状態の変更や制御パラメータの通知がお る ) 。 UDP ではジョイスティックによる制御コマンドが送 なる (TCP を使うかどうかは、実行時オプションで指定づー のソケットを用意し、その両方で受信を待ち受けることに ロボットデーモン側は、 UDP 用のソケットと TCP 用 ロホットデーモン 2 号 義するのカⅷ倒といったところだ。 信の信頼性は上げたいが、双方のあいだで厳密な状態を定 はまだこのような機能は実装していない。とりあえず、通 対して肯定や否定の応答を送るべきなのだろうが、現状で のところ用途は未定である。本当なら、コマンドの伝送に ータの取得に使う予定だ。一方、 TCP の受信機能は、いま 以前説明したように、 UDP の受信は画像やセンサーデ たときに、この関数が自動的に呼び出されるはずだ。 数を用意する。これで、なんらかの TCP データを受信し CAsyncSocket クラスの通知機能を使い、 OnReceive 関 ことを TCP 用のソケットについてもおこなう。つまり、 データの受信では、 UDP の受信ルーチンの処理と同じ 亠 ~ セら ( 0 を指定するとデフォルトボートを使用 )
図 3 撕督本系の変更 ジョイスティックのひねりで大腿を回転させる 個々のペダルの踏込みで脚を側方に持ち上げる 左右連動のペダル操作 ( ラダー操作 ) で やペダルには、明確なニュートラル位置があるからである。 また、いままでになかった制御要素を追加することにし た。左右のペダルの連動動作 ( ラダー操作 ) である。これ は全体で 1 自由度なので、左右個別に割り当てることはで きないが、逆に、左右で連携して動かす用途には適してい る。今回は、脚の側方への動作を、左右で連携させる用途 に使うことにした。ペダルを操作すると、片方の脚は側方 外側に動き、反対側の脚は内側に同じだけ動く。つまり直 立状態でこの操作をすると、両足を接地させたまま、腰を 左右に動かすように姿勢力化する ( 図 3 右 ) 。 これは、静歩行の際の片足に重心を移すという操作にな る。以前のハットスイッチによる操縦では、この操作が意 外と難しかったので、独立した制御操作としたのである。 ( さかき・まさのり ) ■ Web サービスおよび季刊誌への移行のお知らせ■ いつも弊誌をこ愛読いただき、まことにありがとう こざいます。 1 986 年の創刊以来、 ] 9 年余にわたり、 UNIX 専門 誌としてこ愛読いただいてきた「 UNIX MAGAZINE 」 は、 2006 年 3 月 ] 8 日発売号をもちまして月刊誌から Web サービスおよび季刊誌 ( 年 4 回 : 3 月、 6 月、 9 月、 1 2 月刊行 ) に形態を変更することにいたしました。 創刊当時と現在では、 IJN Ⅸを囲む状況は大きく変 化しました。かっては、先駆的な研究者やハイエンド のユーサーを中心としたコミュニティのみのものでし たが、今日では社会の情報技術基盤となっています。 そのなかで、。月刊誌 " という形態で UN Ⅸに関する 情報提供をおこなう役割は、ひととおり果たしたもの と判断するにいたりました。今後は、オープンソース・ 152 ソフトウェアに関する各種情報、プログラミング技術、 資格試験情報や技術者育成などに役立つ記事をとり あげ、 Web サービスと季刊誌の特性を活かした情報 提供をおこなう予定です。 Web サービスでは速報性 や検索のしやすさを活かし、さらに、企業との密接な 関係にもとづいた種々の情報を提供します。また、季 刊誌では、技術記事に加えて業界動向など、企業活動 と密接に関連する、深く切り込んだ情報も提供する予 定です。 ながらく弊誌をこ愛読いただいた読者の皆様に、心 より感謝いたします。今後とも、 Web サービスおよび 季刊誌をこ愛読くださいますよう、お願い申し上けま す。 UNIX MAGAZINE 編集部 UN 工 X MAGAZINE 2006.3