センサーを使ったロボットの自律制御

プログラムの中身をのぞいてみよう 前回は、教育用レゴ マインドストームNXTを動かすために、環境構築と、「2秒前進して止まる」という簡単なプログラムを作成しました。このプログラムを応用して、モータのパワーとタイマの時間を組み合わせると、ロボットを時間で制御することができるようになります。

軽部 禎文

2009年6月10日 20:00

プログラムの中身をのぞいてみよう

 前回は、教育用レゴ マインドストームNXTを動かすために、環境構築と、「2秒前進して止まる」という簡単なプログラムを作成しました。このプログラムを応用して、モータのパワーとタイマの時間を組み合わせると、ロボットを時間で制御することができるようになります。

 「2秒前進して止まる」プログラムは、4つのファイル( 1)forward.c、2)forward.h、3)forward.cfg、4)makefile)で構成されていました。それぞれ詳しく見ていきましょう。

 1)forward.cには、タスク(tsk0)の実装が記述されています。

ここではecrobot_set_motor_speed(出力ポート,パワー)という関数で、教育用レゴ マインドストームNXTの左右のモータを順方向に回転させています。
 また、パワーをマイナスにして逆回転させることもできます。systick_wait_ms(ミリ秒数)という関数は、実行中のタスクを、指定したミリ秒数だけ待たせます。タスク(tsk0)は、これらの組み合わせによって、2秒前進して止まるという動きを実現しています。

 2)forward.h には、タスク(tsk0)が宣言されています。

 3)forward.cfgには、タスク(tsk0)を実行するタイミングや優先度、最大スタックサイズなどを記述して、これを元にタスクを生成しています。
 「2秒前進して止まる」プログラムでは、プログラムを実行したときに、タスク(tsk0)を実行可能状態(TA_ACT)にして、タスクの優先度を最高優先度(1)に設定しています。スタックサイズは、1024バイトにしています。

●forward.cfgから抜粋
============
CRE_TSK(TSK0, { TA_HLNG | TA_ACT, TSK0, tsk0, 1, 1024, NULL });
============

 4)makefileでは、コンパイルするターゲットファイル名( 1)forward.c)と、タスクのカーネルオブジェクトを生成するときに参照する静的コンフィギュレーションファイル( 3)forward.cfg)を指定し、コンパイルして生成されるファイル名(forward_jsp)を定義しています。これにより、forward.cに記述されているタスクがforward.cfgファイルで定義されている方法によって生成されます。

 このようにnxtJSP環境でのC言語プログラムは、ソースファイルとヘッダファイルだけでは成り立たず、静的コンフィギュレーションファイルとの関係にも注意する必要があります。各ファイルの関係は図1-2をご覧ください。

※本記事で紹介しているソースファイルはここからダウンロードできます→(sample_code_090610.zip)。
 解凍したzipファイルの中の「forward」フォルダを参照ください。

 また、教育用レゴ マインドストームNXTを制御するための関数は、nxtOSEK/JSPをインストールしたフォルダ配下にあるecrobotというフォルダのecrobot_interface.h に宣言されています。

リモコンロボットか自律型ロボットか

 ロボットを制御する方法は2つあります。1つ目は、リモコンやラジコンのように人間の判断によってコントロールする方法、2つ目は、ロボット自身が判断して自律型でコントロールする方法です。制御ループの中に、人間の判断が入っているかいないかという点が大きな違いです。

 やはりロボットなら、自律型制御にしたいですよね。モータをタイマ制御で動かすだけでは「自律型」とは言えません。外界の情報を取得し、その情報を元にロボット自身が判断をして、自分自身をコントロールできるようにする必要があります。そのためには、センサーを使う必要があります。

 教育用レゴ マインドストームNXTには、タッチセンサー、光センサー、音センサー、超音波センサーが含まれていますが、まずは光センサーを使ってみましょう。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30