Kanazawanaoaki / jsk_learning_utils

4 stars 1 forks source link

Refactor RosbagReader class #1

Closed HiroIshida closed 2 years ago

HiroIshida commented 2 years ago

内容

クラス分割に関してのリファクターです. (動作チェックしてないですが, もとのコードと等価なはずです) RosbagReaderクラスが機能を持ちすぎているので, クラスを分割してモジュール性, 拡張性を高めたいです. 現行の実装だと, angle vectorとrgb_imageだけなのでこの分量ですんでいますが, depth_imageとかトルクとかいろいろ追加したくなってくると, RosbagReaderにメソッドをどんどん追加していくことになり, クラスが肥大化してしまいます.

実装のリクエスト

このPRではアングルベクターのクラスを作ってみたのですが, 同様に金沢くんの方でRGB画像に関するクラスも実装して本プログラムに統合してみてほしいです. 完成したら僕のrefactor_rosbag1ブランチ(このブランチ)にPRを投げてもらいたいです.

コメント

実装についての些末なコメントを以下に述べます.

  1. python3 では object は継承しなくてよい.
  2. クラスの内部変数を全く使わない場合は独立した関数にするか, staticmethodにする. もしその関数がそのクラス以外では使わないならstaticmethodに, 他でも使うなら独立した関数にする.
  3. python3ではかなりのクラスがdataclassで表すことができるのでこれを積極的に用いる.
  4. python3ではtype hintingを以下の理由から使うことが望ましい. 1. ドキュメント代わりになる. 2. mypy や エディタのLSPで型チェックを行ってくれるため事前にバグを防げる. 特にdeep learningや実機を使う実験では, 実行前に型チェックできると実機を使わずにほとんどのバグは修正することができる. emacsのLSPサポートは https://emacs-lsp.github.io/lsp-mode/ で大日方くんが詳しい.
  5. joint => angle_vector
  6. classmethod from_hogehoge については https://stackoverflow.com/a/682545/7624196 を参照. pythonではc++と異なりコンストラクタが1つしか定義できないので, これを使う.