自律走行ロボットをプログラミングするということ ~etロボコンの場合~
DESCRIPTION
2013/09/14 に開催された OSC 2013 Hokkaido で行った、ET ロボコン紹介セミナーで使ったスライド。TRANSCRIPT
![Page 1: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/1.jpg)
自律走行ロボットを プログラミングするということ
~ET ロボコンの場合
古賀信哉
ETロボコン北海道地区実行委員会
![Page 2: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/2.jpg)
ET ロボコンの紹介
自律自立と走行
センサで回りと自分を見る
自律走行へ挑戦するために
はじめに
![Page 3: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/3.jpg)
ET ロボコンの紹介
![Page 4: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/4.jpg)
目的
若手技術者や学生向けの学習の場を提供・育成
開催概要
自律走行ロボットの、走行実技と設計モデルを競う
年間スケジュール
実施説明会
技術教育1、2 + 試走会1、2
モデル提出~モデル審査
地区大会実技コンテスト(一般公開)
全国チャンピオンシップ大会
どんなコンテスト?
![Page 5: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/5.jpg)
競技コース
黒いラインを引いたコース 光センサを使ってライントレース
途中には、坂道やカーブもあり
基本コースのゴール後に難所あり 階段、シーソー
機体を傾けないと通れない高さのゲート
ロボットで何をやるの?
![Page 6: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/6.jpg)
競技コース
黒いラインを引いたコース 光センサを使ってライントレース
途中には、坂道やカーブもあり
基本コースのゴール後に難所あり 階段、シーソー
機体を傾けないと通れない高さのゲート
パフォーマンスステージ(新設!)
ベーシックコース後の自由パフォーマンス
ロボットで何をやるの?
「アーキテクト部門」を新設。
![Page 7: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/7.jpg)
走行実技
共通のハードウェアを使う
ソフトウェアの出来を競う
設計モデル
構造モデルと振る舞いモデルを中心に記述
「これは走りそうだ」と分かる内容は高評価
何を競うの?
![Page 8: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/8.jpg)
ちゃんと走らせること
直進コースを直進し、カーブで曲がる
坂道で倒れず、ラインを見失わない
難所に着いたことを検出して動きを変える
ちゃんと設計すること
構造、振る舞いのモデルの一貫性(UML)
前提の適切さ、仮説と検証の妥当性(性能)
何が難しいの?
![Page 9: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/9.jpg)
機体
LEGO Mindstorms NXT
OS とプラットフォーム
nxtOSEK (TOPPERS/JSP, etc.) (OSS)
プログラミング環境
Cygwin/gcc (OSS): C 言語 ARM ツールチェイン
何を使うの?
![Page 10: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/10.jpg)
機体が持っているもの
光センサーと LED
左右の車輪(モーター)
ソフトウェア(CPU)
Bluetooth
ジャイロセンサ 超音波センサ
ロータリエンコーダ (左右のモータに付属)
![Page 11: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/11.jpg)
自立と走行 ~自律の前に、まず自立
![Page 12: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/12.jpg)
何が難しいのか
倒立振子制御 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ロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/13.jpg)
何が難しいのか
倒立振子制御 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ロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/14.jpg)
完全静止できない!
デモで分かること(倒立制御)
![Page 15: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/15.jpg)
完全静止できない!
デモで分かること(倒立制御)
倒立制御では、ジャイロセンサの値を見ながら、倒れないように車輪を小刻みに動かします。 車輪が動くので、静止できません。
![Page 16: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/16.jpg)
倒立振子制御 API
静止の場合と API は同じ
前進・後退
前進・後退速度を指定
右旋回・左旋回
旋回速度を指定
走行するには
![Page 17: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/17.jpg)
直進しない!
デモで分かること(走行制御)
![Page 18: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/18.jpg)
直進しない!
デモで分かること(走行制御)
同じ回転強度をモータ制御 API に指定しても、左右のモータの特性が違います。思った通りには直進しません。 車輪の取り付けがわずかに左右ずれていれば、それも影響します。
![Page 19: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/19.jpg)
自立の仕組み
ジャイロセンサで傾き動作(角速度)検出
傾きを解消するために車輪を動かす ジャイロセンサ API と倒立振子制御計算 API
モーター制御 API
課題
倒立振子は静止しない
まっすぐ走らない
車は急に止まらない・走らない
自立と走行(まとめ)
![Page 20: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/20.jpg)
自立の仕組み
ジャイロセンサで傾き動作(角速度)検出
傾きを解消するために車輪を動かす ジャイロセンサ API と倒立振子制御計算 API
モーター制御 API
課題
倒立振子は静止しない
まっすぐ走らない
車は急に止まらない・走らない
自立と走行(まとめ)
前進・後退中に速度を一気に落とすと、簡単に転倒します!
![Page 21: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/21.jpg)
センサで回りと自分を見る ~目を開いてみよう
![Page 22: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/22.jpg)
ジャイロセンサ:角速度
光センサと LED
ロータリエンコーダ
超音波センサ
タッチセンサ:スタート指示に使える
機体に装着されたセンサの一覧
![Page 23: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/23.jpg)
光センサと LED:反射光
地面の色が反射光の強さに対応
デモで分かること
地面の色(明るさ)を見る
![Page 24: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/24.jpg)
ロータリエンコーダ:車輪の回転角
剛体モデルで考える
デモで分かること
車輪の動きで自分の動きを知る
![Page 25: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/25.jpg)
超音波センサ:前方物体までの距離
距離計測の仕組み
デモで分かること
前方障害物との距離を知る
![Page 26: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/26.jpg)
センサで検出できるもの
傾き角度動作: ジャイロセンサ
左右の車輪の回転角: ロータリエンコーダ
前方物体との距離: 超音波センサ
課題
光センサからの入力値は不安定 外乱光
倒立振子機体の傾き動作
センサ自体の精度
センサで回りと自分を見る(まとめ)
![Page 27: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/27.jpg)
課題(続き)
足元の障害物は検出できない(難所攻略時) どうやれば?
理想モデルと実データのかい離 まずは実測!
実測に基づいてモデルを修正
センサで回りと自分を見る(まとめ)
![Page 28: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/28.jpg)
自律走行へ挑戦するために
![Page 29: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/29.jpg)
ライントレース?
自分を知る、世界を知る
自律って何だろう
![Page 30: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/30.jpg)
車は急に止まれない、曲がれない
比例制御
積分制御、微分制御
制御動作の最適化
![Page 31: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/31.jpg)
剛体モデルで計算
推定結果と現実の違いを補正
自己位置推定
![Page 32: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/32.jpg)
階段に出くわしたことを知るには
走り過ぎて落ちないために
シーソーを通り抜ける
難所攻略
![Page 33: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/33.jpg)
外乱の影響をどうやって防ぐ?
自己位置推定を補完
「チェックポイント」を作ろう
適応型にするために
ライントレースの精度を上げる
![Page 34: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/34.jpg)
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ロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/35.jpg)
nxtOSEKのタスク/スレッド仕様
nxtOSEK/toppers_osek/doc/
リアルタイム処理用の優先度仕様
Etrobo APIの内部
センサからの入力をどう受け取っているか
ハードウェアの特性
センサやモータのばらつき、入力・応答特性
電池の残量の違いにも注意
仕組みをもっと知っておこう
![Page 36: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/36.jpg)
nxtOSEKのタスク/スレッド仕様
nxtOSEK/toppers_osek/doc/
リアルタイム処理用の優先度仕様
Etrobo APIの内部
センサからの入力をどう受け取っているか
ハードウェアの特性
センサやモータのばらつき、入力・応答特性
電池の残量の違いにも注意
仕組みをもっと知っておこう
スリープ関数がスリープしない(busy loop による待ち動作)なので要注意! マルチスレッド実装は「周期アラーム」が便利。
![Page 37: 自律走行ロボットをプログラミングするということ ~ETロボコンの場合~](https://reader033.vdocuments.net/reader033/viewer/2022052205/558a2e9ed8b42ac25d8b4633/html5/thumbnails/37.jpg)
今日のプレゼンで使ったソースコード
以下のページで公開しています: http://www.stprec.co.jp/project/
ここから先は、みなさんで