人工知能に関する断創録

人工知能、認知科学、心理学、ロボティクス、生物学などに興味を持っています。このブログでは人工知能のさまざまな分野について調査したことをまとめています。最近は、機械学習、Deep Learning、Kerasに関する記事が多いです。



leJOS

leJOSは、マインドストームで作ったロボットをJavaで制御するためのライブラリ。Cで制御できるlegOSのJava版だ。

マインドストームにはブロックを組み合わせるようにプログラムを作成できるツールが入っているがプログラマには結構使いにくい(特にループや変数の扱いが・・・)。

leJOSにはロボット制御に必要なさまざまなクラスライブラリが用意されている(センサーやモータークラスなど)。普通のJavaプログラムのようにロボットをプログラミングできるので使いやすい。

マインドストーム・プログラミング入門―LEGOでメカトロニクス/ロボティクスを学習する (COMPUTER TECHNOLOGY)

マインドストーム・プログラミング入門―LEGOでメカトロニクス/ロボティクスを学習する (COMPUTER TECHNOLOGY)

  • 作者: ブライアンバグナル,Brian Bagnall,長瀬嘉秀,二上貴夫,テクノロジックアート
  • 出版社/メーカー: CQ出版
  • 発売日: 2004/07
  • メディア: 単行本
  • 購入: 1人 クリック: 35回
  • この商品を含むブログ (10件) を見る

leJOSの基本から応用まで広くカバーされている。この本ではR. Brooksのサブサンプション・アーキテクチャまで解説されておりロボティクスの基礎を学ぶ上でよいと思った。

プログラムはこんな感じに書ける。

import josx.platform.rcx.*;  // leJOSのライブラリ

public class Tippy {
    public static void main(String[] args) {
        Motor.A.forward();  // モーターAを正転
        Motor.C.forward();  // モーターCを正転
        while (true) {
            if (Sensor.S2.readBooleanValue() == true) {
                // センサー2が反応したら
                backUpAndTurn();
            }
        }
    }
    
    public static void backUpAndTurn() {
        Motor.A.backward();  // モーターAを逆転
        Motor.C.backward();  // モーターCを逆転
        try {
            Thread.sleep(600);  // 600msそのまま
        } catch (InterruptedException e) {}
        Motor.A.forward();
        try {
            Thread.sleep(300);
        } catch (InterruptedException e) {}
        Motor.C.forward();
    }
}

これをロボットに転送して実行できる。

転送は赤外線(TVのリモコンと同じ)で行うので周囲が明るいとなかなかうまくいかない。その場合は、

  • 周囲を暗くする。
  • コントロールパネルで赤外線タワーの出力をLONGにする。
  • 同じくタイムアウト時間を長くする。

とよさそう。