SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

[組込み開発入門] ロボットを作ろう

【第4回】レゴマインドストームNXTでライントレーサを作成しよう

レゴマインドストームNXTでロボットプログラミング


課題と改善案

 今回の設計では、以下の機能を全て1タスクで行うような設計としました。

  • バンパースイッチ(トレースの開始・停止)の監視
  • 真下の明るさを検知するライト(黒、白の読み取り)の監視
  • タイヤの駆動制御

 このため、本来は、切り離して個別に管理できるはずの機能同士が、相互に影響を及ぼし合うことになるという課題を残すことになります。

 具体的には、タイヤの駆動制御機能と、バンパースイッチの監視機能は、本来であれば、個別に管理できるものであり、相互に影響を及ぼす必要がないものです。しかし、今回の設計では、これらが相互に影響を及ぼし合うため、以下の弊害が生まれます。

  • タイヤ駆動制御機能で行っているwait時間を伸ばすことで、バンパースイッチ監視間隔が伸び、バンパースイッチが押されたというイベントを取りこぼす(※注)可能性が高まります。
※注:
イベントを扱う場合、本来であれば、イベントを取りこぼさないために、イベントはキューイングします。

しかし、今回は、リアルタイム性に着目したものであるため、イベントのキューイングは省きました。

なお、今回の設計において、イベントのキューイングを行ったとしても、wait時間を伸ばした場合、イベントの取りこぼしは発生しませんが、イベントに対する反応時間の低下という弊害が生まれます。

 実際に、タイヤ駆動制御機能で行っているwait時間を100ミリ秒から500ミリ秒に伸ばした場合の画像をご覧ください。バンパースイッチが押されたというイベントを取りこぼしている様子を、実感として、感じていただけるかと思います。

コラム:開発時のFAQ

【Q1】リセット方法は?(ファームウエアアップデートモード)

 【A1-1】NXTの電源投入後、本体の背面のボタンを5秒以上長押しします。

【Q2】リセットされません。

 リセットはNXTの電源が入っていないと行えません。電源が入っていてもバッテリーや電池が劣化しているとリセットされないことがあります。

 【A2-1】バッテリーをフル充電後、NXTの電源を入れてリセットしてみます。

 【A2-2】新品の電池に入れ替え、NXTの電源を入れてリセットしてみます。

【Q3】SAM-BA起動時に「Select the connection」コンボボックスに「\usb\ARM0」が表示されません。

 【A3-1】以下の手順で接続し直してみます。

  1. NXTが接続され、電源が入っていることを確認します。
  2. SAM-BAのバージョンが2.6になっているか確認します。バージョンが違う場合は2.6を再インストールします。
  3. デバイスマネージャでNXTのドライバを確認します。下の画像の(○)のようになっているか確認します。なっていない場合はデバイスマネージャからドライバの更新を行い、「atm6124...」に変更します。
  4. (○)USBコントローラに「atm6124.Sys ATMEL AT91XXXXX Test Board」が存在している
    (○)USBコントローラに「atm6124.Sys ATMEL AT91XXXXX Test Board」が存在している
    (×)USBコントローラに「atm6124.Sys ATMEL AT91XXXXX Test Board」が存在せず、「LEGO Devices」が見えている
    (×)USBコントローラに「atm6124.Sys ATMEL AT91XXXXX Test Board」が存在せず、「LEGO Devices」が見えている
  5. SAM-BAを終了します。
  6. NXTとPCの接続を解除し、USBケーブルを抜きます。
  7. NXTの電源を投入しリセットします。
  8. NXTとPCをUSBで接続します。
  9. SAM-BAを起動し、次のダイアログがでること確認します。
  10. SAM-BAのダイアログ
    SAM-BAのダイアログ

次回は

 次回は、今回の課題を改善するために、各機能ごとにタスクを割り当てる設計を行いたいと思います。また、リアルタイムOSの機能を利用することによる、リアルタイム性の向上も図りたいと思います。

【関連サイト】
JUDE(Change vision):軽快で直感的に使えるUMLエディターです(無償版もあります)。本原稿のUMLはこのツールで記載しています。
Afrel:本連載で利用しているロボット「教育用レゴマインドストームNXT」の正規代理店です。組み込み向けの各種教材を提供しています。
レゴ社
LEJOS OSEK
LEJOS OSEKの日本語ミラーサイト

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
[組込み開発入門] ロボットを作ろう連載記事一覧

もっと読む

この記事の著者

柏崎 真司(カシワザキ シンジ)

(株)永和システムマネジメント所属。カーネル開発から、組み込み開発の世界へと足を踏み入れた。共通部分を多く感じながらも、組込み独自の魅力に魅了されつつある。また、組込み開発と同様、それ以上に、家族と過ごす時間もこよなく愛している。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3704 2009/03/16 19:17

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー