Hakoniwa-zero

4.5K Views

July 16, 24

スライド概要

この資料では、箱庭の原点(ZERO)である箱庭コア機能について説明します。
- 箱庭コア機能とは何か
- 箱庭コア機能のAPI機能セット
- 箱庭コンダクタのAPI機能セット
- 箱庭アセットのAPI機能セット
- 箱庭コマンドのAPI機能セット
- 箱庭コア機能を使ってみよう
- 箱庭コア機能を手軽に試すための環境とは
- 箱庭のサンプルプログラムの説明
- 箱庭を動かしてみよう

profile-image

TOPPERS/箱庭WG活動でUnityやらAthrillやらmROSやら触ってます。 最近は仕事の関係でWeb系の技術に注力しつつ、箱庭への転用を模索しています。 2023年8月1日:合同会社箱庭ラボに移動しました

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

箱庭(Hakoniwa) ZERO 合同会社箱庭ラボ 森崇

2.

はじめに • この資料では、箱庭の原点(ZERO)である箱庭コア機能について説明します。 • 箱庭コア機能とは何か • 箱庭コア機能のAPI機能セット • 箱庭コンダクタのAPI機能セット • 箱庭アセットのAPI機能セット • 箱庭コマンドのAPI機能セット • 箱庭コア機能を使ってみよう • 箱庭コア機能を⼿軽に試すための環境とは • 箱庭のサンプルプログラムの説明 • 箱庭を動かしてみよう 2

3.

箱庭コア機能とは何か • シミュレータ 器 ity n U 機 み 込 組 • 箱庭コア機能の⽬的︓ • 様々な技術をつなげること • 組込み機器 • プログラム(Python/C/C++…) on h t Py グラム プロ • 別の⾔い⽅をすると、 • シミュレーションHUB ロボット 制御 プログラ ム Simulation Hub • ゲームエンジン(Unity/Unreal Engine) 3

4.

箱庭コア機能のAPI機能セット • 箱庭コア機能のAPI機能セットは3種類に分かれます。 • 箱庭コンダクタ 箱庭アセット 箱庭コンダクタ • 箱庭アセット • 箱庭コマンド 箱庭コンダクタAPI (hako_conductor.h) 箱庭アセットAPI (hako_asset.h) 箱庭コマンド (hako_cmd.cpp) hakoniwa-core-cpp-client 箱庭コマンドAPI (hako_simevent.hpp) hakoniwa-core-cpp [凡例] アクター 箱庭API 管理リポジトリ名 4

5.

箱庭コンダクタのAPI機能セット • スケジューリングを開始する • hako_conductor_start() • スレッド起動し、以下をバックグラウンド実⾏ • 箱庭時間同期 • シミュレーションライフサイクル管理 箱庭 コンダクタ 箱庭 アセット ・・・ 箱庭 アセット 箱庭コンダクタAPI 箱庭アセットAPI シミュレーション ライフサイクル管理 箱庭時間同期 • スケジューリングを停⽌する • hako_conductor_stop() • スレッド停⽌する 箱庭コア機能 5

6.

箱庭アセットのAPI機能セット • 詳細はこちら 6

7.

箱庭コマンドのAPI機能セット • 箱庭イベントの⽣成 • シミュレーション開始 • シミュレーション停⽌ • シミュレーションリセット • 箱庭デバッグ機能 箱庭イベント⽣成 箱庭デバッグ機能 箱庭コマンドAPI • アセット⼀覧(ls) • シミュレーション状態(status) • メタデータ参照(pmeta) • メモリログ参照(plog) • 物理チャネルID参照(real_cid) マスター データ PDU データ 共有メモリ • チャネルデータ取得(dump) • チャネルデータ復元(restore) 7

8.

箱庭シミュレーション状態遷移 詳細はこちら 状態 説明 STOPPED 初期状態であり、シミュレーションが停⽌てい る状態 RUNNABLE シミュレーション開始可能な状態 RUNNING シミュレーション実⾏中状態 STOPPING シミュレーション停⽌中状態 RESETTING シミュレーションリセット中状態 ERRROR シミュレーションエラーが発⽣した状態 start RUNNABLE NG OK RUNNING STOPPED ERROR stop OK STOPPING NG reset RESETTING OK NG 8

9.

箱庭デバッグ機能(アセット⼀覧) • 箱庭アセットとして登録されているものを⼀覧化します • 実⾏例︓ $ hako-cmd ls A-1 A-2 箱庭 アセット (A-1) ・・・ 箱庭 アセット (AーN) 9

10.

箱庭デバッグ機能(シミュレーション状態) • 箱庭シミュレーション状態を参照します • 実⾏例︓ $ hako-cmd status status=running 10

11.

箱庭デバッグ機能(メタデータ参照) 箱庭マスタデータの情報を参照できます。実⾏例︓ 詳細はこちら % hako-cmd pmeta master_pid = 92216 state = 0 time_usec = 0 asset_num = 1 assets[0].id = 0 assets[0].type = 1 assets[0].name = test assets_ev[0].pid = 92216 assets_ev[0].ctime = 0 assets_ev[0].update_time = 1721107581784722 assets_ev[0].event = 0 assets_ev[0].event_feedback = 0 assets[1].id = 0 assets[1].type = 0 assets[2].id = 0 assets[2].type = 0 assets[3].id = 0 assets[3].type = 0 pdu_meta_data.mode = 0 pdu_meta_data.asset_num = 0 pdu_meta_data.pdu_sync_asset_id = 0 pdu_meta_data.channel_num = 1 pdu_meta_data.asset_pdu_check_status[0] = 0 pdu_meta_data.asset_pdu_check_status[0] = 0 pdu_meta_data.channel[0].offset = 0 pdu_meta_data.channel[0].size = 48 pdu_meta_data.channel_map[0].robo_name = ROBOT pdu_meta_data.channel_map[0].logical_channel_id = 0 11

12.

箱庭デバッグ機能(メモリログ参照) 箱庭のメモリログ参照できます。 実⾏例︓ % hako-cmd plog INFO [/Users/tmori/project/work/hakoniwa-core-cpp-client/core/src/hako/hako_impl.cpp:31 init] hako::init(): shared memory type = mmap INFO [/Users/tmori/project/work/hakoniwa-core-cpp-client/core/src/hako/hako_impl.cpp:86 create_asset_controller] hako::create_asset_controller(): shared memory type = mmap INFO [/Users/tmori/project/work/hakoniwa-core-cpp-client/core/src/hako/hako_impl.cpp:109 get_simevent_controller] hako::get_simevent_controller(): shared memory type = mmap INFO [/Users/tmori/project/work/hakoniwa-core-cpp-client/core/src/hako/hako_asset_impl.cpp:32 asset_register_polling] registered: asset: test INFO [/Users/tmori/project/work/hakoniwa-core-cpp-client/core/src/hako/hako_asset_impl.cpp:136 create_pdu_lchannel] create pdu lchannel: robo_name=ROBOT channel_id= 0 pdu_size=48 INFO [/Users/tmori/project/work/hakoniwa-core-cpp-client/core/src/hako/data/hako_pdu_data.hpp:83 create_lchannel] robo_name = ROBOT channel_id = 0 size = 48 ret = 1 INFO [/Users/tmori/project/work/hakoniwa-core-cpp-client/core/src/hako/hako_impl.cpp:86 create_asset_controller] hako::create_asset_controller(): shared memory type = mmap INFO [/Users/tmori/project/work/hakoniwa-core-cpp-client/core/src/hako/hako_impl.cpp:109 get_simevent_controller] hako::get_simevent_controller(): shared memory type = mmap INFO [/Users/tmori/project/work/hakoniwa-core-cpp-client/core/src/hako/hako_simevent_impl.cpp:37 start] Event: Start INFO [/Users/tmori/project/work/hakoniwa-core-cpp-client/core/src/hako/hako_asset_impl.cpp:116 start_feedback] start feedbak: asset: test 1 INFO [/Users/tmori/project/work/hakoniwa-core-cpp-client/core/src/hako/data/hako_pdu_data.hpp:297 create] PDU CREATE: asset_num = 1 INFO [/Users/tmori/project/work/hakoniwa-core-cpp-client/core/src/hako/data/hako_pdu_data.hpp:308 create] START CREATE PDU DATA: total_size= = 48 INFO [/Users/tmori/project/work/hakoniwa-core-cpp-client/core/src/hako/data/hako_pdu_data.hpp:326 create] CREATED ADDR=0x10037400c INFO [/Users/tmori/project/work/hakoniwa-core-cpp-client/core/src/hako/hako_impl.cpp:86 create_asset_controller] hako::create_asset_controller(): shared memory type = mmap INFO [/Users/tmori/project/work/hakoniwa-core-cpp-client/core/src/hako/hako_impl.cpp:109 get_simevent_controller] hako::get_simevent_controller(): shared memory type = mmap 12

13.

箱庭デバッグ機能(物理チャネルID参照) 論理チャネルIDの物理チャネルIDを参照できます。 実⾏例︓ % hako-cmd real_cid DroneTransporter 10 12 13

14.

箱庭デバッグ機能(チャネルデータ取得) チャネルデータをダンプできます。 実⾏例︓ % hako-cmd dump 0 > tmp.bin % od -x tmp.bin 0000000 5678 1234 0000020 0000 0000 * 0000160 0001 0000 0000 0000 0018 0000 0000 0000 0070 0000 0000 0000 14

15.

箱庭デバッグ機能(チャネルデータ復元) チャネルデータを復元できます。 実⾏例︓ % hako-cmd restore 0 tmp.bin 15

16.

箱庭コア機能を使ってみよう • 箱庭コア機能を⼿軽に試すための環境とは Webブラウザ GitHubアカウント GitHub Codespace 16

17.

箱庭のサンプルプログラムの説明 以下の2つのサンプルプログラムが⽤意されています。 • hello_world • pdu_communication 詳細はこちら。 17

18.

hello_world 1個の箱庭アセットを動かすだけのサンプルプログラムです。 箱庭アセットAPIの基本的な使い⽅を理解するために⽤意されています。 18

19.

pdu_communication 2個の箱庭アセットを動かしてPDUデータの通信を⾏います。 箱庭アセットPDUデータのI/O⽅法を理解するために⽤意されています。 19

20.

箱庭を動かしてみよう(1/3) ①ご⾃分のGitHubアカウントで以下にアクセスしてください。 https://github.com/toppers/hakoniwa-core-cpp-client/tree/main ②Code → Create codespace on main をクリックしてください 20

21.

箱庭を動かしてみよう(2/3) ③端末で以下のコマンドを実⾏してください。 bash build.bash bash install.bash ④hako-setup-check.bashで インストールチェックできます。 Check completeが出ればOK︕ $ bash hako-setup-check.bash === HAKO ENV === OS=Linux , OS_TYPE=posix HAKO_CORE_PREFIX=/usr/local HAKO_CONFIG_PREFIX=/etc/hakoniwa HAKO_CORE_MMAP_PREFIX=/var/lib/hakoniwa HAKO_CONFIGNFIG_PATH=/etc/hakoniwa/cpp_core_config.json HAKO_CORE_MMAP_PATH=/var/lib/hakoniwa/mmap OK Directory exists: /usr/local/bin OK Directory exists: /usr/local/bin/hakoniwa OK Directory exists: /usr/local/lib OK Directory exists: /usr/local/lib/hakoniwa OK Directory exists: /etc/hakoniwa OK Directory exists: /var/lib/hakoniwa OK Directory exists: /var/lib/hakoniwa/mmap OK File exists: /etc/hakoniwa/cpp_core_config.json OK File exists: /usr/local/bin/hakoniwa/hako-cmd OK File exists: /usr/local/lib/hakoniwa/libshakoc.so OK File exists: /usr/local/lib/hakoniwa/libassets.so OK File exists: /usr/local/lib/hakoniwa/libconductor.so OK File exists: /usr/local/lib/hakoniwa/py OK File exists: /usr/local/bin/hakoniwa/hako-proxy OK File exists: /usr/local/lib/hakoniwa/hakoc.so OK File exists: /usr/local/lib/hakoniwa/libhakoarun.a Check complete. 21

22.

箱庭を動かしてみよう(3/3) ⑤ hello_worldを動かすために、箱庭コマンド⽤の端末を増やします。 ⑥左側の端末で、hello_worldを起動します。 ./cmake-build/examples/hello_world/hello_world hello_world examples/hello_world/custom.json 20 ⑦右側の端末で、箱庭シミュレーションを実⾏します。 hako-cmd start 22

23.

レッツトライ︕ • pdu_communicationも是⾮お試しください︕ • サンプルプログラムを改造して、⾊々とお試しいただくと理解が深まると思います。 • 例︓ • スリープ時間を変更してみる(1秒→0.1秒) • PDUデータを変更してみる(Twist→Pose) 23

24.

ご清聴 ありがとうございました︕ 24