守谷工房の製作品3へ                守谷工房Topへ

Mindstorms NXT挑戦1(2022.6.10)


Lego Mindstormsをご存じでしょうか。レゴブロックから派生した
プログラミング可能な一連の学習支援教材です。機構部品や能動
部品、プロセッサに接続できるセンサーなどを含みます。ホビーセット、
エキスパートビルダーセット、テクニックなどのシリーズを経て1998年に
RCX、2006年にNXT、2013年に現行のEV3へと発展しています。
RCX~EV3とは、ブロック体の中にプロセッサが組み込まれた機構
制御の中心モジュールで、EV3にはメモリ64MBが実装された
ARM9が搭載されています。写真は工房保有のブロック体(NXT
インテリジェントブロック)で、販売・サポートとも既に終了しています。

 

NXTのプロセッサはARM7、256KBのフラッシュメモリと
64KBのRAM、さらにコプロセッサAtmel AVRを内蔵します。

 

テクニックのシリーズで、大きなIFボックスを介して
LOGO言語で制御していた頃と隔世の感があります。

 

RCXに付属するプログラミングアプリROBOLAB
です。初期のNXTにも同梱されていたものです。

 

Mindstormsに付属するアクチュエータやセンサーを
制御し、GUI操作で簡単にプログラムを作成できます。

 

その後、NXT用に開発されたプログラミングアプリです。
現在もLEGO Educationからダウンロード可能です。

 

各種ユーザーマニュアルもこちら
こちらからダウンロード可能です。

 

詳細は分かりませんが、NXT関連製品の中に、C言語、C#、
Java、mrubyによるプログラミングを可能にするガイドブックが
存在します。汎用言語を導入することにより、GUIベースアプリ
では到底不可能な、複雑な制御を記述することができるでしょう。
そして、NXTには写真のような各種のセンサーが付属します。
タッチ、サウンド、光、超音波に加え、オプションでカラー、温度、
距離、IRシーク、コンパス、あげく加速度、ジャイロまで揃って
います。汎用言語と豊富なセンサーを組み合わせることで、
教育用にとどまらず研究・開発目的にも応用できるでしょう。
 

実際ネット上を検索してみると、多くの大学、工学部で
制御の実験・実習に利用されていることが分かります。

 

京都大学工学部電気電子工学科のサマーキャンプ、
立命館大学理工学部の電子情報工学演習など。

 

城西国際大学メディア学部では、Microsoft Robotics
Developer Studio
による制御が検討されています。

 

九州工業大学システム創成情報工学科では、
NXTによるものづくり入門実習が試行されています。

 

こちらは沼津工業高等専門学校電子制御工学科のWEBページです。
同校牛丸先生(教授)の研究室では、制御工学の実験・実習にNXTを
活用されています。制御プログラムの開発環境としてbrickOSNQC
RobotC、そしてnxtOSEKを導入・整備され、学生向けにWEB版の
優れたチュートリアルを提供されています。牛丸先生の教材に倣い、
制御工学を取り入れたNXTの本格的な制御に挑戦したいと思います。
 

NXTの制御内容を汎用言語を用いて記述する環境は、沼津工専
紹介されているだけでもいくつかの選択肢があります。これらの中から

nxtOSEKを組み込んだ環境を取り上げることにします。OSEKとは、
ドイツ自動車産業が規定した自動車電子制御(ECU)用OSの業界
標準仕様で、このOSEKに準拠したNXT用OSがnxtOSEK(だそう)
です。C/C++言語による開発環境を提供し、NXTのアクチュエータ、
各センサーを制御するAPIが含まれています。チュートリアルの項目を
眺めると、「Ⅲ.実践編」にライントレースの事例があり、2値制御から
P制御、PD制御、さらにPID制御と発展していきます。何と制御工学の
威力を、NXTで試してみることができるわけです、チャレンジしましょう。



チュートリアルの最初は、nxtOSEK
動作させる環境を構築する作業です

 

Windows上に疑似UNIX環境を構築
する方法として、Cygwinを導入します。

 

CygwinのWEBサイトからインストーラをダウンロード
します。setup-X86 64.exeが推奨されていますが、

 

ARM用コンパイラが32ビットのため
setup-X86.exeを使用します。

 

インストーラを起動します。ほとんど
「次へ」を押していくだけです。

 

必要なモジュールを、インターネットから
その都度ダウンロードするよう指定します。

 

インストールフォルダを指定します。
「C:¥cygwin」のままなので「次へ」。

 

ダウンロードファイルの保存先を指定します。デフォルトの
ユーザフォルダのままでは使いにくいので変更します。

 

インターネット接続に使用するプロキシの選択
ですが、システムの設定にお任せで「次へ」。

 

モジュールのダウンロードサイトを選びます。いくつか
試してみましたが多少スピードが異なる程度です。

 

各FTPサイトのディレクトリから必要
ファイルのダウンロードが開始されます。

 

Cygwinに組み込むパッケージを選ぶため、
ここでそのメニューが表示されます。

 

チュートリアルにはDevelカテゴリからmake
gcc-
common
g++を選択するよう指示されています。
 

ですが、Cygwinのバージョンが異なるせいか
名前が一致するパッケージを見つけられません。
 

gcc-common
の代わりにgcc-coreを、
g++の代わりにgcc-g++を選びます。

 

当時のバージョンに準拠しているので、仕様が変更
されているようです。一応インストール完了です。

 

チュートリアルの指示に沿って、次にGNU ARMをインストールします。
GNU ARMは、GCC(GNU Compiler Collection)に含まれるARM7
(ATMEL AT91SAM7S256)コアプロセッサに対応するコンパイラで、
bu-2.16.1_gcc-4.0.2-c-c++_nl-1.14.0_gi-6.4.exeは32ビット版です。

 

インストーラを起動するとセット
アップウィザードが表示されます。

 

ほとんどNextを押して
いくだけで簡単です。

 

Cygwinからパスを通しやすくするため、セット
アップフォルダをC:¥cygwin下に変更します。

 

Select Componentsの画面で
Big Endrianのチェックを外します。

 

また、Little EndianFloating
Point Unit
のチェックも外します。

 

スタートメニューフォルダの有無と
フォルダを置くディレクトリを指定します。

 

Select Additional Taslsの画面で、Install
Cygwin DLL
のチェックを外します(インストール済)。

 

必要な設定が完了し、実際に
インストールが実行されます。

 

インストール完了時、Add the executable directory
the PATH valuable
のチェックは必要ないそうです。

 

C:cygwin下にGNUARM
フォルダが作成されています。

 

Windows環境に慣れた感覚では、聞き覚えの無い用語や
システム構成に戸惑うばかりです。現時点で何を作業して
いるのか見失うこともしばしばです。次に、NXTを制御する
本体であるnxtOSEKをインストールします
v214b3
最新バージョンと表示されていますが、v218をDLします。

 

インストールと言っても圧縮ファイルを
フォルダを指定して展開するだけです。

 

Cygwinからのディレクトリ移動がしやすい
よう、C:¥Cygwin下に展開します。

 

まだNXT Driver、NeXTTool拡張ファームウェア等々
インストールが続きますが、一度Cygwinを起動してみます。

 

問題なく起動しプロンプトが表示されます。
正常にインストールされているようです。

 

cdコマンドによりnxtOSEK
フォルダに移動します。

 

nxtOSEKインストール時に、CやC++の
サンプルプログラムが用意されています。

 

samples_c/helloworldに移動
します。有名なテストプログラムです。

 

makeコマンドを組込み済なのでビルド処理(コンパイル)され
実行ファイルhelloworld_OSEK.rxeができるはずですが、

 

何やら・・どころか全く訳の分からない状況です。画面一杯に
メッセージ(多分エラーコメント)が表示され、実行ファイルが
生成された気配はありません。コメントを理解できれば問題の
原因や対処方法が分るでしょうけれど、そもそもLinuxOS
操作方法を最低限理解もせず、チュートリアルに頼っての環境
構築などそもそも無謀です。さて、無謀のままでメッセージの
解読に挑むか、最初からセットアップをやり直すか、心機一転
LinuxOSの操作方法から学ぶか、どれもお先が暗いです。

 

守谷工房の製作品3へ                守谷工房Topへ