Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix zenoh topic name #7

Merged
merged 8 commits into from
May 17, 2024
Merged

Fix zenoh topic name #7

merged 8 commits into from
May 17, 2024

Conversation

h-wata
Copy link
Contributor

@h-wata h-wata commented May 10, 2024

Summary

https://github.com/sbgisen/zenoh_bridge/pull/1 に合わせてTopci名やencode、タスクの管理方法などを修正。

  • fix #

Detail

Impact

Test

Attention

@h-wata h-wata requested a review from MikhailBertrand May 10, 2024 08:51
@github-actions github-actions bot added the enhancement New feature or request label May 10, 2024
Copy link

Title

Fix zenoh topic name


PR Type

enhancement


Description

  • Zenohのトピック名をkachaka/{robot_name}/...からrobots/{robot_name}/...に変更しました。
  • ロボットのバッテリー状態とコマンドの完了状態を公開する新しい機能を追加しました。
  • ポーズ、マップ名、バッテリー状態、コマンド完了状態をJSON形式でエンコードしてZenohに公開するように変更しました。
  • コマンドを受け取るサブスクライバーのトピック名を更新しました。

Changes walkthrough 📝

Relevant files
Enhancement
connect_openrmf_by_zenoh.py
Zenohトピック名の更新と新機能の追加                                                                         

scripts/connect_openrmf_by_zenoh.py

  • Zenohトピック名の変更と新しいトピックの追加
  • バッテリー状態とコマンド完了状態の公開機能を追加
  • JSONエンコーディングを使用してZenohにデータを公開
  • コマンドサブスクライバーのトピック名を変更
  • +25/-10 

    💡 PR-Agent usage:
    Comment /help on the PR to get a list of all available PR-Agent tools and their descriptions

    Copy link

    github-actions bot commented May 10, 2024

    PR Review 🔍

    (Review updated until commit 1b1928f)

    ⏱️ Estimated effort to review [1-5]

    3, このPRは複数のファイルにわたっており、特にPythonスクリプトの変更が多いため、理解とレビューにはある程度の時間が必要です。また、新しい機能の追加や既存機能の変更が含まれているため、これらの変更が期待通りに機能するかを確認するためのテストが重要になります。

    🧪 Relevant tests

    No

    ⚡ Possible issues

    Possible Bug: publish_poseメソッドとpublish_resultメソッドで、想定外のデータ形式を受け取った場合の処理が不十分です。例外が発生する可能性があります。

    Data Handling Issue: publish_batteryメソッドでバッテリーの実際の値を取得する処理が実装されていません(TODOコメントが残されています)。これは機能不全を引き起こす可能性があります。

    🔒 Security concerns

    No

    Code feedback:
    relevant filescripts/connect_openrmf_by_zenoh.py
    suggestion      

    publish_poseメソッドで、KeyErrorが発生した場合に適切な例外処理を追加することをお勧めします。例えば、エラーログを出力してから、特定のデフォルト値を使用するなどの処理が考えられます。 [important]

    relevant lineprint(f"{pose_raw} is unexpected response format")

    relevant filescripts/connect_openrmf_by_zenoh.py
    suggestion      

    publish_batteryメソッドで、実際のバッテリーの値をロボットから取得するロジックを実装してください。現在は固定値が使用されていますが、これは実際の使用には適していません。 [important]

    relevant line# TODO Get the actual battery level from the robot

    relevant filescripts/connect_openrmf_by_zenoh.py
    suggestion      

    publish_resultメソッドで、resのデータ形式が予期せぬものであった場合の処理を追加してください。例外を投げるか、または適切なデフォルト値を設定することで、システムの堅牢性を向上させることができます。 [important]

    relevant lineprint(f"{res} is unexpected response format")

    relevant filescripts/connect_openrmf_by_zenoh.py
    suggestion      

    subscribe_commandメソッドで、コマンドのサブスクライバーを宣言する際に、コマンドの検証ロジックを追加することを検討してください。不正または不完全なコマンドがシステムに送信されるのを防ぐためです。 [medium]

    relevant linef"robots/{self.robot_name}/command", self._command_callback)

    Copy link

    PR Code Suggestions ✨

    CategorySuggestions                                                                                                                                                       
    Enhancement
    バッテリーの値を動的に取得するように変更する。

    publish_batteryメソッド内でバッテリーの値がハードコードされています。これは動的に変更されるべき値です。バッテリーの現在値を取得するメソッドを使用してください。

    scripts/connect_openrmf_by_zenoh.py [95]

    -battery = 0.8
    +battery = await self.run_method("get_battery_level")
     
    is_completedの値を動的に設定する。


    publish_resultメソッドでis_completedの値が直接設定されていますが、これはget_command_stateメソッドの結果に基づいて動的に設定されるべきです。

    scripts/connect_openrmf_by_zenoh.py [109]

    -result["is_completed"] = True if res[0] == 1 else False
    +result["is_completed"] = res["is_completed"]
     
    ポーズデータの構造を明確にする。

    publish_poseメソッドでポーズデータをJSON形式でエンコードしていますが、データ構造を明確にするためにキーを含めることを検討してください。

    scripts/connect_openrmf_by_zenoh.py [90]

    -pose = [pose_raw["x"], pose_raw["y"], pose_raw["theta"]]
    +pose = {"x": pose_raw["x"], "y": pose_raw["y"], "theta": pose_raw["theta"]}
     
    Possible issue
    トピック名の一貫性を保つための変更。


    command_is_completed_pubのトピック名が以前のcommand_state_pubから変更されていますが、これに伴う他の関連するコードの変更が必要かもしれません。全体的な一貫性を保つために、他の部分も確認してください。

    scripts/connect_openrmf_by_zenoh.py [58]

     self.command_is_completed_pub = self.session.declare_publisher(
    -    f"robots/{self.robot_name}/command_is_completed")
    +    f"robots/{self.robot_name}/command_state")
     
    Maintainability
    メソッド名のマッピングを外部定義に移動する。


    _command_callbackメソッドでmethod_namedockの場合にreturn_homeに変更していますが、このようなマッピングは設定ファイルや外部の定義に移動することを検討してください。

    scripts/connect_openrmf_by_zenoh.py [147-148]

    -if method_name == "dock":
    -    method_name = "return_home"
    +method_name = self.method_mapping.get(method_name, method_name)
     

    @h-wata h-wata self-assigned this May 10, 2024
    @h-wata
    Copy link
    Contributor Author

    h-wata commented May 15, 2024

    /review

    Copy link

    Persistent review updated to latest commit 1b1928f

    @h-wata
    Copy link
    Contributor Author

    h-wata commented May 15, 2024

    /improve

    Copy link

    PR Code Suggestions ✨

    CategorySuggestion                                                                                                                                    Score
    Security
    セキュリティリスクを軽減するために、安全なYAMLロード方法を使用します。


    yaml.safe_loadを使用する際は、特に外部からのデータを取り扱う場合には、ロードするデータの内容を検証するか、yaml.safe_loadの代わりにyaml.loadを使用し、Loaderパラメータにyaml.FullLoaderを指定することを検討してください。これにより、潜在的なセキュリティリスクを軽減できます。

    scripts/connect_openrmf_by_zenoh.py [54]

    -config = yaml.safe_load(f)
    +config = yaml.load(f, Loader=yaml.FullLoader)
     
    Suggestion importance[1-10]: 8

    Why: The suggestion correctly identifies a potential security improvement by recommending the use of yaml.load with yaml.FullLoader instead of yaml.safe_load. This change enhances security when loading YAML files.

    8
    Enhancement
    実際のバッテリー状態を取得して公開します。


    publish_batteryメソッド内でハードコードされたバッテリー値0.8を使用していますが、実際のロボットからバッテリーの状態を取得する実装を追加することをお勧めします。これにより、より正確な情報をZenohを通じて提供できるようになります。

    scripts/connect_openrmf_by_zenoh.py [109]

    -battery = 0.8
    +battery = await self.run_method("get_battery_status")
     
    Suggestion importance[1-10]: 7

    Why: The suggestion to replace a hardcoded battery value with a dynamic retrieval from the robot is valid and would improve the accuracy of the data published.

    7
    Maintainability
    設定ファイルの読み込みにおけるエラーハンドリングを改善します。


    initメソッド内で設定ファイルからmethod_mappingを読み込んでいますが、この設定が存在しない場合に備えてデフォルト値を設定するか、設定ファイルの存在チェックを行うようにしてください。これにより、設定ファイルが見つからない場合のエラーを防ぐことができます。

    scripts/connect_openrmf_by_zenoh.py [55]

    -self.method_mapping = config['method_mapping']
    +self.method_mapping = config.get('method_mapping', {})
     
    Suggestion importance[1-10]: 7

    Why: Providing a default value or checking for the existence of the configuration file before accessing it improves the maintainability and fault tolerance of the code.

    7
    Possible bug
    不正なデータ形式に対するエラーハンドリングを強化します。


    publish_resultメソッドにおいて、resのデータ構造が期待通りでない場合に単にログを出力していますが、この部分で例外を投げるか、エラー状態を適切にハンドルすることを検討してください。これにより、エラーが発生した際のロバスト性が向上します。

    scripts/connect_openrmf_by_zenoh.py [127]

    -print(f"{res} is unexpected response format")
    +raise ValueError(f"Unexpected response format: {res}")
     
    Suggestion importance[1-10]: 6

    Why: Enhancing error handling by raising an exception instead of just logging an error when unexpected data formats are encountered is a good practice for robustness.

    6

    scripts/connect_openrmf_by_zenoh.py Outdated Show resolved Hide resolved
    scripts/connect_openrmf_by_zenoh.py Outdated Show resolved Hide resolved
    @h-wata h-wata requested a review from MikhailBertrand May 16, 2024 06:31
    @h-wata h-wata requested a review from MikhailBertrand May 17, 2024 05:24
    @MikhailBertrand
    Copy link
    Contributor

    publish_resultメソッドにおいて、resのデータ構造が期待通りでない場合に単にログを出力していますが、この部分で例外を投げるか、エラー状態を適切にハンドルすることを検討してください。これにより、エラーが発生した際のロバスト性が向上します。

    上で指摘されている箇所は修正かけても良いと思いますがいかがですか?

    @MikhailBertrand MikhailBertrand merged commit e060ebf into main May 17, 2024
    @MikhailBertrand MikhailBertrand deleted the hotfix/zenoh_topic branch May 17, 2024 09:50
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    Projects
    None yet
    Development

    Successfully merging this pull request may close these issues.

    2 participants