バックナンバーはこちら
https://www.simulationroom999.com/blog/model-based-of-minimum-backnumber/
はじめに
オープンソースドライビングシミュレータであるCARLAの話。
今回はPythonAPIについて。
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
PythonAPI
さて、前回説明したCARLAだけど、
PythonAPIというものを持っている。
PythonAPI?
言葉だけで判断するとPython用のプログラムインターフェースを持っているってことかな?
その通り。
だと、するとダメじゃん!
なんで?
以前作ったPIDはC言語で作られてるだよ?
PythonAPIあっても呼び出せないじゃん!
あ、もしかしてSimulinkモデルからPythonコードを自動生成できるとか?
今のところPythonコードの自動生成は聞いた事ないな。
じゃ、ダメじゃん!
全体構成
ただ、PythonからC言語から作成したライブラリを呼び出すことはできる。
ん?それだと何が解決するの?
イマイチ頭の中で整理が出来てない。
絵で描くとこんな感じだよ。
イメージ的には以前やったSILSの構成に近いね。
なるほど。
アルゴリズムの一部であるPID制御をDLLに実現して、
全体をPythonで制御する感じか。
というわけでPythonからのDLL呼び出しが分かれば、
一応一連の流れは作れそうってことになる。
PythonからのDLL呼び出し
で、PythonからのDLL呼び出しってどうするの?
まぁこれはググった方が早い気がするが、
流れとしてはこう。
C言語側(PID.dll)
extern "C" __declspec(dllexport) double PID_Controller(double target, double ap )
{
/* PID制御の処理 */
}
Python側の呼び出し
from ctypes import *
dll = cdll.LoadLibrary("PID.dll")
dll.PID_Controller(50, ap )
これだけ見ると簡単そう。
まぁ実際はどのタイミングでどんな周期って問題は出てくると思うけど、
それはその時に悩めばいいかな。
ちょっと、不安になるようなこと言わないでよ。
まぁ失敗覚悟でやってみるってのも重要だよ。
単に答えを知るよりも理解を進むと思うし。
あと、もしかしたらあの伏線が回収できるかもしれない?
(伏線?なんかあったような気がするが、なんだっけか?)
まとめ
まとめだよ。
- CARLAはPythonAPIを使ってPythonから制御できる。
- PythonはDLLを呼び出すことができる。
- よって、C言語書かれたPID制御をPythonから利用する場合はDLLにした方が良い。
バックナンバーはこちら
コメント