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

Post on 24-Jun-2015

4.123 Views

Category:

Education

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

~ET ロボコンの場合

古賀信哉

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

ET ロボコンの紹介

自律自立と走行

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

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

はじめに

ET ロボコンの紹介

目的

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

開催概要

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

年間スケジュール

実施説明会

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

モデル提出~モデル審査

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

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

どんなコンテスト?

競技コース

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

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

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

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

ロボットで何をやるの?

競技コース

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

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

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

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

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

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

ロボットで何をやるの?

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

走行実技

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

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

設計モデル

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

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

何を競うの?

ちゃんと走らせること

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

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

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

ちゃんと設計すること

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

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

何が難しいの?

機体

LEGO Mindstorms NXT

OS とプラットフォーム

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

プログラミング環境

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

何を使うの?

機体が持っているもの

光センサーと LED

左右の車輪(モーター)

ソフトウェア(CPU)

Bluetooth

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

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

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

何が難しいのか

倒立振子制御 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 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 に渡して動かす。

完全静止できない!

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

完全静止できない!

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

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

倒立振子制御 API

静止の場合と API は同じ

前進・後退

前進・後退速度を指定

右旋回・左旋回

旋回速度を指定

走行するには

直進しない!

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

直進しない!

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

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

自立の仕組み

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

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

モーター制御 API

課題

倒立振子は静止しない

まっすぐ走らない

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

自立と走行(まとめ)

自立の仕組み

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

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

モーター制御 API

課題

倒立振子は静止しない

まっすぐ走らない

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

自立と走行(まとめ)

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

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

ジャイロセンサ:角速度

光センサと LED

ロータリエンコーダ

超音波センサ

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

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

光センサと LED:反射光

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

デモで分かること

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

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

剛体モデルで考える

デモで分かること

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

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

距離計測の仕組み

デモで分かること

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

センサで検出できるもの

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

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

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

課題

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

倒立振子機体の傾き動作

センサ自体の精度

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

課題(続き)

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

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

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

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

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

ライントレース?

自分を知る、世界を知る

自律って何だろう

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

比例制御

積分制御、微分制御

制御動作の最適化

剛体モデルで計算

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

自己位置推定

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

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

シーソーを通り抜ける

難所攻略

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

自己位置推定を補完

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

適応型にするために

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

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

これから始めるには

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

nxtOSEK/toppers_osek/doc/

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

Etrobo APIの内部

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

ハードウェアの特性

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

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

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

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

nxtOSEK/toppers_osek/doc/

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

Etrobo APIの内部

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

ハードウェアの特性

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

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

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

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

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

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

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

top related