GPS・QZSS ロボットカーコンテスト 2016


10月23日に 東京海洋大学 で開催された GPS・QZSS ロボットカーコンテスト 2016 を見学しました。

会場は、明治丸の隣の芝のあるグランドです。
会場に着くと 明治丸 がお出迎えしてくれます。
20161022_gis_photo1 20161023_gps_meijimaru

コンテストの内容は、GPS測位による自動運転です。
競技は2種類あり、ダブルパイロンレースと アプリコンテストです。

ダブルパイロンレース
2箇所に置かれたパイロン(位置座標)を8の字に回ります。
14チームが参加しました。
結果は、大きく2つの傾向に分かれました。
なんとか1周できるか・できないかと、何周も安定して周回できるです。
GPS測位はもっと簡単なのかと思いしたが、自分とパイロンの相対位置をうまく判定できない感じです。
GPS測位だけだと点の情報なので、車体がどっち向きになっているかで、操縦の仕方が変わります。
その辺を、コンパスやジャイロを組合せて判定するのですが、これが難しいみたいでした。
20161023_gps_car_1 20161023_gps_car_2 20161023_gps_car_3
20161023_gps_car_4 20161023_gps_car_5

多くの機種は、コントローラとしてマイコンに自作のプログラムを搭載したものを使用していましたが、1つだけドローン用のコントローラ APM 2.6 を使用したものがありました。
これは、コントローラ自身に位置を覚える機能があり、位置を何点か指定すると、自動で周回するそうです。
20161023_gps_aps_1

当日はライブ配信も行われた。
視聴者からの質問に参加者が答えるコーナーが設けられ、現地にいる私もいろいろ参考になりました。
GPSは10mくらいの誤差がありますが、海洋大学にあるGPS基準点を利用して補正しているそうです。
RTK測位というらしい。
目標はピンポイントで与えられるが、その周りに3箇所くらいの地点を設定して、近くにいったら次の地点に移動するというようなコース取りをしているそうです。

アプリコンテスト
今回初めての企画です。
車体は、主催者側が用意したものを使います。
参加者は、車体をBluetooth経由で制御するアンドロイド・スマホのアプリを作成します。
7x7のマス目(位置座標)が用意され、当日指定された場所を巡回します。
参加は2チームでした。
結果は、散々なものでした。
1チームは車体が全く動かず、1チームは走り回るだけで目標には到達できなかった。
その理由は、通信の間隔は1秒毎と遅いためです。
通信の間隔に対して、車体の走行速度が速いため、指示が届いた時点では違う場所に居るらしい。
来年もやるそうなので、ぜひ成功するチームが出て欲しいですね。
完走できなかった理由として、通信が10秒間隔なので、位置情報を受信した時には、その位置にいないということがあるらしい。
20161023_gps_app_1 20161023_gps_app_2

最後にお土産として、茄子を頂きました。
20161023_gps_eggplant
当日の様子は、YouTube で公開されています。
3時間あるので、心して見てください。w
なお、最初の25分くらいまで、画面が映らず、音声だけです。

参考
2016年大会 競技結果
自作GPS・QZSSロボットカーが集結、衛星航法による自律走行技を競うー趣味のインターネット地図ウォッチ
電子基準点を利用した新しいデータ配信サービスについて
GPSとRTKって違うんですか


Sumobot を Scratch から制御する


20160801_sumobot_scrach

Scratch と Python の連携 の応用として、
Sumobot を Scratch から制御します。

作成したプログラムは Github で公開しました。

主な作成手順
(1) MAC にて、Scratch プロジェクトを作成します。
画像をクリックすると、broadcast メッセージを送信する。
画像とメッセージの対応
– 上向き (forward) : “f”
– 下向き (backward) : “b”
– 左回り (left) : “l”
– 右回り (right) : “r”
– 停止 (stop) : “s”

(2) MAC にて、Python プログラムを作成します。
broadcast メッセージを受信して、Sumobot を移動する。
3秒後に停止する。

(3) Rapberry Pi (Sumobot) に転送します。

操作
(1) MAC から Rapberry Pi に VNC で接続します。
(2) Scratch プロジェクトを起動します。
(3) Python プログラムを起動します。
(4) Scratch の画像をクリックすると、Sumobot が移動します。


ラズパイ sumobot turn


sumobot turn は、Sumobot が左回転と右回転を繰り返すプログラムです。
sumobot_turn.py と sumobot_turn_check.py の2つがあります。
後者は、前者に、ピンの状態をチェックする処理を追加したものです。

インストール
Github から持ってきて、ラズパイの好きな場所 (例えば /home/pi/sumobot/ ) に置きます。

起動

$ sudo python /home/pi/sumobot/sumobot_turn.py

Sumobot が左回転と右回転を繰り返します。

注意
無線LANでログインして起動してください。
有線LANだと、LANケーブルが絡まります。

自動起動
電源を投入したときに、自動的に起動するようにします。
しかし、常に Sumobot が動き出すと、扱いにくいのです。
sumobot_turn_check.py を使用します。
これは、特定のピン (P13) の状態をチェックして、Sumobot を動かさずに、プログラムを終了する処理を追加したものです。

自動起動するには、/etc/rc.local を変更します。
exit 0 の前に、1行追加します。

$ sudo nano /etc/rc.local
...
# add
python /home/pi/sumobot/sumobot_turn_check.py
exit 0 

ハードの設定
P13(GPIO27) と P17(3.3V) の間に10KΩの抵抗を入れます。
プログラムが自動起動して、Sumobot は動き続けます。
P17(3.3V) に代わりに P14(GND) につなぐと、プログラムは終了して、Sumobot Jr は停止したままです。
20160505_raspi_circuit_p13


ラズパイ Sumobot Jr


20160505_raspi_completion

Arduino に続いて、ラズパイで Sumobot Jr を制御します。

部品
Raspberry Pi 2 B
モバイルバッテリ
・連続回転サーボ SM-S4303R x 2個
16mm ボール
・ネジとナット M2.6x10mm x 12本、M2.6x15mm x 2本
・結索バンド 20cm x 2本
・ゴムバンド #25 3mm幅 x 2本
・線材 少々

加工品
レーザー加工機
・車体 (設計データ) Arduino版と同じです
20160501_sumobot_laser_body

3Dプリンタ
・ボールキャスタ (設計データ) Arduino版と同じです
20160501_sumobot_3d_printer_ball_caster

サーボの動作確認
サーボが所望の動作をするか確認します。
特に、停止を指定したときに、ちゃんと停止しているか。

参考
ラズパイ WiringPi 連続回転サーボ
ラズパイ 連続回転サーボ

車体の組み立て
車体の作り方は、Arduino版 と同じです。
違うのは、上板に Arduino ではなくラズパイを固定すること。
20160505_raspi_upper

配線
20160505_raspi_curuit

(1) オスとメスのジャンパー線を半田付けして、オス2口とメス1口のジャンパー線にします。
20160505_raspi_wiring

(2) モバイルバッテリーを車体に入れます。
モバイルバッテリーの上下に厚紙を入れると、ほどよい感じで固定されます。
20160505_raspi_battery_back

(3) ラズパイと2個のサーボを結線します。ラズパイとモバイルバッテリーを結線します。
20160505_raspi_battery_wire

プログラム
ラズパイにプログラム sumobot_turn を設定します。
電源を入れます。
Sumobot Jr が左回転と右回転を繰り返せば、OKです。

課題
スペーサが3mm厚では足りなかった。
10mmくらい必要です。

(1) 上板にラズパイを固定すると、コネクタの足があたり、基板がしなります。
どうやら、木材のスペーサだと、締め付けると、潰れるようです。
20160505_raspi_problem_1

(2) ラズパイに電源ケーブルを挿す時に、横板が邪魔になり、ケーブルが挿さりません。
応急処置として、横板を切断しました。
20160505_raspi_problem_2_2

YouTube Preview Image

Sumobot Jr


20160501_sumobot_completion

Sumobot Jr はオープンソースのロボットカーのキットです。

オリジナルから設計データを少し変更しています。
設計データやプログラムなど Github で公開しました。

部品
Arduino Uno
電池ボックス (単三x4本)
・単三電池 x 4本
・連続回転サーボ SM-S4303R x 2個
16mm ボール
・ネジとナット M2.6x10mm x 12本、M2.6x15mm x 2本
・結索バンド 20cm x 2本
・ゴムバンド #25 3mm幅 x 2本
・線材 少々
20160501_sumobot_parts_2

加工品
レーザー加工機
・車体 (設計データ)
20160501_sumobot_laser_body

3Dプリンタ
・ボールキャスタ (設計データ)
20160501_sumobot_3d_printer_ball_caster

サーボの動作確認
サーボが所望の動作をするか確認します。
特に、停止を指定したときに、ちゃんと停止しているか。
参考: Arduino 連続回転サーボ

車体の組み立て
動画が公開されています。
Sumobot Jr Assembly video for Nodebots Day 7/27

(1) ボールキャスタの穴をキリでM2.6のネジが入るように大きくします。
20160501_sumobot_ball_hall_blue

(2) ボールキャスタを底板にネジで固定します。
20160501_sumobot_ball_calter_blue

(3) サーボホーン (サーボの付属品) の穴をキリでM2.6のネジが入るように大きくします。
20160501_sumobot_servo_horn_holl

(4) サーボホーンを車輪にネジで固定します。
20160501_sumobot_servo_horn

(5) サーボを底板に結索バンドで固定します。
20160501_sumobot_servo_mount_2

(6) Arduino を上板にスペーサーをかましてネジで固定します。
20160501_sumobot_srduino_parts20160501_sumobot_arduino

(7) 上板を車体に取り付けます。
20160501_sumobot_upper

(8) 車輪を車体に木ネジ (サーボの付属品) で取り付けます。
20160501_sumobot_wheel_2

(9) 前板を車体に取り付けます。
20160501_sumobot_front_2

(10) ボールをボールキャスタにはめ込みます。
20160501_sumobot_ball_mount_blue

配線
20160501_sumobot_circuit

(11) 電池ボックスにメスのジャンパー線を半田付けします。
(12) オスのジャンパー線を半田付けして、4つ口にします。
20160501_sumobot_soldering

(13) Arduinoと電池ボックスと2個のサーボを結線します。
20160501_sumobot_wiring

(14) 電池ボックスを車体に入れます。
電池ボックスの上下に厚紙を入れると、ほどよい感じで固定されます。
20160501_sumobot_battery

(15) 完成です。
20160501_sumobot_completion

プログラム
Arduino にスケッチ sumobot_turn を書き込みます。
電源を入れます。
Sumobot Jr が左回転と右回転を繰り返せば、OKです。

課題
ゴムバンドがすぐに車輪から外れる。
20160501_sumobot_wheel_and_rubber

YouTube Preview Image

アルデバラン・アトリエ秋葉原


20140923_pepper_robot

2014年9月23日に、アルデバラン・アトリエ秋葉原 で開催された Pepper 開発体験 ワークショップ に参加しました。
場所は アーツ千代田3311 の中にあり、同じフロアーのお隣は はんだつけカフェ です。
20140923_pepper_333120140923_pepper_handa

部屋は20帖ほど、Pepper が4台あります。
20140923_pepper_atelier20140923_pepper_room

Pepper の部品や NAO も展示してあります。
20140923_pepper_hand20140923_pepper_arm
20140923_pepper_wheel20140923_pepper_nao

20名ほどが参加し、3チームに分かれて、講習を受けました。
チーム毎に、Pepper が1台と、開発用のMAC が1台が、用意されています。

1時間ほど、サーボの動かし方、タッチセンサ、音声認識などの使い方を教わりました。
開発環境は、GUI方式で、使いやすいです。
用意されているブロックを置いて、線をつなぐ方式なので、プログラムの経験のない人も、すぐに使えるようになります。
Pepper 本体とは WiFi で接続します。
応答速度もよく、指示したとおりに、スコスコ動きます。
暴走したときの非常停止ボタンは、首の裏にあります。
20140923_pepper_sdk20140923_pepper_emergency

残り30分ほどで、教わった技法を使って、簡単なアプリを作りました。
最初に Pepper が挨拶して、こちらから話かけると、身振りを入れて返事をしてくれるというものです。
20140923_pepper_app

開発環境にシミュレーターでついていますが。
出来ることは、サーボを設定して身振りをつけることくらいです。
それ以外の、センサーや音声認識などは、本体がないと、確認できません。
本格的に開発したい人は、秋葉原に通ってくださいとのことです。


Pepper Tech Festival 2014


20140920_pepper_panel
2014年9月20日に ベルサール渋谷ガーデン で開催された Pepper Tech Festival 2014 に参加しました。

会場は満席で、参加者は2000人くらいでした。
20140920_pepper_place

チームラボの Flash Wave を参加者全員でやりました。
Pepper の指揮の元、WiFi経由で、各自のスマホを光らしたり鳴らしたりします。
ちゃんと同期して動いた。素晴らしい。
写真だと良さが伝わらないのが、ちと残念です。
20140920_pepper_wave_120140920_pepper_wave_2

協賛企業のブースも含めて10台ほどの Pepper が展示してありました。
明和電機Mr.Knocky を振るデモは、軽快に動いていて、面白かった。
SOFNEC の積み木のデモは、Prolog で動いていました。
NAO も展示されてました。大きさは、こっちのほうがいいですね。
20140920_pepper_meiwa20140920_pepper_block.2
20140920_pepper_body20140920_pepper_nao

モデルの変遷やパーツが掲示してありましたっ。
丸いオムニホィールがどういう構造なのか気になりますね。
20140920_pepper_model_20120120140920_pepper_model_201202
20140920_pepper_hand20140920_pepper_wheel

限定200体ということなので、先行予約してきました。
3年間の保守契約がついて、約60万円です。
NAO が約100万なので、それに比べると、格安ですが …
キャンセルできるよね! という声もちらほら。
20140920_pepper_reserve20140920_pepper_mail

参加者全員に SDK が配布されましたが、ライセンス発行がうまくできない人が続出しました。
のちほど、ライセンスが送られてくることになりました。
ひとまず、ラインセンス不要の体験版で動かてみました。
ブロック・エディタ形式で、使いやすい感じです。
20140920_pepper_sdk

ランチは、おにぎり2個、少し手抜きですね。
懇親会は、サンドイッチ・セットとザ・プレミアル・モルツ。美味しかった。
20140920_pepper_lanch_220140920_pepper_dinner

お土産は、Tシャツ、缶バッチ、シール。
20140920_pepper_goods

参考
ascii: 自立ロボPepper、開発者向けイベントで技術仕様やエコシステムが明らかに
itpro: 写真で見るPepperの開発者向けイベント、作曲家や家電リモコンになるPepper
cnet: 人型ロボ「Pepper」が歌い、踊り、家電を操る–展示ブースを一挙紹介
impress: ロボットアプリの未来をオープンコミュニティに賭けるソフトバンク
engadget: リビングにロボットがいる風景: Pepper 第1号ユーザーお宅訪問、戸惑う妻とクリエイター宣言の夫


RAPIRO を動かす


20140301rapiro

Rapiro では Arduino のサンプルスケッチが配布されています。
しかしながら、説明書は付いていません。

最初に行うのは、トリム角度の調整です。
これはオンラインマニュアルの最後に書かれています。

// Fine angle adjustments (degrees)
int trim[MAXSN] = { 0,  // Head yaw
                    0,  // Waist yaw
                    0,  // R Sholder roll
                    0,  // R Sholder pitch
                    0,  // R Hand grip
                    0,  // L Sholder roll
                    10,  // L Sholder pitch
                    0,  // L Hand grip
                    5,  // R Foot yaw
                    3,  // R Foot pitch
                    12,  // L Foot yaw
                    14}; // L Foot pitch

ソースを読んでみたところでは、4種類のコマンドが定義されていました。
(1) Move
(2) Pose
(3) Q
(4) C

Move コマンド

#M0 : Stop 停止
#M1 : Forward 前進
#M2 : Back 後退
#M3 : Right 右回り
#M4 : Left 左回り
#M5 : Greed 目を緑色にする
#M6 : Yellow 目を黄色にする
#M7 : Blue 目を青色にする
#M8 : Red 目を赤色にする
#M9 : Push 右腕を前に延ばす

Pose コマンド

#P のあとに5つのサブコマンドがあります。
S : Servo
R : Red
G : Green
B : Blue
T : Time

Servo
SxxAxxx
Sxx はサーボ番号 00 から 11まで
Axxx はサーボ角度 000 から 180 まで

Red Green Blue
Rxxx Gxxx Bxxx
xxx は明度 000 から 255 まで

Time
Txxx
xxx は時間 000 から 999 まで 単位は 0.1秒

使い方
(1) 単発
#PR128T001 のように使います。
サブコマンドの終了には T が必要です。
#PR128 だとエラーになります。
#PR128T000 だと実行されません。

(2) 組合せ
#P S01A100 R128 T001 のように組合せも出来ます。
全てのサーボとLEDをいっぺんに設定するのが、本来の使い方のようです。

Q コマンド

Move や Pose コマンドで設定した動作を実行させます。

C コマンド

T サブコマンドで設定した時間の残り時間を表示させます。

サーボ番号と稼働範囲

00 : Head yaw : 0 – 90 – 180
01 : Waist yaw : 0 – 90 – 180
02 : R Sholder roll : 0 – 0 – 180
03 : R Sholder pitch : 40 – 130 – 130
04 : R Hand grip : 60 – 90- 110
05 : L Sholder roll : 0 – 180 – 180
06 : L Sholder pitch : 50 – 50 – 140
07 : L Hand grip : 60 – 90- 110
08 : R Foot yaw : 70 – 90 – 130
09 : Foot pitch : 70 – 90 – 110
10 : L Foot yaw : 50 – 90 – 110
11 : L Foot pitch : 50 – 90 – 110

数値は、角度の 最小 – 初期値 – 最大

サーボの特性

EMAX ES3103ES08A の動作角度を180度にしたモデルらしい。


RAPIRO の組立て


20140223rapiro_finish

2014年2月23日(日) FabLab Kannai で Rapiro を組み立てました。
RapiroRapberry Pi から制御する小型のロボットです。
KickStarter で約1千万円の資金調達に成功したプロジェクトです。

当初は一人で組み立てるつもりでしたが。
うまくタイミングがあって、Rapberry Pi ユーザグループの太田さんと大内さんと一緒に作業しました。
一人でやっていたら途中で挫けていたかもしれず、大変ありがたかったです。
組立てに6時間、動作確認に1時間ほどかかりました。

箱を開けると、白い筐体のパーツがあります。
しかし、パーツリストも組み立て手順書もついていません。
代わりに、213枚の写真の オンラインマニュアル が用意されています。

20140223rapiro_parts 20140223rapiro_manual

これを1枚づつ確認しながら作業しました。
似たような部品や分かり難いところもあり、これでいいのかと話しながら進めました。
組立て中の写真は GoogePlus で公開しています。

組立てるときのポイント

(1) プラスドライバー
1mm から 4mm くらいのプラスドライバーを数種類用意しておくといいです。
プラスチックにネジ切りしながら止めるので、握りの太いものがいいです。
精密ドライバーで作業していたら、ドライバーが途中で壊れるわ、指の皮が剥けるわ、悲惨な羽目になりました。

20140223rapiro_finger 080803_155727

(2) サーボを初期化する。これ 重要 です。
(3) 足のサーボのネジ止め。
 ドライバーがまっすぐ入りません。ゆっくり回します。
(4) 配線を腹部に収める。
 この頃には疲れてきて、思うように捗りませんが、あせらず作業します。

20140223rapiro_sarvo 20140223rapiro_foot
20140223rapiro_wire IMG_20140223_181415

組立てに6時間ほどかかり、終わる頃には疲労困憊です。
しかし、まだ、確認作業が待っています。
制御ボードは Arduino 互換です。
マイコンボードは Uno を選択して、サンプルスケッチを実行します。
シリアルモニタでコマンドを送ります。
例えば、 #M1 で前進します。
コマンドの定義は、どこにも書かれてなっかたので、こちらのブログ を参考にしました。

前進させると、おもいっきり左に傾きます。
サーボーを取り付ける際に、すこしずれたみたいです。
スケッチの trim を調整して、まっすぐ前進するようになりました。

YouTube Preview Image

今日はここまでです。
この次は、Rapberry Pi から制御してみます。

大切なお知らせ

梱包材のプラスチックは、運搬時に利用できます。
私は捨ててしまった。(^^;

20140223rapiro_carry

参考
Raspberry Piを搭載して遊べるロボット Rapiroが到着した!
RAPIROを組み立てました


LEGO マインドストーム を公開しました


201307013mindstorm_logo

「LEGO マインドストーム」を Google Play に公開しました。
Android 端末から LEGO Mindstorms NXT を操縦するコントローラです。

このアプリは、2年前にマインドストームを購入したときから、開発を開始しています。その後、徐々に改良してきました。
もう少し機能を追加して、ソースコードを奇麗にしたら、アプリを公開しよう、思いながら、延ばし延ばしになっていました。

明日開催される Google Demo Party にマインドストームを展示します。
これを機会に、Google Play に公開しました。

マインドストームは、7年前から市販されているロボットなので、Google Play には関連アプリが30個ほど公開されています。
今回のアプリの特徴は、ジョイステックコントローラー から操縦できることです。
Android 4.1 (API 16) から追加された InputManager を使っています。
ひとまず、世界初みたいです。

詳しい使い方は LEGO マインドストーム をご覧ください。

関連
アンドロイド から マインドストーム を動かす
アンドロイド の傾きセンサで マインドストーム を動かす
MINDdroid – Shooterbot
入力デバイスの一覧を取得する