自律走行ロボットをプログラミングするということ ~etロボコンの場合~

37
自律走行ロボットを プログラミングするということ ET ロボコンの場合 古賀信哉 ETロボコン北海道地区実行委員会

Upload: shin-ya-koga

Post on 24-Jun-2015

4.123 views

Category:

Education


1 download

DESCRIPTION

2013/09/14 に開催された OSC 2013 Hokkaido で行った、ET ロボコン紹介セミナーで使ったスライド。

TRANSCRIPT

Page 1: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

自律走行ロボットを プログラミングするということ

~ET ロボコンの場合

古賀信哉

ETロボコン北海道地区実行委員会

Page 2: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

ET ロボコンの紹介

自律自立と走行

センサで回りと自分を見る

自律走行へ挑戦するために

はじめに

Page 3: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

ET ロボコンの紹介

Page 4: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

目的

若手技術者や学生向けの学習の場を提供・育成

開催概要

自律走行ロボットの、走行実技と設計モデルを競う

年間スケジュール

実施説明会

技術教育1、2 + 試走会1、2

モデル提出~モデル審査

地区大会実技コンテスト(一般公開)

全国チャンピオンシップ大会

どんなコンテスト?

Page 5: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

競技コース

黒いラインを引いたコース 光センサを使ってライントレース

途中には、坂道やカーブもあり

基本コースのゴール後に難所あり 階段、シーソー

機体を傾けないと通れない高さのゲート

ロボットで何をやるの?

Page 6: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

競技コース

黒いラインを引いたコース 光センサを使ってライントレース

途中には、坂道やカーブもあり

基本コースのゴール後に難所あり 階段、シーソー

機体を傾けないと通れない高さのゲート

パフォーマンスステージ(新設!)

ベーシックコース後の自由パフォーマンス

ロボットで何をやるの?

「アーキテクト部門」を新設。

Page 7: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

走行実技

共通のハードウェアを使う

ソフトウェアの出来を競う

設計モデル

構造モデルと振る舞いモデルを中心に記述

「これは走りそうだ」と分かる内容は高評価

何を競うの?

Page 8: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

ちゃんと走らせること

直進コースを直進し、カーブで曲がる

坂道で倒れず、ラインを見失わない

難所に着いたことを検出して動きを変える

ちゃんと設計すること

構造、振る舞いのモデルの一貫性(UML)

前提の適切さ、仮説と検証の妥当性(性能)

何が難しいの?

Page 9: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

機体

LEGO Mindstorms NXT

OS とプラットフォーム

nxtOSEK (TOPPERS/JSP, etc.) (OSS)

プログラミング環境

Cygwin/gcc (OSS): C 言語 ARM ツールチェイン

何を使うの?

Page 10: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

機体が持っているもの

光センサーと LED

左右の車輪(モーター)

ソフトウェア(CPU)

Bluetooth

ジャイロセンサ 超音波センサ

ロータリエンコーダ (左右のモータに付属)

Page 11: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

自立と走行 ~自律の前に、まず自立

Page 12: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

何が難しいのか

倒立振子制御 API extern void balance_control(

F32 args_cmd_forward, 前進/後退速度

F32 args_cmd_turn, 旋回速度

F32 args_gyro, ジャイロセンサ

F32 args_gyro_offset, ジャイロオフセット

F32 args_theta_m_l, ロータリエンコーダ左

F32 args_theta_m_r, ロータリエンコーダ右

F32 args_battery, バッテリ電圧

S8* ret_pwm_l,

S8* ret_pwm_r);

どうやって立つの?

Page 13: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

何が難しいのか

倒立振子制御 API extern void balance_control(

F32 args_cmd_forward, 前進/後退速度

F32 args_cmd_turn, 旋回速度

F32 args_gyro, ジャイロセンサ値

F32 args_gyro_offset, ジャイロオフセット値

F32 args_theta_m_l, ロータリエンコーダ左

F32 args_theta_m_r, ロータリエンコーダ右

F32 args_battery, バッテリ電圧

S8* ret_pwm_l, モータ回転強度左

S8* ret_pwm_r); モータ回転強度右

どうやって立つの?

API が計算して出したモータ回転強度の値を、モータ制御 API に渡して動かす。

Page 14: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

完全静止できない!

デモで分かること(倒立制御)

Page 15: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

完全静止できない!

デモで分かること(倒立制御)

倒立制御では、ジャイロセンサの値を見ながら、倒れないように車輪を小刻みに動かします。 車輪が動くので、静止できません。

Page 16: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

倒立振子制御 API

静止の場合と API は同じ

前進・後退

前進・後退速度を指定

右旋回・左旋回

旋回速度を指定

走行するには

Page 17: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

直進しない!

デモで分かること(走行制御)

Page 18: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

直進しない!

デモで分かること(走行制御)

同じ回転強度をモータ制御 API に指定しても、左右のモータの特性が違います。思った通りには直進しません。 車輪の取り付けがわずかに左右ずれていれば、それも影響します。

Page 19: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

自立の仕組み

ジャイロセンサで傾き動作(角速度)検出

傾きを解消するために車輪を動かす ジャイロセンサ API と倒立振子制御計算 API

モーター制御 API

課題

倒立振子は静止しない

まっすぐ走らない

車は急に止まらない・走らない

自立と走行(まとめ)

Page 20: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

自立の仕組み

ジャイロセンサで傾き動作(角速度)検出

傾きを解消するために車輪を動かす ジャイロセンサ API と倒立振子制御計算 API

モーター制御 API

課題

倒立振子は静止しない

まっすぐ走らない

車は急に止まらない・走らない

自立と走行(まとめ)

前進・後退中に速度を一気に落とすと、簡単に転倒します!

Page 21: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

センサで回りと自分を見る ~目を開いてみよう

Page 22: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

ジャイロセンサ:角速度

光センサと LED

ロータリエンコーダ

超音波センサ

タッチセンサ:スタート指示に使える

機体に装着されたセンサの一覧

Page 23: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

光センサと LED:反射光

地面の色が反射光の強さに対応

デモで分かること

地面の色(明るさ)を見る

Page 24: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

ロータリエンコーダ:車輪の回転角

剛体モデルで考える

デモで分かること

車輪の動きで自分の動きを知る

Page 25: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

超音波センサ:前方物体までの距離

距離計測の仕組み

デモで分かること

前方障害物との距離を知る

Page 26: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

センサで検出できるもの

傾き角度動作: ジャイロセンサ

左右の車輪の回転角: ロータリエンコーダ

前方物体との距離: 超音波センサ

課題

光センサからの入力値は不安定 外乱光

倒立振子機体の傾き動作

センサ自体の精度

センサで回りと自分を見る(まとめ)

Page 27: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

課題(続き)

足元の障害物は検出できない(難所攻略時) どうやれば?

理想モデルと実データのかい離 まずは実測!

実測に基づいてモデルを修正

センサで回りと自分を見る(まとめ)

Page 28: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

自律走行へ挑戦するために

Page 29: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

ライントレース?

自分を知る、世界を知る

自律って何だろう

Page 30: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

車は急に止まれない、曲がれない

比例制御

積分制御、微分制御

制御動作の最適化

Page 31: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

剛体モデルで計算

推定結果と現実の違いを補正

自己位置推定

Page 32: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

階段に出くわしたことを知るには

走り過ぎて落ちないために

シーソーを通り抜ける

難所攻略

Page 33: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

外乱の影響をどうやって防ぐ?

自己位置推定を補完

「チェックポイント」を作ろう

適応型にするために

ライントレースの精度を上げる

Page 34: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

ET ロボコン

http://www.etrobo.jp/2013/

LEGO Mindstorms NXT の入手先

http://www.afrel.co.jp/lineup/robocon

http://afrel-shop.com/shopdetail/008000000003/order/

NXT 拡張ファームウェアと nxtOSEK の入手先

http://lejos-osek.sourceforge.net/jp/installation_enf.htm

これから始めるには

Page 35: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

nxtOSEKのタスク/スレッド仕様

nxtOSEK/toppers_osek/doc/

リアルタイム処理用の優先度仕様

Etrobo APIの内部

センサからの入力をどう受け取っているか

ハードウェアの特性

センサやモータのばらつき、入力・応答特性

電池の残量の違いにも注意

仕組みをもっと知っておこう

Page 36: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

nxtOSEKのタスク/スレッド仕様

nxtOSEK/toppers_osek/doc/

リアルタイム処理用の優先度仕様

Etrobo APIの内部

センサからの入力をどう受け取っているか

ハードウェアの特性

センサやモータのばらつき、入力・応答特性

電池の残量の違いにも注意

仕組みをもっと知っておこう

スリープ関数がスリープしない(busy loop による待ち動作)なので要注意! マルチスレッド実装は「周期アラーム」が便利。

Page 37: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~

今日のプレゼンで使ったソースコード

以下のページで公開しています: http://www.stprec.co.jp/project/

ここから先は、みなさんで