1.1K Views
April 14, 24
スライド概要
紹介動画:https://www.youtube.com/watch?v=Kb6i3Q7-L8E
概要:
飛行中にどこかにぶつかって機体を壊さないか?バッテリーがなくならないか?そんな心配をせずに、沢山ドローンを手軽に飛ばしたいですよね!シミュレーションの世界では、安全な箱の中で、試行錯誤をたくさん繰り返すことができます。
今回のセミナーでは、オープンソースを使ったドローンシミュレータの作り方を徹底解説します!ドローンの飛行の仕組みから始めて、必要なソフトウェアや開発環境/ツール類などを一巡りします。フライトコントローラ向けのファームウェアとしては、PX4というオープンソースを使います。物理的な機体の動きの再現は、物理式をベースにイチからC言語でコーディングします。機体の動きのビジュアライズには、個人向けにフリーで利用できるUnityやUnreal Engineを使います。そして、これらの要素技術を組み合わせる仕組みには、箱庭というオープンソースを使います。
箱庭は、さまざまな制御ソフトウェアやシミュレータを繋げるハブです。このようなシミュレーションハブでは、今回ご紹介するソフトウェアだけでなく、様々なソフトウェアとの連携を可能にします。可能性の広がりは無限大であり、箱庭ドローンシミュレータは、そういった構想で構築されたシミュレータなのです。誰でも手軽に、安全な箱の中でドローンの試作や実験を楽しめますので、これからドローンを使い始める方や、従来のやり方で困っている方々にとってお役に立てる情報が沢山あると思います。初心者から上級者の方まで楽しめる内容だと思いますので、ぜひご視聴ください!
TOPPERS/箱庭WG活動でUnityやらAthrillやらmROSやら触ってます。 最近は仕事の関係でWeb系の技術に注力しつつ、箱庭への転用を模索しています。 2023年8月1日:合同会社箱庭ラボに移動しました
オープンソースで作る箱庭ドローン シミュレーションの技術を徹底解説 合同会社箱庭ラボ 森崇
アジェンダ 1. お話しする範囲 2. 箱庭ドローンシミュレータとは 3. ドローンの⾶⾏原理 4. ドローンの数学・物理・制御⼊⾨ 5. ドローンの数値シミュレーション実現⽅法 6. オープンソース技術の紹介(QGC、 PX4) 7. ゲームエンジンの使い所 8. 箱庭ドローンシミュレータの構築 9. なぜ箱庭じゃなきゃダメなのか︖ 2
お話しする範囲 • オープンソースベースでのドローン技術のエコシステム Open Source HardWare Pixhawk Closed Product Software User Application Firmware PX4 Ground Station QGC Simulation SILS DJI HILS Hakoniwa AirSim Gazebo Drone Control Position/Speed Attitude ArduPilot Mission Planner Game Engine Unity Unreal Personal Use Free Software 3
箱庭ドローンシミュレータとは • こちらで⼀般公開しています︕ 4
箱庭ドローンシミュレータのアーキテクチャ PX4 on SITL 4560/TCP hakoniwa-px4sim Drone Physics/Sensor (C/C++) Drone Control (C/C++) Generate MATLAB/Simulink Plant/ Sensor Model Simulation parameters Hakoniwa Scenario Test 18570/UDP Python scenario Game Engine Unity Unreal Engine QGroundControl PS4 Controller 箱庭は様々なソフトウェアを繋げるハブです︕ 5
箱庭ドローンシミュレータの歩き⽅ 箱庭ドローンシミュレータの仕組みを理解するために必要な内容を説明します ①-1 ドローンの⾶⾏原理 ①-2 シミュレーションでの実現⽅法 ⑤-1 箱庭の仕組み ⑤-2 構築⽅法 ②-1 PX4とは ②-2 SITLとは ③-1 QGCとは ③-2 ドローンの動かし⽅ ④-1 ゲームエンジンの使い所 6
ドローンの⾶⾏原理 • ドローンの機体と⾶⾏原理 • ドローンの構造(クアッドコプタ) • ドローンの並進運動 • ドローンの回転運動 7
ドローンの構造(クアッドコプタ) • クアッドコプタとは • ロータ4個で機体の推⼒とトルクを発⽣させて⾶⾏する • ロータとは • プロペラを回転させるためのモーター • ドローンの推⼒・トルクを発⽣させる • ロータの特性として、回転⽅向と最⼤回転数などがある • 今回の解説で使う機体 • 左右・前後を対象としています • ロータ1と2が逆回転(CCW) • ロータ3と4が正回転(CW) 8
ドローンの並進運動 • 垂直⽅向移動 • 4つのローターを同じ回転速度で回転させることで上昇⽅向の推⼒を発⽣させます • 推⼒>質量✖重⼒︓上昇 • 推⼒=質量✖重⼒︓ホバリング • 推⼒<質量✖重⼒︓下降 • 推⼒はローターの回転速度の2乗に⽐例します • ⽔平⽅向移動 • 左右⽅向 • 機体を左側に傾けると左⽅向へ移動します • 機体を右側に傾けると右⽅向へ移動します • 前後⽅向 • 機体を前側に傾けると前⽅向へ移動します • 機体を後側に傾けると後⽅向へ移動します 9
移動の様⼦(デモ) 上昇 左⽅向移動 前⽅向移動 10
ドローンの回転運動 • Roll/Pitch/Yawの⽤語 • Roll/Pitch⽅向の回転 • 左右・前後の推⼒の差がトルクになる 11
ドローンの回転運動 • Yaw⽅向の回転 • ロータ回転⽅向と逆トルクが発⽣する • 反トルクの差がYaw⽅向の回転トルクを⽣む 反トルク発⽣の様⼦︓ ⾚⽮印の反トルクが⼤き いので、その⽅向に機体 が回転する 12
回転の様⼦(デモ) 13
アジェンダ 1. お話しする範囲 2. 箱庭ドローンシミュレータとは 3. ドローンの⾶⾏原理 4. ドローンの数学・物理・制御⼊⾨ 5. ドローンの数値シミュレーション実現⽅法 6. オープンソース技術の紹介(QGC、 PX4) 7. ゲームエンジンの使い所 8. 箱庭ドローンシミュレータの構築 9. なぜ箱庭じゃなきゃダメなのか︖ 14
ドローンの数学・物理・制御⼊⾨ 15 詳細はこちらを参照ください。 • https://speakerdeck.com/hiranabe/math-physics-and-dynamics-of-drone-in-hakoniwa
ドローンの数値シミュレーション実現⽅法 • 微分⽅程式を数値シミュレーションする⽅法 • オイラー法 • ルンゲクッタ法 • 機体パラメータの決め⽅(試⾏錯誤中・・) • 本体 • 質量、機体サイズ、空気抵抗係数 • ローター • 最⼤回転数、ホバリング時の回転数、応答時間 • ローターの配置と回転⽅向、慣性モーメント、ホバリング時の回転数 • 反トルクのパラメータBとJr 16
微分⽅程式を数値シミュレーションする⽅法 • 微分⽅程式(例) • • !" !# =− $ (cos 𝜑 sin 𝜃 cos 𝜓 % + sin 𝜓 sin 𝜑) − ! 𝑥 % = 𝐹 𝑡, 𝑥(𝑡) オイラー法 • 時間微分を以下のように展開 • ! "#△" %! " △" = 𝐹(𝑡, 𝑥(𝑡)) • 時間 𝑡 +△ 𝑡 の 𝑥 𝑡 +△ 𝑡 • 𝑥 𝑡 +△ 𝑡 =𝐹 𝑡, 𝑥 △ 𝑡 + 𝑥(𝑡) • △𝑡 シミュレーションでは、 𝑡 • 初期値𝑥(0) およびパラメータ決めて、 • 𝐹 𝑥 △𝑡 • を連続して⾜し上げていきます。 • (他の変数の値φやθ等も同様にして計算します) 𝑥(𝑡 +△ 𝑡) 𝑥(𝑡) 𝑡 +△ 𝑡 メリット 実装が簡単 デメリット Δtを⼗分に⼩さくしないと、 誤差が⼤きくなる可能性があります。 (今回は、0.003secとしています) 17
微分⽅程式を数値シミュレーションする⽅法 • 4次ルンゲ=クッタ法 𝑘) • 𝑘! = 𝐹(𝑡, 𝑥(𝑡)) ∆$ • 𝑘" = 𝐹(𝑡 + " ∆$ • 𝑘% = 𝐹(𝑡 + " ,𝑥 𝑡 + ,𝑥 𝑡 + ∆$ " ∆$ " 𝑘! ) • • △$ = ! + 𝑥 𝑡 + ∆𝑡𝑘# 𝑘" ) • 𝑘& = 𝐹(𝑡 + ∆𝑡, 𝑥 𝑡 + ∆𝑡𝑘% ) ' $(△$ *' $ 𝑥(𝑡 + ∆𝑡) 𝑘! + 2𝑘" + 2𝑘% + 𝑘& 𝑥 𝑡 + ∆𝑡𝑘" /2 𝑥 𝑡 + ∆𝑡𝑘! /2 𝑥(𝑡) 考え⽅ • 𝑘& ︓時刻 𝑡 の傾き。 • 𝑘) ︓時刻 𝑡 + 𝑘& 𝑡 • 4つの傾きの平均値から次の時間を予測する • 𝑘' ︓時刻 𝑡 + 1 𝑘! 6 ∆# ' ∆# ' の傾き。 𝑥は 𝑘& から予測したものを利⽤ + 2𝑘 " + 2𝑘 # + 𝑘$ 𝑥(𝑡 +△ 𝑡) 𝑘( 𝑘' 𝑡 +△ 𝑡/2 𝑡 +△ 𝑡 メリット 実装はそれほど難しくない オイラー法より精度が良い デメリット 計算量が若⼲多くなる の傾き。 𝑥は 𝑘' から予測したものを利⽤ • 𝑘* ︓時刻 𝑡 + ∆𝑡 の傾き。 𝑥は 𝑘) から予測したものを利⽤ 18
機体のパラメータ • https://www.biccamera.com/bc/item/6621239/ • 本体重量︓約80 g(プロペラとバッテリー含む) 本体サイズ(幅×⾼さ×奥⾏mm)︓98×92.5×41 パラメータ 役割 単位 d 空気抵抗係数 𝑁 Ixx, Iyy, Izz 慣性モーメント K𝑔 / 𝑚" m 機体の質量 Tr ロータの応答時間 Kr ロータのゲイン A ロータ推⼒の⽐例係数 B 反トルクの⽐例係数 𝑁 / 𝑚 / 𝑠" (パラメータ探索) Jr ロータの慣性モーメント 𝑁 / 𝑚 / 𝑠" (パラメータ探索) Rotor position ロータの配置 𝑚 左右・前後対称 幅︓0.05m Hovering RPM ホバリング時のロータ回転速度 𝑟𝑝𝑚 最⼤RPMの半分に設定 Max RPM ロータの最⼤回転速度 𝑟𝑝𝑚 教科書の参考数値で最⼤RPMが6000〜 8000rpmとあったので、8000に設定 K𝑔 パラメータ値 0.0001(えいやで決めた) 0.0000625, 0.00003125, 0.00009375 0.1 𝑠 (パラメータ探索) K𝑔 (パラメータ探索) 𝑁 / 𝑠" ホバリングRPM(Ω% )から逆算 𝑚𝑔 𝐴= 4Ω"% 19
機体パラメータの決め⽅(試⾏錯誤中)
• 慣性モーメントの計算︓https://www.sky-engin.jp/blog/inertia-matrix/
• 機体のパラメータから仮定した値
パラメータ
値
単位
• 中⼼の⽅がローターより重い
全体質量
0.1
kg
• ロータ質量=(全体質量ー中⼼質量)/4
中⼼質量(c_m)
0.075
kg
• 半径は機体の幅と同じ
ロータ質量(m)
0.00625
kg
半径(a)
0.05
m
• 慣性モーメントの計算式
• 𝐼! =
"!#"
$
Izの計算
Ix, Iyの計算
• 𝐼% = 4𝑚𝑎$
• 𝐼& =
'#
$
(ピッチ側はロール側は同じではなさそうなので半分に)
• 計算結果
パラメータ
値
Iz
0.00009375
Ix
0.0000625
Iy
0.00003125
20
機体のパラメータ⼀覧 パラメータ 役割 単位 パラメータ値の決め⽅ パラメータ値 d 空気抵抗係数 𝑁 えいやで決めました 0.0001 Ixx, Iyy, Izz 慣性モーメント K𝑔 + 𝑚! 本物の機体を参考にして、導出しました 0.0000625, 0.00003125, 0.00009375 m 機体の質量 本物の機体を参考にしました 0.1 Tr ロータの応答時間 𝑠 パラメータ探索 0.05 Kr ロータのゲイン K𝑔 パラメータ探索 8000 A ロータ推⼒の⽐例係数 ホバリング時のRPM値から逆算しました 1.53281e-08 B 反トルクの⽐例係数 𝑁 + 𝑚 + 𝑠! パラメータ探索 1.3e-10 Jr ロータの慣性モーメント 𝑁 + 𝑚 + 𝑠! パラメータ探索 1.0e-10 Rotor position ロータの配置 Hovering RPM Max RPM K𝑔 𝑁 + 𝑠! 𝑚 本物の機体を参考にしました ホバリング時のロータ回転速度 𝑟𝑝𝑚 本物の機体を参考にしました 4000 ロータの最⼤回転速度 𝑟𝑝𝑚 本物の機体を参考にしました 8000 21
アジェンダ 1. お話しする範囲 2. 箱庭ドローンシミュレータとは 3. ドローンの⾶⾏原理 4. ドローンの数学・物理・制御⼊⾨ 5. ドローンの数値シミュレーション実現⽅法 6. オープンソース技術の紹介(QGC、 PX4) 7. ゲームエンジンの使い所 8. 箱庭ドローンシミュレータの構築 9. なぜ箱庭じゃなきゃダメなのか︖ 22
オープンソース技術の紹介(QGC、PX4) • ドローン⽤オープンソース技術のエコシステム • QGC • QGCとは • QGCがすごいと思ったところ(感想) • QGCのシミュレーションでの利⽤⽅法 • PX4 • PX4とは • PX4がすごいと思ったところ(感想) • PX4のシミュレーション⽤のアーキテクチャ 23
ドローン⽤オープンソース技術のエコシステム Hardware Firmware Pixhawk Ground Station 24
QGCとは • 何ものか • ドローンの地上局システム⽤のアプリケーション • 主な⽤途 • 地上から機体を遠隔操作し、 • 様々なミッションを実⾏できる • サポートしているファームウェア • PX4 • ArduPilot • 動作環境 • Windows • Linux • MacOS 25
QGCがすごいと思ったところ(感想) 1. 地図の⾃動取り込み 2. 様々な機体設定 3. 直感的な操作 4. リアルタイム監視 5. ミッションプランニング 26
地図の⾃動取り込み • 東京都︓35.689、139.692 27
地図の⾃動取り込み • ⼤阪府︓34.686、135.520 28
地図の⾃動取り込み • 福井県︓36.065、136.222 29
様々な機器設定 • 機体の様々な設定が可能です︕ • Actuators • ⾶⾏挙動 • PIDチューニング • Actuators • ローターの位置 • 回転⽅向 30
⾶⾏挙動 • 速度制限かけれます • 箱庭は3.5km/s 31
PIDチューニングもできちゃう︕ 32
直感的な操作とリアルタイム監視 機体の姿勢⾓を 表⽰ 機体の操作 地図上に⽬標地 点を設定 機体の位置や速 度を表⽰ 33
ミッションプランニング 34
QGCのシミュレーションでの利⽤⽅法 これまでのデモ動画は全てシミュレータでっており、実機と同じ操作が可能です︕ ↓PX4との通信設定さえやっておけば。 35
PX4とは • 何ものか • ドローンのファームウェア • オートパイロット⽤のフライトスタック • 主な⽤途 • 様々な機体を選択できる • マルチコプター、固定翼、VTOL • 地上⾛⾏ロボット、⽔中ドローン • 豊富なソフトウェアが揃っている • 機体制御プログラム • 周辺ドライバ • 動作環境 • POSIX準拠のOS • NuttX OS(組み込み向け) • Linux、MacOS(シミュレータ向け) 36
PX4がすごいと思ったところ(感想) 1. 外部連携が考慮されたアーキテクチャ 2. PX4通信フレームワーク 3. ロギング機構とビジュアライザー 4. ROSとの親和性 5. ドキュメントが充実している 37
外部連携が考慮されたアーキテクチャ 1. TCP/UDP通信で、以下の連携が可能 1. Offboard 2. QGC 3. Simulator 38
PX4通信フレームワーク • uORBメッセージ • PX4内のアプリ間の通信はuORBメッセージ • Pub/Sub型の通信 • ROS っぽい︕ 39
40 ロギング機構とビジュアライザー • uORBのメッセージは⾃動ロギングされる • シミュレータの場合ここにあります。 logger uORB msgs • PX4-Autopilot/build/px4_sitl_default/rootfs/log SDカード ULog Text Visualizer (pyulog等)
ROSとの親和性 • uORBメッセージは、μXRCE-DDSを通して、ROS2に変換できます︕ https://docs.px4.io/main/en/middleware/uxrce_dds.html 41
ドキュメントが充実している︕ https://docs.px4.io/main/en/ 42
PX4のシミュレーション⽤のアーキテクチャ 通信メッセージは MAVLINK 対応が必要なメッセージはそんなに多くない︕ 43
アジェンダ 1. お話しする範囲 2. 箱庭ドローンシミュレータとは 3. ドローンの⾶⾏原理 4. ドローンの数学・物理・制御⼊⾨ 5. ドローンの数値シミュレーション実現⽅法 6. オープンソース技術の紹介(QGC、 PX4) 7. ゲームエンジンの使い所 8. 箱庭ドローンシミュレータの構築 9. なぜ箱庭じゃなきゃダメなのか︖ 44
ゲームエンジンの使い所 • ゲームエンジンって何︖ • ドローンシミュレータの代表格 • 箱庭で使いたいゲームエンジンの機能 45
ゲームエンジンって何︖ • あえて2つ挙げると(シミュレーションの視点で重要な機能) • 物理エンジン • レンダリングエンジン • 物理エンジンとは※ • 質量・速度・摩擦・⾵といった,古典⼒学的な法則をシミュレーションするコンピュータの ソフトウェアである • レンダリングエンジンとは※ • レンダリングを⾏うソフトウェア部品。情報(データ)を読み込んで、特定のルールにした がい適切な表現に変換する役割を担う • レンダリングとは • データ記述⾔語やデータ構造で記述された抽象的で⾼次の情報から、コンピュータのプログラムを⽤い て画像・映像(動画)・⾳声などを⽣成すること ※参照元︓ウィキペディア 46
ゲームエンジンの種類 • ゲームエンジンには様々な種類がありますが、 • 代表的なものはUnityとUnreal Engineと思います。 観点 Unity Unreal Engine 備考 初⼼者の学びやすさ ○ △ Unreal Engine は、⾼度な機能を利⽤できるが、初⼼者にはどれ をどう使えば良いのか迷う。Unityは書籍も多く、導⼊障壁は低い。 グラフィックの美しさ △ ○ Unreal Engineのグラフィックは美しい スクリプトの作りやすさ ◎ △ UnityはC#なので、作りやすい。標準で⾃動ビルドもしてくれる。 Unrealは、C++なので、初⼼者にはハードル⾼め。 UIの作りやすさ ○ △ Unityの⽅が直感的に作れる。 ライセンス △ ○ どちらもプライベートで利⽤する範囲では問題ないが、 商⽤利⽤する場合は、Unityの⽅がコストが⾼い 補⾜︓ どちらのゲームエンジンを選ぶかは、プロジェクトのニーズや開発者の好み、または特定のスキルセットに⼤きく依存します。 47
Unityでのデモ(1) 48 ボールを置いて,物理シミュレーションを実⾏するまで 48
Unityでのデモ(2) 49 ロボットも動かすことができる 49
箱庭で使いたいゲームエンジンの機能 • ドローンのシミュレーションにおいて、ゲームエンジンの機能として使いたいもの 物理エンジン レンダリング エンジン スクリプトシステム ユーザI/F ユーザ操作 ⼲渉/衝突 カメラ/ LiDAR 外乱 ⼒学/運動 3D ビジュアライズ テスト シナリオ Game Engine 50
アジェンダ 1. お話しする範囲 2. 箱庭ドローンシミュレータとは 3. ドローンの⾶⾏原理 4. ドローンの数学・物理・制御⼊⾨ 5. ドローンの数値シミュレーション実現⽅法 6. オープンソース技術の紹介(QGC、 PX4) 7. ゲームエンジンの使い所 8. 箱庭ドローンシミュレータの構築 9. なぜ箱庭じゃなきゃダメなのか︖ 51
箱庭ドローンシミュレータの構築 • 全体アーキテクチャ • ゲームエンジン連携 • 箱庭と接続する上で対応が必要なこと • ドローン3Dモデルの構築 • 箱庭通信PDUデータの作成 • PX4連携 • 箱庭と接続する上で対応が必要なこと • MAVLINK通信プロトコルの理解と実装 • 物理モデルとセンサモデルのアーキテクチャ • hakoniwa-px4sim • 物理モデルの実⾏ • 箱庭コア機能との連携 52
箱庭ドローンシミュレーション構成 53
詳細アーキテクチャ 54
全体アーキテクチャ PX4 on SITL 4560/TCP hakoniwa-px4sim Drone Physics/Sensor (C/C++) Drone Control (C/C++) Generate MATLAB/Simulink Plant/ Sensor Model Simulation parameters Hakoniwa Scenario Test 18570/UDP Python scenario Game Engine Unity Unreal Engine QGroundControl PS4 Controller 箱庭は様々なソフトウェアを繋げるハブです︕ 55
56 ゲームエンジン連携 3Dモデル • 3Dモデル︓箱庭ドローン(H1号) • 中村歩⾼さんからご提供いただきました スクリプト • どういうものか︖ • DroneAvator スクリプト • 箱庭と通信を⾏います • 位置と姿勢情報をUnity上で再現します • PWMデューティ値をプロペラ回転アニメに変換 • 障害物との衝突情報を箱庭にFBします • 衝突検出 • 機体のプロペラに衝突検出オブジェクトを設置 位置・姿勢 PWM Duty 箱庭 衝突情報 箱庭PDUデータ 56
作成したドローンを配置してシミュレーション シーン・ビュー ゲーム・ビュー 57
PX4連携 アクチュエータ情報に応じて物理ダイナミクスを駆動する 2. 物理ダイナミクスの内部情報をセンサデータに変換する 3. センサデータを定期的に送信する 1. Hakoniwa-px4sim HIL_SENSOR Drone Sensors (C/C++) HIL_GPS Drone Physics (C/C++) PX4 HIL_ACTUATOR _CONTRLS MAVLINK通信プロトコル Drone Actuator (C/C++) 58
PX4連携詳細 59
hakoniwa-px4sim • GitHubで⼀般公開中︕ • https://github.com/toppers/hakoniwa-px4sim Star & Watch お願いします︕ 60
hakoniwa-px4simの内部構造 機体パラメータ Sensors Aircraft Factory create 箱庭マスタ Physics Aircraft 位置・姿勢 HIL_SENSOR 衝突情報 HIL_GPS PWM Duty HIL_ACTUATOR _CONTRLS MAVLINK 箱庭アセット (Unity) 箱庭時間同期 Actuator 箱庭アセット PX4 箱庭PDUデータ 箱庭コア機能 61
デモ 62
アジェンダ 1. お話しする範囲 2. 箱庭ドローンシミュレータとは 3. ドローンの⾶⾏原理 4. ドローンの数学・物理・制御⼊⾨ 5. ドローンの数値シミュレーション実現⽅法 6. オープンソース技術の紹介(QGC、 PX4) 7. ゲームエンジンの使い所 8. 箱庭ドローンシミュレータの構築 9. なぜ箱庭じゃなきゃダメなのか︖ 63
なぜ箱庭じゃなきゃダメなのか︖ • 統合的なシミュレーションハブとしての機能性 • 様々なソフトウェアやシミュレータを柔軟に接続・統合を可能にします • 今回の場合は、C⾔語ベースの物理式のプログラム、UnityやUnreal Engine、PX4等です • 拡張性 • オープンソースであるため、⾃分のニーズに合わせてカスタマイズできます • 物理式は⽬的に応じて変更可能。MATLABで作成することもできます • コスト効率 • 箱庭は無料であり、コストを抑えながら⾼度なシミュレーションを実現可能 • 教育や研究開発、趣味のプロジェクトで⼗⼆分に活⽤できます︕ 箱庭ドローンシミュレータは、 将来的に、様々なソフトウェアやシミュレータと 連携できる可能性を秘めています︕ 64
最新のアップデート ⽣成AIコンテスト︕ 65 低温領域でのセンサー異常(温度ドリフト) https://www.youtube.com/watch?v=Z3Slx0CPf8I https://www.youtube.com/watch?v=R67QkYnJngc
ご清聴 ありがとうございました︕ 66