11. Copyright? Pasona Inc. All rights reserved.
はまったところ3
11
Deep Learning動作
いろいろあって、C++からPythonで作ったNeural Networkを動かすのにboost::pythonを使っている。
これが、pytest->C++->boost.pythonの順番でよばれてプログラムがCoredumpする。
結果的に、librobot.soからNNを動かすのに4種類の方法が混在している。
この辺の詳細興味ある方はコメントとか、twitter @natsutanで言及してください。
需要有ればまた説明します。
pytest librobot.so boost::python
venvで作ったPython interpreter Boostコンパイルじに指定した
python interpreter
テスト環境時はsystem関数を使う事で回避
system(“python3 infer.py”)
12. Copyright? Pasona Inc. All rights reserved.
はまったところ4
12
実際のカメラが接続されて無くても、C++からlibrobot.soをLoadして、Realsenseの関数を呼んでもOK。
点群カメラ
Realsense
RenderPointMap アルゴリズム
Pythonからlibrobot.soを呼び出して、そこからRealsenseの関数を呼んだらCoredump
pytest librobot.so librealsence2.so
これ自体はよくある話で慣れてきたが、librobot.soの最初を作った立場としては納得いってない。
当初、Realsense依存を無くすように全体の設計をしている
カメラに依存しないコンテナを用意して、
後段に処理を渡す。
Realsenseの所を仮想カメラに置き換えたのに、そもそもなんでRealsenseの関数が呼ばれるんだ?という疑問
13. Copyright? Pasona Inc. All rights reserved.
はまったところ4
13
その後、カメラがRealsenseだけになった。
その後から入ってきた人がいろんな所にRealsense前提の処理を追加していった。
点群カメラ
Realsense
RenderPointMap アルゴリズム
テスト環境で仮想カメラを使うというのはカメラの追加変更に相当するが、せっかく前もって用意した仕組みが機能していなかった。
プロジェクトを進める上で、ライブラリの設計思想などがドキュメント化されておらず、後から来た人と共有できてなかった。
ただ、テスト環境を作る中でこの周辺で一つ潜在的なバグを見つけました。
時間があれば最後紹介します。
RealsenseのAPI
呼んじゃう
Realsenseから取ったデータを
直接アルゴリズムで使う
14. Copyright? Pasona Inc. All rights reserved.
はまったところ4
14
テストの期待値としてロボの姿勢(ハンドの軌道)を入れたかったが、これは挫折。
?Deep Learningのバージョンが変わると結果が一致しない
?librobot.so内部に軌道の範囲チェックが入っているのでそれを信じることに
この軌道も期
待値一致の対
象にしたい
gripper open
15. Copyright? Pasona Inc. All rights reserved.
成果
テスト環境を作って3シーン、6シナリオでテスト環境が出来ました。
ロボ動かす前にバグを2つ見つけた。一つは面白かったので紹介。
バグではないが設計上の課題は、結構見つけてます。
ドキュメントが整備できた。
今の所かけた工数分ペイしてないけど、これからガンガンバグをみつけてくれるはず。
16. Copyright? Pasona Inc. All rights reserved.
見つけたバグ
実機
仮想カメラ
project_point_to_pixel
プロジェクトの最初に作ったカメラに依存しな
いアルゴリズムを使っている。
全てmmでのやりとりを想定している。データが
mの場合は処理前に前にmmに変換する
Realsenseは座標をmで返してくるので、mでのや
りとりを期待している。mmのデータが来た場合は、
mに変換して関数を呼び出している。
実機で動いているから、こっちの動作が正しい。
RenderPointMap
バグの症状:仮想カメラにするとなぜか動かない。
調べるとmとmmが違う。1000倍したり、1/1000すると上手く動く。
おかしくなるところは実際の座標から、画像上の位置(pixel)を求めるところ。
ただ、どこかを合わせると、別のどこかがまた1000倍されたりする。
この関数にmmの座標を与えても、それっぽく動く
17. Copyright? Pasona Inc. All rights reserved.
見つけたバグ
mmの位置
mの位置
Realsenseの計算方法は、カメラの焦点を原点とする投影変換。
3次元の位置がN倍されても対応するピクセル位置は不変
mmでもmでもどちらを与えても正しいピクセル位置を返す。
顕在化してないバグ:
mを期待している変数にmmが入っている。
mmで座標を返すカメラからmで座標を返すrealsenseに変更したときの直し忘れ。たまたま動いている。
18. Copyright? Pasona Inc. All rights reserved.
まとめ
課題:
次はC++のbinding(pybind11)を使いたい。
テストの起動終了がpytest前提になってしまっていて、アルゴリズムの検証には使いにくい。
テストにいろんなファイルが必要でDocker化がやりにくい。
感想:
C のポインターを使って、無理矢理動かすところは楽しかった。
テストがALL PASSすると嬉しい
2個だけどロボ動かす前にバグ見つけて嬉しい!
ドキュメントは面倒だったが、ここでやらないとだれもやらないので頑張った。
ご清聴ありがとうございました