**********************************************************************
セッションS3b 講演・チュートリアル
テーマ:athrill(アスリル)から箱庭(hakoniwa)へ
講師:森 崇 氏(永和システムマネジメント)
日時:2019/9/6 10:30〜11:40
参加人数:約20名
**********************************************************************

■目次
1.Athrill
 ・Athrillとは
 ・Athrillのこだわり機能紹介
2.箱庭
 ・箱庭とは
 ・箱庭のデモ

■1.Athrill
--【Athrillとは】--

・Athrillとは、一言でいうと
CPU命令セットシミュレータ(V850/RH850)。

・Athrillのあゆみ
今年で4年目、TOPPERSコンテスト受賞、外部発表などを通し、徐々に認知さられるように
なった。

・Athrillの簡単な説明
CPUについて:v850esというシングルコア向けだったものをマルチコアに拡張。将来的に
RH850やARMに対応したい。
割り込みコントローラについて:多重割り込み、CPU間割り込み可能。
周辺デバイスとしてタイマ、シリアルが使用できる。将来的にCAN/ETHERに対応したい。

・使い方のイメージ
CUIベースでさくさく動くことを目標。
$ athrill-run
と打つだけで起動でき、
$[DBG>cont
と打つとプログラムの実行ができる。

・Athrillの実行環境
基本的にはUNIXのターミナルでbash上で動くことを想定している。
OSは、Windows、MinGW、WSL上で動かす事ができる。MacならDockerを使えばよい。
よって、クロスプラットフォームを実現。

・命令セットシミュレータの構造と処理の流れ
Athrillは単純に作りたいと思って開発した経緯がある。
そのため、cpuはcpuで、割り込みコントローラは割り込みコントローラのように
オブジェクト指向的に作っている。

・処理の流れ
CPU→ROM→デコード→命令実行→RAM、デバイスレジスタ→周辺デバイス実行
→割り込みコントローラ実行→CPU
の1サイクルを繰り返していく。

・Athrill適用事例
車載向けに主眼を置いていたので、TOPPERSのAUTOSARスタックが動くような環境を作り、
結合→動作確認を行っていた。
事例1:AUTOSARのスタックで、COM、CAN、RTOSなどを結合し、大量のテストを自動化し
    Athrillで動かす
事例2:実機上の検査の前にまずAthrillで動かす。これにより、実機上でトラブルが
    起こる前に早期にエラーを発見できた。

・AUTOSAR対応
スケーラビリティクラスについてAthrillはどれくらいサポートしているか。
TOPPERSのハードウェア要求仕様書に書かれており、最小要求に関してはほぼ満たして
いる。SC2-MCに関してはやりたいことと少し外れているため80%
すなわち最低限度の機能セットは持っている。

・CPU命令セットに関して
V850については実装率96.2%、RH850についてはV850の上位互換なため、実装率87%
普通に使う分には困らないくらいの命令セットが用意できている。
細かい話なので、昨年のTOPPERSコンテスト応募資料に記載されている。

・RH850への対応
ハードウェアマニュアルが非公開なため対応ができていない。しかし、入手の目処は
立っているので、うまくいけば年内に公開できるかもしれない。

・Athrillの導入方法
インストール方法”qiita athrill”でググる。
オープンソースなので最新の情報については”github athrill”でググる。

--【Athrillのこだわり機能紹介】--

・Athrill開発コンセプト
一言でいうと、「机上(実機レス)でどこまでやれるか」

・Athrillがカバーしたい世界と可能性
ECU内の世界だけでなく、これからはIoTの時代なのでECUの外も目を向けてやって
いきたい。一番近い部分はROSをAthrillでサポートしたい。その延長線上でTOPPERSの
箱庭という形に持っていきたい。
Athrillは汎用OSであり、クラウドサービスを使用すればもっとAthrillの可能性は
広がるはず。まだ、具体的にどうするかは決めていない。

・MMAP機能
仮想マイコン内のメモリ・データをリアルタイムに直接さわれる。
内部メモリデータの可視化ツール連携やデバッグとして利用できる。
MMAP機能の内部構造・仕組み、使い方について説明。
実際に動かした例として、Lチカのデモ動画を紹介。
外から見て内部の情報を動的に見えることを確認できる。

・POSIX API
マイコン・プログラムから汎用OSのPOSIX APIを呼び出すことができる。
従来の仮想マイコンだとEATHERドライバ・デバイスを作らなければならないが、Athrillが
汎用OS機能を用意しているため、APIを呼び出すだけでよい。
現時点のPOSIX API のサポート範囲を紹介。
システムコールのデモ動画を紹介。

・デバイス向けTCP機能
仮想デバイスのI/O通信をTCP/IP経由で外部連携可能。
内部構造・仕組みの紹介。
TeraTermからシリアル通信するデモ動画を紹介。
マイコンに近い開発環境が使えるようになる。

・mROSをathrillの中へ
従来はミドルウェアにmROS存在したが、mROSをAthrillの中に持っていくことをしていた。
mROSを移植せずにAthrillを起動するだけでmROSが使えるようになる。
詳しくはqiitaを見てほしい。


■2.箱庭
--【箱庭とは】--

・箱庭の背景・経緯
背景:自動運転のシステムの結合検査、実証実験をやっていたが、そこでトラブルが
色々あった。web系や、自動運転制御系、バックエンドサーバ系、ネットワーク系など
色々な分野の人が集まって結合検査やるのは難しい。
全体結合しないと見えない問題や、デバッグ自体の難しさ、手間・時間・費用がかかって
しまう。そのため、各分野の技術者が仮想環境上(箱庭)上で開発対象ソフトウェアを
持ち寄って、机上実証実験をできるようにしたい。
自分たちのプロジェクト内で箱庭SDKを作っても特定の人にしかメリットがないので、
TOPPERSの成果にできないかと相談し、TOPPERS箱庭WGが結成。

・箱庭WGの目指すところ
箱庭のターゲット:IoTのような複雑なシステム、自動運転だけでなく、物流・宇宙など
様々な分野も視野に入れたい。
箱庭の利用者:基本的にはシステム開発者だが、システム提供者、箱庭アセット提供者と
もうまく連携してやっていきたい。
システム開発者は、テスト環境を簡単に使える。
システム提供者は、思い付いたアイディアを手軽に試せる。
箱庭アセット提供者は、様々な機器を組み合わせて色々試せる。

システムを開発者とシステム提供者のコミュニケーションツールとしても働くと
考えている。
壮大な企画であるため、まず我々のできるところから進めていきたい。
まずは、TOPPERSの成果物と可視化技術をうまく組み合わせて小さい箱庭の開発を進めよう
としている。

・箱庭の利用シーン
エンジニアが成果物を持って集まり、様々なアセットを利用してシミュレーションができる
環境を目指している。

・箱庭のアーキテクチャ
様々な分野のシミュレーションができるようにしたい→ドメイン・サービス。
基盤技術として箱庭コア。共通基盤技術にしたい。
既存のサードパーティ製で出来ていることは積極利用する。
アセット技術としてTOPPERSの持っているもの(AthrillやmROS、TOPPERSカーネルなど)
を提供。Autoware、AWS、Unityとの協力を打診している。


--【箱庭のデモ】--
・構築する仮想環境
仮想環境の可視化:Unity
その他:Athrill、RTOS、mROS

・Athrill、mROSを使って外からUnity上の仮想車両を制御するデモ
Unityロボコンを意識した走行コースを作成。
前方20mは障害物検知可能なセンサーが車に取り付けられている。
Athrill上でaspカーネル上で動くタスクがあり、そのタスク上でmROSを使って車両制御の
アプリケーションを実装している。
ROSのトピック情報はブラウザで確認可能。

■箱庭WG活動紹介
・活用ツール
Slack:コミュニケーションツール。日々の議論に活用。
ML:定例会の内容等配信。
GitHub:オープンソース化を狙っており、ソースを公開していく。
Google Drive:WGメンバで成果物を共有。

・定例会合、イベント
オンライン:WebEXで毎月1回程度。
オフライン:合宿を年2回程度。
イベント:年内に、TOPPERS技術検討会議を実施。

・おわりに
今のメンバーだけでは、壮大な箱庭の企画を実現するには力不足なので協力者を募集している。

■質疑応答
・質問:実際のエミュレータを積んだ車とセンサーとの関係において、動作にチャタリング
    などの動作を組み込む想定はあるのか。
・回答:抽象度の高いシミュレーションを検討しており、チャタリングに関しては
    マイコンのシミュレータの領域に入ってくる。
    箱庭からは少し遠いかもしれないが、Athrillのようなマイコンシミュレータ
    環境をカスタマイズすれば簡単にできるはず。

・質問:Unityの使用について、周りの明るさなどの設定はライダーの機能として積んで
    いるのかどうか。
・回答:将来的に、TOPPERSのETロボコンのシミュレーション環境として箱庭をカスタマイズ
    して使いたいと考えている。
    光によってセンシングがうまくできないという問題はETロボコンによくある。
    今すぐにはできないが、Unityの機能として明るさを簡単に調整できるので自由に
    設定できるだろう。

・質問:Athrillの対応していない命令セットをコンパイラが出すことはないか。
・回答:アセンブラ命令で書かない限りはそのような命令は出ないはず。
    しかし、RH850は例外でジャンプ命令などでロングジャンプするところでは
    コンパイラが出してしまう。
    RH850に関してはRH850対応のAthrillが出るのを待って欲しい。

・質問:VH850からRH850の移植はどれだけ大変だったか。
・回答:命令セットだけであればそんなに難しくない。
    難しいのは、SC3などをやろうとするとメモリ保護対応しなければならず、
    専用のシステムレジスタ周りの、メモリ設定周りのものを作らなければ
    ならないという点。
    加えて、割り込みコントローラもVH850から仕様ががらっと変わっているため、
    その辺りのサポートが大変。