IoT寺子屋:(Arduino&Processing入門)IMUセンサでデジタルツインしちゃうよん
イベント内容
IoT寺子屋 Arduino &Processingによるデジタルツイン作成IoTハンズオン
【本ハンズオンのテーマ】
Arduinoを使って加速度・ジャイロのセンサー情報から物体の姿勢を検知するフィルタを勉強します。
このフィルタはドローンの姿勢制御などに使われているもので 四元数(しげんすう・クォータニオン)という数学的なツールを使って創出された技術です。
「数学って何の役に立つの?」と思っている方にこういう数学がないと例えばドローンを 制御することができないんだと痛感していただけると思います。
センサーの値の取り方(I2C)と取れた値を実際にモノの動作の認識に使う理論を通して IoT(モノのインターネット)の概要を掴みます。
すべて実地でハンズオン体験します。 今回は電子工作だけでなく若干の数式の説明なども致します。(三角比と微分積分の復習から)
なお、今回のハンズオンではお持ちのパソコンにOpenGLという機能に対応したドライバが入っているかどうかで 実行できる機能とそうでないものがあります。
3Dのグラフィクスのドライバなのですがパソコンの仕様上どうしても無理という こともあり、当方では「確実にできる」ということをパソコンの機種名などからは判断できません。
それでも勉強する価値のある内容になりますが気になる方はProcessingという開発環境を事前にインストールの上 このイベント案内の最後のところにあるプログラムを実行できるか確認してください。
※IoTの全体像をわかりやすく理解させながら進めます
(習得スキル) ・ArduinoIDEの開発環境の使い方
・センサーマイコンからパソコンにデータを取り込んでビジュアルに見せる技術
・I2Cというセンサーの通信をArduinoの標準ライブラリ(Wire)だけで実現する技術
(どんなI2C機器も使えるようになります。 また特殊なArduinoマイコンでも動かせるようになると思います。ATTINYなど)
※言語はc言語(Arduino標準)です。ソースコードの意味もきちんと解説します。 (サンプルをとにかくコンパイルさせられて終わる・・・ということはありません)
※リピータの方はアンケートの割引条件は無視していただき(該当してるはずです) 8000円でご参加いただけます。アンケートの最後に「リピータです」と書いてください。
※学生さんを想定した割引を設けました。ただし経営事情からお一人までです。 (お友達連れてきたいときは相談ください。普通枠のお客さんの状況により対応します。)
IoT寺子屋の使命として世界の将来担う若い技術者の卵をお招きし、
すこしでもプラスのなにかを提供したいからです。
この割引枠は25歳以下の学生さんならよいとします。
高専または電子専門学校あるいはなんらかの専門学校も可、専門の文理を問いません。
専門学校も簿記でもアニメーションでもヘアメイクでもかまいません。
これまで文系の人もIoT寺子屋に来てますので、若いうちに違う学際分野を学んでみたいという人を 歓迎したい思いもあります。
高校生以上としてますが 内容的に三角比をなんとなく知っていて意欲があれば中学生でもわかると思います。
【ハンズオンの説明/実習アジェンダ】
【時間】 朝11時半ー16時(昼食休憩ありですが、お持ち込み可能です) ※なお17時まで延長が可能なように場所は借りています。
場所は銀座線田原町駅の目の前、浅草めぐりを兼ねていらっしゃいませんか
【全員集合】11:30-
(5分)
・主催者と参加者の自己紹介
(150分)
・フィジカルコンピューティング
フィジカルコンピューティングとは何か? AI・ビッグデータ・IoTの関係 非構造データの活用の現在 センサーデータがもたらす可能性 本日の講座のカバー範囲
・ProcessingによるPCグラフィクス練習
・ブレッドボードと結線の説明
・センサー一般の説明(今回使わないSPI形式も含めてSPI/I2Cという一般的なセンサーの接続規格をご説明します)
・I2C通信とWireライブラリ(MPU6050を使い倒す。設定レジスタ/データ読み取りシフト演算)
【数学講座:以下の内容から参加者の進み具合見て緩急つけてご説明します。( )の中は省いていく可能性大です】
(二次元の回転)
・三角比/三角関数/ラジアン(/三角関数の微分・積分/マクローリン展開)
・複素平面の回転と二次元平面の回転、ベクトル基底
・行列演算/パウリ行列/一次変換/固有値と固有ベクトル
(三次元の回転)
・ベクトルの内積・外積
(・ベクトル解析の公式とレビィ・チビタ記号)
・四次元空間のベクトル基底とクォータニオン
・マジウィックフィルタ
【デジタルツインコーディング】
・センサーフュージョン(複数のセンサー値から状況を推理するセンサーの使い方)
・実装 コーディング解説
【本ハンズオンの対象者】
•IoTに関心のある方
•電子工作やプログラミングに興味のある方
•ただの電子工作の一歩先を数学や物理学からヒント得てやって見たい方
•フィジカルコンピューティングを始めてみたい方
※電子工作やプログラミングの経験は問いません。
※ブレッドボードなども知らない前提で説明します
※数学も三角関数の復習から始めます。わかりやすく努力します。
ご参加された方からは数学が難しいというお話を伺ってます。 ・・・そうだったかもしれませんが、私としては次も前提ゼロで参加者をお迎えしますし 興味とちょっとの根気で身に着けていただけると思います。 少し手書きで補強講義と板書してみます⇒きっとわかります。(&11月の内容がよく伝われば10月の参加者にもフィードバックします) ただし、数学以外のところはそれなりに充実しています。
【配布物】
・講習資料(紙ベース。カラーで図解を多くしています。・・・が今回は数式多めです。60page相当)
・ArduinoNANO互換マイコンボード
・miniUSBコード
・加速度/角速度(ジャイロ)センサーMPU6050(MPU9250などと同様) ピンのはんだづけなどは時間の都合で当方でしてしまいます。
・回路をつなぐためのジャンパワイヤ必要分
・ブレッドボード(170穴ミニタイプ)
・タッパー型入れ物
【参加者にお持ちいただくもの】
•WINDOWS8以降が走るノートパソコンまたはマッキントッシュパソコン
こちらにArduinoの開発環境IDEをインストールしてハンズオンしていただきます。
【テーマ選定のポリシー】
どこかのIT企業が自社の開発環境のユーザーを増やすために 宣伝を兼ねて実施するみたいなハンズオンはやりたくありません。
個人で電子工作etcのモノづくりをする場合、 個人では買えないような開発環境でやるハンズオンは いくら簡単に開発できようが、無料だろうが何の意味もないからです。
一過性の技術よりも長く存続する技術を、しっかりお伝えすることを狙いにして IoTの教材として、Arduinoを選びました。
初めての方には少しもりだくさんかもしれませんが費用に見合うように しっかり理解していただくことを意図しています。 よそのハンズオンでいまいち原理がわからなかったという方もぜひお尋ねください。
Topの写真のようにわきあいあいと座談形式で講師があなたの横でソースコードみながら教えます
ちなみに講師は顔に目線ないストライプのニット帽の人物です。 みなさんのPCを覗き込みながら目標を一緒に目指します。だからITに自信ない人も落ちこぼれません。 IoT寺子屋に来ればC言語初めての人が電子部品初めて触ってセンサーのデータ飛ばしまくります^^=マジです。
ダウンロードとコンパイルの連続・・・ではありません。
【今回の数学について】
IoTというのは電子工作できてデータを取り込めば終わり・・という安直なものと考えられがちだな と感じています。IoTってセンサーの値読み込むだけ・・・ではないんです。
数学どころか物理学も必要なことがある。大変だけどそこが面白い…と思うんです。
モノのインターネットで扱う「モノ」はセンサーがなければ目が見えませんし、音を聞くこともできないし、熱さを感じることもできないのです。振動がとても少ないリニアモータカーが時速500kmで動いていても、目をつぶっていれば静止してるのと変わらなく感じることでしょう。 モノを外からみてると人間には当たり前に知覚できてることをモノ自身にわからせるために数学や物理が必要なのだと感じていただけるようにこの題材を選びました。
少し膨大なのでかいつまみながら、お手元には帰ってからでも読み直していただける資料をお付けしてお届けします。
クォータニオンはコンピュータグラフィクスに関わる方などがよく学ばれてるようです。
【講師自己紹介】
大邦将猛(おおくにまさたけ) 生産管理/在庫管理コンサルタント。技術士(経営工学)。
理工系大学院卒業。(原子核工学科) 大手製造業で生産工程の研究員5年 ベンチャーITベンダー6年(半年スウェーデン在住勤務) コンサルティングファーム3年(一年オランダ在住勤務) 大手ITベンダー10年勤務
【Processing 動作確認用ソースコード】
以下のソースをProcessingで実行してみてください 動かない場合は講師のパソコンで演習をします(なお、今回は動かなくてもかなりの部分ができます。)
float a,b,c;
void setup() {
size(400,400,P3D);
background(100);
rectMode(CENTER);
fill(51);
stroke(255);
a = 0;
}
void draw() {
background(100);
if(a==200){a=0;}
if(b==100){b=0;}
if(c==400){c=0;}
translate(200, 200, 0);
rotateX(PI*a/200);
rotateY(PI*b/100);
rotateZ(PI*c/400);
rect(0,0,200,200);
a++;
b++;
c++;
}
【お問い合わせ】
当ページの問い合わせ先リンクからお願いします。 会場のお店には連絡なさらないでください(場所をお借りしているだけです)
注意事項
※ 掲載タイミングや更新頻度によっては、情報提供元ページの内容と差異が発生しますので予めご了承ください。
※ 最新情報の確認や参加申込手続き、イベントに関するお問い合わせ等は情報提供元ページにてお願いします。