SSブログ

Mindstorms EV3再開 [LEGO]

4年くらい前に購入したものの、サンプルを数個動かしただけでしまい込んだままになっていたMindStorms EV3を再開した。ロビを製作してロボットに再び目覚めたわけではなく、以前からEV3の開発環境が充実していることを知っていずれ再開する予定ではあった。

MindStormsシリーズは、20年前のRIS(Robotics Invention System)から始まり、NXT、EV3とすべて所有している。NXTとEV3は見かけは似ているが、コントロールブロックの性能向上が著しい。CPUやメモリ類の大幅向上だけでなく、SDカードスロットの搭載により、ファームウエアを書き換えなくても別のOSで起動することが出来る。本格的なプログラミングをするためにはC/C++やJAVAなどが必須であるが、環境ごとSDカードに入れて起動できるのはありがたい。

そこでこんな本を購入して本格的にやってみることにした。

実践ロボットプログラミング第2版―LEGO Mindstorms EV3で目指せロボコン!

実践ロボットプログラミング第2版―LEGO Mindstorms EV3で目指せロボコン!

  • 作者: 藤吉 弘亘
  • 出版社/メーカー: 近代科学社
  • 発売日: 2018/05/01
  • メディア: 単行本

しかし、最初のトレーニングロボットの製作でつまづいた。EV3には「玩具セット」と「教育セット」の2種類があり、管理人が購入したのは価格の安い「玩具セット」の方だ。NXTでも同様だったがそれほど大きな差はなかった。しかしEV3ではセンサーやパーツ類で大きな違いがあった。幸いにして以下に示したようにNXTのパーツを流用できるのでなんとか進められることにはなった。

・超音波センサー:NXTを流用
・ジャイロセンサー:NXTのサードパーティ製(HiTechnic社)オプションを流用
・タイヤ:径が同じであろうNXTのを流用
・いくつかの筐体構築パーツ:同機能になるように既存部品で作成

IMG_1779.jpg

しかし、EV3のプログラミング環境は面倒くさい。既存言語と同機能をブロック表現しているのだが、完全ではない。変数や配列などの概念もあるが、これらをブロックで表現するにはかなり無理がある。早々にC言語環境に移行した方がいいかもしれない。

nice!(0)  コメント(0) 

NXTway-GSをPS3のコントローラーで操縦 [LEGO]

昨日に続き2輪倒立振子ロボット(NXTway-GS)をいじった。
昨日は、ただ直立しただけで、
 ・リモコンによる前進・後退・回転の制御
 ・ログの抽出
ができていない。
いずれもBluetooth経由で行い、NXT GamePadというPC上のユーティリティを使う。

このユーティリティは、アナログ入力のあるゲームパッドを前提としているので、単純なスイッチだけのゲームパッドでは機能しない。手持ちので試したけどダメだった。そこでPLAYSTATION3のコントローラーを試してみた。うまく行った。前進、後退、右回転、左回転を倒立したまま制御できる。すばらしい。
lego27.jpg

注意点としては、
・PLAYSTATION3のコントローラーSIXAXISをUSBで接続する
・接続しただけでPC側はアナログゲームパッドと認識するが、
 コントローラー側の初期化が必要らしい
・そのためにusb_hid_initというソフトを接続後一回だけ実行する
・さらにこのソフトを実行するためにはLibUsbが必要
 (nxtOSEKのためにインストール済み)

usb_hid_init以外の方法もあるらしい。ここのサイトにはお世話になった。

コントローラーが動いたらログ抽出の方もあっさりできた。
こつとしては、
・NXT GamePadによるBluetooth接続は、nxtOSEKを起動してから行う
 (NXTファーム上で接続しても、nxtOSEKを起動すると切れてしまう)

といった所だろうか。

それにしても、NXTでここまでできるとは大したものだ。このロボットと倒立制御のAPIは、2009年からのETロボコンにも採用されるそうだ。NXTの登場時に、搭載しているCPU(32ビットのARMプロセッサ)はオーバースペックだという記事もあった。しかし、倒立してさらにライントレースのスピードを競い合うのなら、十分なCPUパワーが必要だ。RCXと同様、NXTも教材として10年は持ちそうな気もする。

とりあえず動かすことに2日もかかってしまった。これからはNXTway-GSに添付のドキュメントを読むことにしよう。こちらはもっと時間がかかりそうだ。


2輪倒立振子ロボット(NXTway-GS)を試す [LEGO]

少し間があいてしまったが、Lego Mindstorms NXTによる制御のお勉強を再開した。
まずは最終到達目標の倒立車を試してみようと思い、こちらを再現してみた。

lego26.jpg

とはいっても、そう簡単に事は進まなかった。一応手順を書いてみると以下の通り。
●ロボットの作成
 ・このページの組み立て手順書を見て作成
 ・NXTには、この大きなタイヤは含まれていないので、RCXのを流用
 ・ただしNXT標準のタイヤでも可能とのこと(コンパイル時に指定をする)
 ・2ヶ月ほど前に買ったジャイロセンサーを初めて使ってみた

●PCへ開発環境をインストール
 ・このページにしたがって、Cygwin、ARMコンパイラをインストール
 ・またベースとなるnxtOSEKもCygwinのユーザディレクトリに展開しておく

●NXT側にファームウエアをインストール
 ・いままでleJOSをインストールしていたが、NXT BIOSを上書きインストールした


そして、お決まりの「hello world」を試した後は、NXTway-GSをコンパイルしてNXTにダウンロードしてみた。
しかし直立しない。しかも2輪とも全速で回転し続けている。そこでソースコードを少し直しては実行してみたり、開発環境をいじってみたり、その他いろいろすったもんだが始まった。結局この過程が後々役に立つのだが、詳しい経緯は省略しておく。

注意点としては、
●NXT側ファームウェアは「拡張NXT標準ファームウェア」を使った方がいい
最初NXT BIOSでやっていたのだが、一度アップロードするとUSBを認識しなくなる。その都度、NXTファームに戻し、そしてNXT BIOSを入れ直せば復活するのだが、プログラムの修正のたびにこんなことはやっていられない。

●きちんと直立させた状態で起動する
傾いた状態だと、制御が機能しない。それだけでなく、全速でタイヤが回転する。つまり、最初うまく行かなかったのは、単に起動のさせ方が悪かっただけだった。ただ、制御不能時にはモーターを止めるような仕組みすべきだと思うので、可能なら改善してみたい。

というわけで一応動作したことはしたが、まだ完全ではない。このロボットには、センサやモーターの状態を記録してBluetooth経由でPCに送る機能があり、これ用のPCアプリも提供されている。しかしうまくいかない。停止時にはBluetoothのリンクは確立できているものの実行時には切れてしまっているようだ。まだまだやることは多い。
 

センサー類をゲット [LEGO]

最近LEGO Mindstorms NXTと戯れているが、これは制御系のお仕事の下準備のためだ。最終的には2輪の倒立車を実現するつもりだが、これには角速度を検出する必要がある。
NXTにはサードパーティ(米Hi Technic社)製のセンサーを付加することができる。NXTソフトウエア側へは、プラグイン(とでも言うのか)を追加することで対応できる。国内でも扱っている通販業者もあるが、高い上に種類が限られていたので直接購入することにした。
lego25.jpg
今回買ったのは3種類のセンサーと接続ケーブルだ。
同じ箱に見えるが、以下の3つだ。
 ・ジャイロ(角速度)センサー
 ・コンパス(地磁気)センサー
 ・加速度センサー
接続はNXT付属のケーブルで十分だが、ついでに買った。NXT付属品は固くてしなやかさに欠ける。このケーブルセットは柔らかく、長さもNXT付属品を補間している。
合計で約¥18,500。NXT本体が¥37,000くらいだったからだいぶ高かったような。

3軸のFuturaを作る [LEGO]

先日作ったChess Robotと同じChapter 8には簡単な3軸のロボットも記載されている。今日はこれを作った。
今度はleJOSで制御するので、ファームウエアを再び書き換えた。Eclipse用のプラグインもインストールしてあるので、コマンドを打ち込まなくてもメニューからできるので簡単だ。
lego24.jpg
小気味よく動く。本文中で「堅牢で力強く動きが速い」と自画自賛しているだけのことはある。一連の動作後、原点に復帰できて精度も高い。構造がシンプルだからこそか。

制御プログラム中、怪しいところがあった。このままでは、コンパイルエラーを起こしてしまう。24行目からの、
  public Arm() {
    Motor.A.setSpeed(150);
      〜〜〜
  }
は、戻り値の型を示していないのでエラーになる。そもそもArmなどというメソッドはどこからも呼び出していない。きっとコンストラクタだろうと想像して、メソッド名をFuturaに代えてみた。多分問題ないと思う。

Chess Robotを作った [LEGO]

iCommandの利用例としてChess Robotを作ってみた。かなりの大型で全長70cmくらいになる。PC側のプログラムからChessの座標を指定して、駒を移動させるロボットだ。2本のアームとはさみがあり、3個のモーターで制御する。

lego22.jpg

よくできているのは、駒をつかんだ後ギアがロックすると、「手首」の部分が持ち上がり、駒を持ち上げる動作をすることだ。モーター1個で、
 ・駒をつかむ
 ・手首を持ち上げる
の動作ができる。

本に記載されているプログラムでは、駒の移動をプログラム中に埋め込んでしまっているので、PC側から自由にコントロールできるわけではない。決められた動作をするだけだ。

例によって、少しメカに弱い部分があって、思うようには動かなかった。一応それらしく駒をつかんで移動する動きはしたが、前のアームの動作がこころもとない。見てみると、ギアの噛み合わせがいまいちで、回転中に滑っているようにも思う。lego23.jpg

とりあえず、iCommandの使用例としてはこんなものとして、次に進めることにする。


iCommandを試す [LEGO]

先日はBluetoothで手間取ったが、本格的に例の本のトレースを再開した。
leJOSの別プロジェクトにiCommandがある。これはBluetoothを使ってNXTをコントロールするPC側のAPIで、NXT本体は標準のNXTファームウエアを使う。

例によってこれも手こずる。結局Eclipseを使う場合、以下のような手順で実行までこぎ着けた。
(1) iCommandをダウンロードして解凍

(2) シリアル制御のJAVAライブラリRXTXをダウンロードして解凍

 このとき、zipファイルの解凍に手こずった。2〜3の解凍ソフトを使ったがだめで、結局Macで解凍できた。原因不明。

(3) 解凍後のiCommandフォルダ内にあるicommand.propertiesを修正し
  所定の場所におく

 修正内容は以下の通り。
  nxtcomm.type=rxtx
  nxtcomm=COM5(コントロールパネル「Bluetoothデバイス」で確認しておく)
 保存場所は、¥Documents and Settings¥<ログインユーザー名>

(4) EclipseでPC側の制御ソフトをコーディングする

(5) Eclipseの「プロジェクト」「プロパティー」「Javaのビルド・パス」で
  以下の外部JARを2つ追加する

 ・icommand.jar
 ・RXTXcomm.jar

(6) RXTXcomm.jarのネイティブ・ライブラリ・ロケーションを、
  rxtxSerial.dllのフォルダに設定する

 このdllはRXTXを解凍したフォルダ内にある

(7) 実行時に、COMポートを設定するウインドウが出現したら、使用するCOMポートに
  チェックしてsaveする

 このウインドウをクローズするとプログラムが終了してしまう。最初は訳が分からなかった。Eclipseを立ち上げ直すなどしているうちに出なくなった。原因不明。

(8) 正しく動作すると「Enter commands」という1行分のウインドウがでてくるので、
  ここでキーを入力する

といったところか。そしてBluetoothで制御される車型ロボット「MoonBuggy」を製作して動作させてみた。
lego21.jpg

この本のメカは今ひとつで、期待通りに動かない。前進後退と、ステアリングの左右ができるのだが、実際に走らせると重さや摩擦に負けてしまう。電池がへたってきてモーターにパワーがないことも原因だが、メカの方もかなり改善余地はある。

なお、記載されているJAVAプログラムに一点修正がある。
P169の50行目後半は、〜 Motor.B.getTachoCount()); が正しいと思う。オリジナルだとコンパイルエラーになってしまう。ちなみにiCommandのバージョンは0.7を使用。


Windows XP SP3でBluetoothが機能しなくなった [LEGO]

久しぶりにLEGO Mindstorms NXTを出してみた。というのも、本業の方で制御系(PIDとか現代制御)を扱う仕事があるので、理論だけでなくNXTで実践してみようと思ったからだ。以前買った本やNXTを扱っているサイトにはこの手の情報もある。2輪倒立車のNXTWay(Segwayをもじった)などの製作例もある。

まずはともあれ、新しいleJOSをインストールしておなじみのHelloWorldをダウンロードしようとしたら機能しない。いろいろ調べるとBluetoothが機能していないようだ。leJOSをやめてオリジナルのNXTファームウエアに戻してもだめ。古いPCでやってみてもだめ。全くお手上げ状態。

サイトをいろいろ調べてみると、 Windows XP SP3でBluetoothが機能しなくなることがあるようだ。どなたかがMSに問い合わせをした返事が記載されていたので、それを参考に設定してみたら機能した。2台のPCはいずれもMicrosoft Updateで半ば強制的にSP3にUpdateさせられてしまったものだ。使えていた機能が拒否しづらいUpdateで機能しなくなるというのは、いわゆる「マルウエア」と変わらない。Microsoftのいつもの余計なお世話のおかげで半日つぶしてしまった。実に腹立たしい。

●症状
コントロールパネルの「Bluetoothデバイス」おいて、
・パスキーの交換まではOK
・COMポートからBluetoothサービスを選択しようとすると「アクセス拒否」がでて選択できない

●対策
・コントロールパネルの「管理ツール」内の「サービス] を開く
・「Bluetooth Support Service」をダブルクリックで開く
・「ログオン」タブを開く
・「ローカルシステムアカウント」にチェックを入れる
・「適用」「OK」ボタンを押しPCを再起動


R2MeTooを作ってみたが... [LEGO]

洋書のLEGO本を読みつつ、最初のロボット「R2MeToo」を作ってみた。名称と3本足がR2D2を想像させるが、頭の部分は似ても似つかない。本には、製作過程の図が載っているが、印刷の濃さの関係で不鮮明な部分があり、製作にはややてこずった。が、説明の文面にはきちん書かれているので、億劫がらずに英語を読めば何とかできる。
JAVAプログラムをざっと読んでみると、進行方向に物体があれば、首を振ってもののない方向を探し、その方向に移動するはずだが、挙動がおかしい。センサーを取り付けるポートが、プログラムと説明とで異なっているなど、誤りも少なからずあるので、じっくり調べてみる必要がありそうだ。


leJOSでBluetoothアップロード成功 [LEGO]

久しぶりにleJOSのサイトを見たら、なんと更新されていた。ダウンロードしてドキュメントを見てみるとBluetoothが使えるみたいだ。早速試してみた。

コンパイルしたJAVAプログラムをBluetoothでアップロードできた。NXT側には簡単なユーザーインターフェースを持ったleJOSのメニュー画面があり、この中でアップロードしたファイルの実行や削除ができる。さらにPC側でnxjbrowseコマンドを実行すると、NXT側のファイルを操作するウインドウも立ち上がり、ここでもアップロードや実行もできる。なかなかいい。これで本格的にNXTのJAVAプログラミングができる環境が整った。あとは管理人のやる気しだいか。

今回のバージョンからコマンド類の名称が一新されていたり、環境変数名が変わっていたりで、この本との整合性が取れなくなっている。RCXとの共存のためなのかもしれないが、見込みで本を書いたのが見え見えだ。


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。