Pythonスクリプト機能の概要

Pythonスクリプト機能でできること

ChoreonoidのPythonスクリプト機能を用いると、以下のようなことが可能となります。

  • アイテムの生成・読み込み・配置といったプロジェクト構築作業の自動化

  • ボディモデルの関節角や位置・姿勢の設定、運動学計算などのモデルに関わる処理

  • シミュレーションの開始・停止の制御や、シミュレーションと連動した処理の実行

  • Pythonコンソール上での対話的な操作や状態の確認

  • Qtのクラスを用いたタイマー処理や独自GUIの構築

これらの機能を活用することで、繰り返し行う作業をスクリプト化して効率化したり、シミュレーションをバッチ的に実行したりすることができるようになります。

機能の構成

Pythonスクリプト機能は以下の要素で構成されます。

Pythonバインディング

ChoreonoidのC++ライブラリの主要なクラス・関数をPythonから利用できるようにしたPythonモジュール群です。 cnoid というパッケージとして提供され、以下のようなモジュールが含まれます。

モジュール

内容

cnoid.Util

Utilライブラリに対応するモジュールです。座標変換や補間、シーングラフ、タスク等の基盤となるクラスを含みます。

cnoid.Base

GUIの基盤であるBaseモジュールに対応するモジュールです。アイテムやビュー、プロジェクト管理等のGUI関連のクラスを含みます。

cnoid.Body

Bodyライブラリに対応するモジュールです。ボディモデルやリンク、デバイス等のロボットモデル関連のクラスを含みます。

cnoid.BodyPlugin

Bodyプラグインに対応するモジュールです。ボディアイテムやシミュレータアイテム等のクラスを含みます。

cnoid.QtCore / cnoid.QtGui / cnoid.QtWidgets

Qtライブラリの主要なクラスに対応するモジュールです。タイマーやウィジェット等を利用できます。

このほか、プラグインによっては対応するPythonモジュールが提供されるものがあります(cnoid.ODEPlugin、cnoid.MediaPlugin等)。

Pythonプラグイン

Choreonoid上でPythonスクリプトを実行するための機能を提供するプラグインです。このプラグインが読み込まれると、Choreonoid内部でPythonインタプリタが起動され、Choreonoidの各機能と連携して動作するようになります。具体的には以下の機能が提供されます。

PythonSimScriptプラグイン

シミュレーションと連動してPythonスクリプトを実行するための Pythonシミュレーションスクリプト を提供するプラグインです。シミュレーションの開始や終了といったタイミングに合わせてスクリプトを実行させることができます。

Pythonスクリプト機能を利用するための準備

Pythonスクリプト機能はCMakeのオプション ENABLE_PYTHON に対応しており、これをONにしてChoreonoidをビルドすることで利用可能となります。UbuntuではこのオプションはデフォルトでONになっています。ビルドにはPython本体(開発用ライブラリを含む)とNumPyが必要です。ビルドオプションの詳細については オプション機能 を参照してください。

Windowsでのビルド方法については、 ソースコードからのビルドとインストール (Windows編)オプション機能のビルド にあるPythonプラグインの節を参照してください。

なお、上記のオプションが有効な場合、Pythonバインディングに加えて、PythonプラグインとPythonSimScriptプラグインもあわせてビルドされます。

Choreonoid外部のPythonからの利用

Pythonバインディングのモジュールのうち、 cnoid.Utilcnoid.Body といったGUIに依存しないモジュールについては、Choreonoidを起動することなく、通常のPythonインタプリタから利用することも可能です。例えばボディモデルのファイルを読み込んで運動学計算を行うといった処理を、独立したPythonプログラムとして記述することができます。

この場合、Pythonモジュールがインストールされているディレクトリ

[Choreonoidインストール先]/lib/choreonoid-x.y/python

を環境変数 PYTHONPATH に追加しておく必要があります(x.yはChoreonoidのバージョン番号です)。インストール先が /usr や /usr/local 以外の場合は、インストール先の直下に生成される setup.bash をsourceすることでもこの設定を行うことができます。

設定ができていれば、以下のようにして通常のPythonからChoreonoidのモジュールを利用できます。

from cnoid.Body import *

loader = BodyLoader()
body = loader.load("SR1.body")
print(body.numJoints)