ロボットの話題を聞くことが増えたが、判断と制御、駆動を備えたロボットを作るのはかなり骨が折れる。その負担を軽減するフレームワークが「ROS」(Robot Operating System)だ。
最近、ロボットが話題に上る事は多い。MONOistでもロボットフォーラムというカテゴリが用意されるほど、様々な動きが起きている。こうした事もあって、例えば「Pepperに『ラジオ体操第2』を実演させる」なんていう、プログラミングプラットフォームとしての使い方も本格的になりつつある。
上で紹介したPepperプログラミングの大塚氏には取りあえずPepperで「ラヂオ体操第4」の実演もお願いするとして、もう少し“ロボットを作る”ための基本的な話をしたいと思う。
短期集中連載:ROS(Robot Operating System)概論
簡単な自走式自律制御ロボットの制作を考えてみる。
CMOSセンサーで目標を取り込み、画像処理を使って「自分より右か、左か、正面か」の3つの状態を判別できるものとする(実際はこれが結構大変なのだが、あくまで例なのでこれはすごく賢いインテリジェンス機能がカメラに入っていて結果だけ返ってくる、という事にしてほしい。これを言い始めるとキリが無いからだ)。
この判断条件に基づき、走行方向を決定することにする。走行システムは4輪で、後輪駆動、前輪操舵であるとする。まずは駆動制御なし(一定速度で走りっぱなし)で、操舵だけをステッピングモータで行う形にしよう。
するとハードウェアは図1の様な簡単なものになる。すると、プロセッサの中で動く制御ループは下のような簡単なもので済む。
while() { direction = input_from_camera(); // カメラから方向情報を取得 if ( direction == DIRECTION_RIGHT ) // 目標が右 output_motor( STEERING_RIGHT ); // ステアリングも右に else if ( direction == DIRECTION_LEFT ) // 目標が左 output_motor( STEERING_LEFT ); // ステアリングも左に else // 目標が真っ直ぐor取得失敗 output_motor( STEERING_STRAIGHT ); // ステアリング中立 }
実際には、カメラからの入力やステッピングモータの制御にどのくらいの時間がかかるかで制御ループの所要時間が決まるので、その制御ループの時間で間に合う程度に後輪の速度を落としてやる必要があるが、本質的には単純で、1つの制御ループの中で全体が収まる事になるし、プロセッサの処理性能的には8bitのMCUで十分間に合う。
Copyright © ITmedia, Inc. All Rights Reserved.