Choreonoid講習会~ シミュレータの基本操作 ~2022/08/29-30
中村啓太（会津大学）
馬上雄，穴澤剛士（株式会社FSK）

1

講習会目的

❖ Choreonoidの基本操作を学ぶ❖ ボディモデルの作成方法を学ぶ❖ シンプルコントローラの作成方法を学ぶ❖ 自律制御について学び，ライントレースを行う

2

講習会内容
❖ Choreonoidとは?
❖ Choreonoidの基本操作❖ プロジェクトの作成❖ ボディモデルとは?
❖ コントローラとは?
❖ TurtleBot2の自律走行❖ カメラ画像を用いたTurtleBot2の自律走行

Choreonoidとは?

3

Choreonoid❖ Choreograph（振り付けをする）+ Humanoidにより命名❖ オープンソースのロボット用統合GUIソフトウェア❖ 国立研究開発法人・産業技術総合研究所（産総研）が開発❖ 現在は株式会社コレオノイドが引き継いで開発❖ MITライセンス❖ 利用や配布，改変などは無償で自由に行うことができる
ライセンス❖ 動作振り付け機能，動力学シミュレーション機能❖ 本講習で使用するChoreonoidのバージョン❖ バージョン: 1.8.0❖ リビジョン番号: 44a30642d5966e8ab54d93f3ae0810d64e5c7d54

4

サイトの紹介❖ Choreonoid関連ドキュメントは以下を参照❖ Choreonoidホームページ: https://choreonoid.org/ja/❖ Choreonoid向け拡張機能プログラム「HAIROWorldPlugin」:
https://naraha.jaea.go.jp/information/files/2021/0406/index.html❖ 会津大学のロボット関連サイトRTC-Library-FUKUSHIMA:
https://rtc-fukushima.jp/❖ 会津大学のChoreonoid講習会で使用したソースコード
https://github.com/RTC-Library-FUKUSHIMA/Education

5

動作振り付け❖ 3DCGによるロボットモデルのアニメーション表示しながら，ロボットの多様な動作を自由に作成できる

6

動力学シミュレーション❖ 物体の動作における力の影響をシミュレーション可能❖ ロボットが床の上を走行する❖ ロボットがバルブを回す❖ 複数の物理エンジンを使用できる❖ AISTエンジン（標準搭載）❖ AGX Dynamics（有償）❖ Open Dynamics Engine❖ World Robot Summit2020のトンネル事故災害対応・復旧チャレンジで使用: https://wrs.nedo.go.jp/

Choreonoidの基本操作

7

起動方法
❖ 2パターンで起動可能
1. コマンドラインからの起動❖ CUI(Character User Interface)を用いた起動方法❖ キーボードでコマンド（文字列）を入力
2. ファイルマネージャーからの起動❖ GUI(Graphical User Interface)を用いた起動方法❖ マウスでウィンドウやアイコンなどをクリック

8

コマンドラインによる起動❖ ランチャーから『コンピュータを検索』をクリックし，検索欄に『cmd』と入力して，『端末』をクリックし起動9

コマンドラインによる起動 | 引数なし
❖ 端末上で以下のコマンドを実行❖ make installを行った場合$ choreonoid❖ あるいは$ cd [ビルドディレクトリ]$ bin/choreonoid
例: cd ~/choreonoid/build/

10

コマンドラインによる起動 | 引数あり
❖ コマンドライン引数によるプロジェクトファイルの起動$ choreonoid [ プロジェクトファイルパス ]❖ 例えば, ユーザ名が『user1』，プロジェクトファイルパスが『/home/user1/choreonoid/sample/SimpleController/Tank.cnoid』の場合，$ choreonoid /home/user1/choreonoid/sample/SimpleController/Tank.cnoid

11

ファイルマネージャによる起動❖ ランチャーから『ファイル』をクリックし起動12

ファイルマネージャによる起動❖ ファイルマネージャーを起動し，以下のディレクトリに移動❖ 『choreonoid』をダブルクリックし起動❖ Choreonoid格納場所は，❖ “CMAKE_INSTALL_PREFIX” オプションで指定したディレクトリ
❖ デフォルトの場合，“/usr/local/bin”（非推奨）❖ ”/home/ユーザ名/choreonoid/program”に変更した場合，”/home/ユーザ名/choreonoid/program/bin”(推奨)❖ make installを行っていない場合，インストールディレ
クトリに『choreonoid』ファイルが存在しないので注意❖ “/home/ユーザ名/choreonoid/build/bin”（必ず存在）13

Choreonoidの画面構成❖ 『メイン画面』は以下の構成となるメインメニュー
ツールバー領域

ビュー領域

ステータスバー14

メインメニュー

❖ メインメニューは各種操作や設定を一覧で表示❖ ワールド（仮想世界）の生成やモデルの追加❖ 作成した仮想環境（プロジェクト）の読み込み・保存❖ ビューの生成・削除❖ シミュレーションの録画

15

ツールバー
❖ ツールバーは頻繁に使用するボタン等を並べたもので，ワンクリックするだけで実行可能
種類

説明

ファイルバー

プロジェクトファイルを上書き保存

タイムバー

シミュレーション時間の操作

シーンバー

シーンビューの設定変更やカメラ表示切替

シミュレーションバー

シミュレーションの実行・停止

16

ビュー
❖ ビューはパネル状の領域となっており，各種データの表示・編集を行える
種類

説明

アイテムツリービュー

プロジェクトを構成するアイテムを木構造で表示するビュー

アイテムプロパティビュー

アイテムのプロパティを閲覧・編集するためのビュー

メッセージビュー

Choreonoidからのメッセージが出力されるビュー

シーンビュー

各種データを3次元コンピュータグラフィックス(3D-CG)によって表示するビュー

17

各ビューの配置

アイテムツリービューシーンビュー

プロパティビュー
メッセージビュー18

プロジェクトとアイテム❖ プロジェクト
❖ シミュレーションに必要なデータ一式をChoreonoid上で扱えるようにまとめたもの❖ アイテム❖ プロジェクトを構成する各々のデータのうち，ユーザの操作対象となるもの❖ Choreonoidのプロジェクトファイルは，拡張子が 『.cnoid』形式

19

プロジェクトとアイテム❖ プロジェクト: 複数のアイテムで構成される❖ 右上の例では，4種類のアイテムで構成❖ ワールドアイテム (World)❖ ボディアイテム (SR1，Floor)❖ SR1: ロボット，Floor: 環境❖ シンプルコントローラアイテム (SR1WalkControllrer)❖ シミュレータアイテム (AISTSimulator)

20

プロジェクトの読み込み❖ メインメニューから『ファイル』→『プロジェクトの読み込み』を選択❖ 『Choreonoidプロジェクトファイルの読み込み』ダイアログが表示❖ ダイアログ上で読み込みたいプロジェクト(.cnoid)を指定❖ 例: sample/Simplecontroller/SR1Walk.cnoidを選択❖ サンプルプロジェクト格納場所❖ ~/choreonoid/sample/SimpleController

21

アイテムツリービュー❖ ワールド，ロボットモデル，シミュレータアイテムなどを木構造で表示するビュー❖ 木構造では，どのアイテムの小アイテムとするかが重要❖ ロボット (SR1)，環境モデル (Floor) は，ワールド (World) の小アイテムとして配置

22

アイテムツリービュー❖ アイテムツリービュー上で右クリックすることで，カット，コピー，ペーストなどを行える

コンテキストメニュー❖ アイテムツリービュー上でアイテムをドラッグすることで，アイテムの位置を移動できる❖ アイテムの横のチェックボックスで，表示・非表示の切り替えが可能

FloorをWorldの子アイテムとなる位置に移動

Floorをドラッグし，Worldの位置に持っていく

FloorがWorldの小アイテムとなっている

23

アイテムプロパティビュー❖ アイテムツリービュー上で，選択しているアイテムの情報を閲覧・編集できる❖ アイテムプロパティビュー上でプロパティ値をダブルクリックすると編集が行える❖ プロパティ値の編集を行えない項目もあり

24

メッセージビュー❖ モデルファイル等の読み込み状況やシミュレーションの実行時間の確認が行える

モデルファイルの読み込み状況

シミュレーションの実行時間

25

シーンビュー | 座標系❖ 各種データを三次元コンピュータグラフィックス(3DCG) によって表示するビュー❖ ロボットや環境モデルを描画❖ 例：ロボット(SR1)と環境モデル(Floor)を表示
SR1Floor26

シーンビュー | 座標系❖ 左下にある3つの矢印の組は，現在の視点から見た3次元空間の座標系❖ （赤色軸，緑色軸，青色軸） ⇒（X軸，Y軸，Z軸）に対応❖ Choreonoidでは, 鉛直上向きがZ軸の正方向❖ 格子状のグリッド線は，Z=0 の面を表す

27

シーンビュー | 閲覧モード❖ 表示されているロボットや環境モデルをドラッグすることで，視点変更が可能❖ マウスホイールをスクロールすると，モデルの拡大・縮小可能❖ シーンビュー上で『右クリック』，または『Esc』キーを押すことで，閲覧モードから編集モードに切り替えが可能

28

シーンビュー | 編集モード❖ 編集モードでロボットモデルを左クリックすると姿勢や位置の変更を行える❖ 静的モデルの場合，位置の変更はできない❖ 静的モデルの確認方法❖ アイテムツリービューで確認したいモデルを選択❖ アイテムプロパティビューの静的モデルを確認❖ true: 静的モデル❖ false: 動的モデル

29

シーンビュー | シーンバーの機能❖ シーンバーの機能を使用することで，以下のことが可能
機能

説明

編集モードの切り替え

閲覧・編集モードの切り替え

視点操作モードの切り替え

物体を中心とした操作から視点を中心とした操作への切り替え

描画用カメラ選択

ロボットに搭載されているカメラ視点切り替え
Perspective（透視投影）
Orthographic（正射影）

視点回復

シーン上の全ての物体が見えるように調節干渉線の表示

物体同士の干渉を黄緑色の線で表示

ワイヤフレーム表示

シーンがワイヤフレームで描画される

設定ダイアログ

シーンの描画や挙動をダイアログで設定

30

シーンビュー | 描画用カメラ選択❖ Perspective (透視投影) カメラ：
❖ 遠近感のついた画像を表示❖ Orthographic (正射影) カメラ：
❖ 遠近感を排除した正射影の画像を表示❖ ロボット搭載カメラ：❖ ロボットに付けているカメラ視点の画像を表示

Perspective（透視投影）

Orthographic（正射影）

ロボットの左目に付けているカメラ

31

シーンビュー | 設定ダイアログ❖ シーンバーの設定ダイアログで，以下の項目を設定可能
機能

説明

ヘッドライト

常時視点位置から照射されるライトをONにする

ワールドライト

シーン上に固定されたライト (通常上方から照射) のON/OFFを切り替える

追加のライト

シーン上に読み込まれたモデルにライトがついている場合,そのON/OFFを切り替える

背景色

シーン上で何も物体がない領域の色を設定

床グリッド線の表示

床グリッド線の表示切替，グリッドの大きさ，色を設定

32

シーンビュー | 表示モデルと干渉モデル❖ 表示モデル❖ 3Dモデリングツールを用いて作成した複雑な形状(多角形，穴のあるものなど) のモデルを表示❖ 干渉モデル❖ 四角形や円柱などを組み合わせて作成❖ 物体同士の干渉など物理計算に使用
表示モデル

干渉モデル

sample/SimpleController/AizuSpiderDS.cnoid

33

シーンビュー | 表示モデルと干渉モデル❖ シーンバーにより，表示モデルと干渉モデルの切り替えが可能❖ : 表示モデルを表示❖ : 表示中のモデル形式の切り替え❖ 切り替えパターン：❖ 表示 ⇒ 干渉❖ 干渉 ⇒ 表示❖ (表示 + 干渉) ⇒ 非表示❖ 非表示 ⇒ (表示 + 干渉)❖ : 干渉モデルを表示

34

ステータスバー❖ Choreonoidで現在進行中の処理内容を簡潔なメッセージで表示❖ シーンビュー上のグローバル座標位置を表示❖ ステータスバーは『メインメニュー』→『表示』で，表示・非表示の切り替えが可能プロジェクトの作成

35

プロジェクトの作成 | ワールドの生成❖ メインメニューから『ファイル』→『新規』→『ワールド』を選択❖ 『新しいワールドアイテムの生成』
ダイアログが表示❖ ダイアログ上でワールド名を入力し，『生成』ボタンを押す36

プロジェクトの作成 | モデル読込❖ アイテムツリービュー上の『World』を選択❖ メインメニューから『ファイル』→『読み込み』→『ボディ』を選択❖ 『ボディの読み込み』ダイアログが表示❖ ダイアログ上でロボットモデルを選択し，『読み込み』ボタンを押す37

プロジェクトの作成 | モデル読込❖ 読み込めるモデルファイルの形式は以下となる❖ .body（Choreonoidモデル形式）❖ .wrl（VRML形式）❖ .dae（COLLADA形式）❖ .stlshare/model/Tank/Tank.bodyを選択

38

プロジェクトの作成 | 環境モデル読込❖ アイテムツリービュー上の『World』を選択❖ メインメニューから『ファイル』→『読み込み』→『ボディ』を選択❖ 『ボディの読み込み』ダイアログが表示❖ ダイアログ上で環境モデルを選択し，『読み込み』ボタンを押す

share/model/Labo1/Labo1.bodyを選択

39

プロジェクトの作成 | コントローラ読込❖ アイテムツリービュー上のロボットモデルを選択❖ メインメニューから『ファイル』→『新規作成』→『シンプルコントローラ』を選択❖ 『新しいシンプルコントローラアイテムの生成』
ダイアログが表示❖ ダイアログ上で名前を入力し『生成』ボタンを押す❖ コントローラ名は任意の名前で良いが，基本的には英数字，”-“（ハイフン），”_”（アンダーライン）で命名を推奨40

プロジェクトの作成 | コントローラ読込❖ アイテムツリービューでコントローラを選択し，アイテムプロパティビューの『コントローラモジュール』をダブルクリック❖ 『コントローラモジュール』の右端のフォルダマーク
選択

コントローラモジュールをダブルクリック

フォルダマークを選択を

41

プロジェクトの作成 | コントローラ読込❖ 対象のコントローラ（拡張子: .so）を選択❖ コントローラはロボット毎に異なるため，別のロボットのコントローラを選択しないように注意する❖ コントローラモジュールは以下のディレクトリに格納❖ choreonoid/build/lib/choreonoid-1.8/simplecontroller

TankJoystickController.soを選択

42

モデルとコントローラの対応表
モデル

コントローラ

AizuSpiderNS.body

AizuSpiderController.so

AizuWheel.body

AizuWheelController.so

DoubleArmV7S.body

DoubleArmV7Controller.so

JACO2.body

JACO2Controller.so

Quadcopter.body

QuadcopterController.so❖ AizuSpiderモデルは，AizuSpderNS.body以外に，以下の2モデル存在❖ AizuSpiderSS.body（単腕付き）❖ AizuSpiderDS.body（双腕付き）

43

プロジェクトの作成 | シミュレータ読込❖ アイテムツリービュー上の『World』を選択❖ メインメニューから『ファイル』→『新規』→『AISTシミュレータ』を選択❖ 『新しいAISTシミュレータアイテムの生成』ダイアログが表示❖ ダイアログ上で名前を入力し，『生成』ボタン押す

44

プロジェクトの作成 | シミュレータ設定❖ 以下のプロパティを変更❖ 接触間引き距離: 0.005 → 0.01
❖ 指定した距離内に複数接触点がある場合に，接触点を1つに間引く❖ 接触補正速度係数: 1 → 30
❖ 物体同士が接触している時の，めり込みを補正する
速度係数

45

プロジェクトの作成 | シミュレータ設定❖ ドローンモデルを使用する場合，AISTシミュレータだけでは動作しない❖ AISTシミュレータの子アイテムとして，MulticopterSimulatorの追加が必要

MulticopterSimulatorの追加❖ アイテムツリービュー上で『AISTSimulator』を選択❖ 『ファイル』→『新規』→『MulticopterSimulator』を選択❖ 『MulticopterSimulatorItemの新規生成』
ダイアログが表示❖ ダイアログ上で名前を入力し，『生成』ボタンを押す46

プロジェクトの作成 | モデルの移動❖ アイテムツリービュー上で移動するモデルの選択を行う❖ ボディ/リンクビューに表示されている（X，Y，Z）に任意の値（単位：m）を入力することでモデルが移動❖ （R，P，Y）に角度（単位：度) を入力するとモデルが回転❖ 微調整を行う場合などに使用

47

プロジェクトの作成 | モデルの初期設定❖ 移動を行ったモデルをアイテムツリービュー上で選択❖ シミュレーションバーの『ワールド初期状態設定』ボタンクリックすることで，モデルの初期位置を登録❖ 登録に成功すると，その旨がメッセージビューに表示を

48

プロジェクトの作成 | 保存
❖ プロジェクトを保存することで，次回からプロジェクト作成の操作をせずに，シミュレーションが可能❖ 『メインメニュー』→『名前を付けてプロジェクトを保存』を選択❖ 『Choreonoidプロジェクトファイルの保存』ダイアログが表示❖ ファイル名を入力し，『保存』ボタンを押す❖ 今回ファイル名を『TankSample.cnoid』とする

49

シミュレーションの実行・停止❖ シミュレーションバー内の以下のボタンで，シミュレーションの実行・停止が可能
ボタン名

説明

初期位置からのシミュレーション

初期位置からシミュレーションを開始する

現在位置からのシミュレーション

現在位置からシミュレーションを開始する

一時停止

シミュレーションを一時停止する「現在位置からのシミュレーション」ボタンでシミュレーションを再開できる

停止

シミュレーションを停止する

50

モデルの操作 | 仮想ジョイスティック❖ ゲームパッドを持っていない場合，仮想ジョイスティックビューで代用可能❖ 『メインメニュー』→『表示』→『ビューの表示』→『Joystick』を選択することで，Joystickビューを表示可能❖ 仮想ジョイスティックでの操作は，シミュレーション実行後にJoystickビューをクリックし，アクティブ状態にする

51

仮想ジョイスティック操作例❖ メインメニューから『ファイル』→『プロジェクトの読み込み』を選択❖ 今回，作成した『TankSample.cnoid』を読み込む❖ Joystickビューが表示されている状態で，シミュレーションを開始する❖ Tankモデル操作方法❖ E，D：前進後退❖ I，K：砲塔の上下移動❖ S，F：左右の旋回❖ J，K：砲塔の左右移動❖ A：ライトの点灯

52

モデルの操作 | ゲームパッド❖ 基本的にTankモデルなどは，ゲームパッド(DUALSHOCK 4) をPCに接続することで，操作可能❖ ゲームパッドはシミュレーション実行前にPCに接続❖ シミュレーションを実行すると，ゲームパッドでモデルの操作を行える

53

ゲームパッドの接続確認❖ jstestコマンドを使用するために，joystickパッケージをインストール
sudo apt install joystick❖ ゲームパッドが反応することを確認するため，次のコマンドを実行

jstest /dev/input/js0 # 接続した順番で採番js0, js1, …

54

ゲームパッドの操作例❖ メインメニューから『ファイル』→『プロジェクトの読み込み』を選択❖ 今回，作成した『TankSample.cnoid』を読み込む❖ ゲームパッド(DUALSHOCK 4)をPCに接続し，シミュレーションを開始❖ Tankモデル操作方法❖ 左ジョイスティック 上 / 下：前進後退❖ 左ジョイスティック 左 / 右：左右の旋回❖ 右ジョイスティック 上 / 下：砲塔の上下移動❖ 右ジョイスティック 左 / 右：砲塔の左右移動❖ xボタン：ライトの点灯

55

課題 | プロジェクト作成❖ プロジェクト作成で行った手順を参考に，『ロボットとコントローラの対応表』に記載されているロボットのプロジェクトを作成してください❖ 車体とアームの操作があるモデルは，車体操作コントローラの子アイテムとしてアーム操作コントローラを配置❖ JACO2コントローラを追加した場合，コントローラオプションの編集が必要❖ AizuWheel.body：ARM_❖ AizuSpiderSS.body：なし❖ AizuSpiderDS.body：1つ目：ARM1_，2つ目：ARM2_

56

課題 | プロジェクト作成❖ すべて作成できたら，実際にシミュレーションを実行し，ロボットを操作してみてください❖ 操作方法は，『サンプルロボット操作マニュアル.docx』参照❖ AizuWheel.bodyにJACO2が付いているので，JACO2のプロジェクトは作成不要

57

モデルとコントローラの対応表
モデル

コントローラ

AizuSpiderNS.body

AizuSpiderController.so

AizuWheel.body

AizuWheelController.so

DoubleArmV7S.body

DoubleArmV7Controller.so

JACO2.body

JACO2Controller.so

Quadcopter.body

QuadcopterController.so❖ AizuSpiderモデルは，AizuSpderNS.body以外に，以下の2モデル存在❖ AizuSpiderSS.body（単腕付き）❖ AizuSpiderDS.body（双腕付き）

58

課題の解答
❖ アイテムツリービューの構成とコントローラオプション

DoubleArmV7

AizuSpiderDS

AizuWheel
Quadcopter59

サンプルモデルの操作方法❖ サンプルロボット操作マニュアルを参照

60

ゲームパッド操作プロジェクト❖ AizuSpider: sample/SimpleController/AizuSpiderDS.cnoid❖ 四輪モデル: sample/SimpleController/AizuWheel.cnoid❖ 双腕建機: sample/SimpleController/DoubleArmV7S.cnoid❖ ドローン: sample/Multicopter/QuadcopterJoystick.cnoid

双腕付きAizuSpider

単腕付き4輪モデル

双腕建機モデルドローンモデル