コントローラをpythonで書くには

田崎です。お世話になります。
ふと気になったのですがロボットのコントローラをpythonで記述することは可能でしょうか?
サンプルのSR1Walk.pyなどはシミュレーション自体をpythonコードで実行しているようですが、コントローラは別の.dllを読み込んでいるようです。

コントローラは今のところはPythonで記述できるようにはなっていません。
できるようにしたいとは思うのですが、なかなかそのための時間がとれなくて…。
どなたかアルバイト等でやっていただけるという方がいらっしゃったらよいのですけど。

Pythonで記述する場合、Bodyクラスとかコントローラの記述に必要なクラスはPythonバインディングが既にあるので、それを使えるというところはあります。ただし問題があって、Pythonのインタプリタには「グローバル・インタプリタ・ロック(GIL)」というものがあって、同一プロセス中で同時に実行できるPythonコードはひとつだけなのですよね。コントローラはひとつのプロジェクトで複数使うものですし、シミュレーションの管理に別途Pythonスクリプトを使うこともありますから、実行効率を考えると、GILでいちいちロックしていたら使い物にならないのではないかと思っています。

そこでPythonでコントローラを書けるようにするとしたら、Pythonで記述された各コントローラの実行は、プロセスを分けて行うことになるかと思います。といってもそこにROS通信とか言い出すと重くなってしまうので、Choreonoidから子プロセスとしてPythonインタプリタを起動して、IOの処理には名前無しパイプか共有メモリを使うような実装がよいのではないかと思っています。Pythonコントローラを実現しようとしたらそのあたりの実装もいろいろと必要になるので、工数的にはそれなりにかかりそうなのですよね。

そのようなシステムを実装するのは面白そうですし、Pythonでコントローラを書けるようになったら使い勝手もよくなると思うので、ぜひやりたいところではあるのですが。

サンプルのSR1Walk.pyなどはシミュレーション自体をpythonコードで実行しているようですが、コントローラは別の.dllを読み込んでいるようです。

そうですね、そちらのサンプルは、SR1Walk.cnoidのプロジェクトファイルの内容を、Pythonでも書くことができるというサンプルになっています。ですのでコントローラもSR1Walk.cnoidの場合と同じシンプルコントローラになっています。

使い方的にはシンプルコントローラの.dllの代わりに.pyが指定できるというれしいですね。オーバヘッドだけがボトルネックなのであれば試しに実装してみる価値はある気がします(誰がやる問題ですね)
Gilについては知りませんでした。最近は試験的にGil無効でpythonをビルドすることもできるみたいですが、それはそれでユーザにとって手間ですね。