rt_usb_9axisimu_driver
rt_usb_9axisimu_driver copied to clipboard
RT-USB-9axisIMU ROS Package.
# What does this implement/fix? checkDataFormat関数を下記のように更新しました。 - ASCII形式のチェック機能を追加 - BinaryでもASCIIでもない形式のチェックも追加 - while文を追加&タイムアウト機能を追加 それ以外にも下記を修正しました。 - Binary形式のチェックを強化 - 不正なデータを読み込んでから正常なデータを読み込むように単体テストを修正 - 必要がなくなったのでhasCompletedFormatCheck()を削除 # Does this close any currently open issues? 下記のissueに対応します。 - https://github.com/rt-net/rt_usb_9axisimu_driver/issues/53...
# 現状の問題点 現在の実装だと9軸IMUのBinaryデータかASCIIデータ以外のデータを取得したときに、whileループが終わらない可能性がある。 該当箇所 ```cpp while (rclcpp::ok() && driver_->hasCompletedFormatCheck() == false) { driver_->checkDataFormat(); } ``` https://github.com/rt-net/rt_usb_9axisimu_driver/blob/ros2-devel/src/rt_usb_9axisimu_driver_component.cpp#L96 原因:checkDataFormat()がBinaryかASCIIを判別するまでループするので、BinaryでもASCIIでもないデータを取得するとループが終わらない。 # 改善案 タイムアウト機能を追加する。 # 代替案 checkDataFormat()を実行する回数をカウントする。 # その他 なし。
# What does this implement/fix? # Does this close any currently open issues? # How has this been tested? # Any other comments? # Checklists - [ ] I have...
# What does this implement/fix? #49 に関連します。 現在の実装では、IMUの最新データを受け取れるかどうかがtimerの動作周期に依存しています。 例えば、timerの周期を遅くすると最新データがほとんど取れなくなります。(遅れたデータを受信します) https://github.com/rt-net/rt_usb_9axisimu_driver/blob/94f1714f5c4d7accc133ef28a88de07eaa864053/src/rt_usb_9axisimu_driver_component.cpp#L116 このPRでは、readを繰り返し実行し、常に最新データが取れるようにします。 # Does this close any currently open issues? #49 # How has this been tested? Binary、ASCIIモードで下記を確認しました。 - timerの周期を100ms、5ms、10msに変更しても常に最新データが出力されること -...
# 現状の問題点 RtUsb9axisimuRosDriver::checkDataFormat関数では取得したデータがBinary形式かどうかのチェックは行っているが、ASCII形式かどうかのチェックは直接的には行っていない。 https://github.com/rt-net/rt_usb_9axisimu_driver/blob/ros2-devel/src/rt_usb_9axisimu_driver.cpp#L252 現在のcheckDataFormat関数の実装では取得したデータがBinary形式かどうかチェックして、Binary形式ではない場合はASCII形式だと判断している。 また、取得したデータがASCII形式だと判断されるためにはcheckDataFormat関数が二度実行される必要がある。 取得したデータが「ASCII形式」か「BinaryでもASCIIでもない形式」かの区別もできていなさそう。 # 改善案 RtUsb9axisimuRosDriver::readAsciiData関数で行っているASCII形式チェックをcheckDataFormat関数でも実施すると良さそう。 https://github.com/rt-net/rt_usb_9axisimu_driver/blob/ros2-devel/src/rt_usb_9axisimu_driver.cpp#L183 checkDataFormat関数を一度実行するだけで、Binary形式、ASCII形式、BinaryでもASCIIでもない形式、が判別できると良い。 # 代替案 なし。 # その他 なし。
タイトルの通りです。 ros2-develでimu/data_rawをpublishしていますが、IMUを傾けてもデータが0.5秒ぐらい遅延して出力されます。 そのため常に少し前のデータがpublishされています publish_timer_ = create_wall_timer(10ms, std::bind(&Driver::on_publish_timer, this)); タイマーが早すぎるかと思い、on_publish_timerの頻度を10ms->50msに変更してみましたが、 ここを変更すると更に遅延が増えました。 おそらくバッファが溜まっているような挙動をしているのですが、都度最新のジャイロの値を取得することはできませんか?
# What does this implement/fix? lifecycleのactivate時のセンサからデータが取得できるかのチェックは、元々はreadSensorData()の実行が成功するかどうかチェックしていましたが現在の方法だと正しくIMUセンサが接続されていてもタイミングによって失敗することがあるため、タイムアウト機能を追加して設定した時間内でセンサデータが取得できるかチェックするように変更します。 # Does this close any currently open issues? しません。 # How has this been tested? 下記コマンドを実行してIMUノードのlifecycleがactiveへ遷移できることを確認しました。 ```sh # ターミナル1 ros2 run rt_usb_9axisimu_driver rt_usb_9axisimu_driver #...
# What does this implement/fix? 元々launchファイルではIMUのノードを起動するだけでしたが、IMUのノードを起動してからLifecycleをactiveへ遷移させるようにlaunchファイルを変更します。 # Does this close any currently open issues? すでにclose済みですが、関連のIssueとして https://github.com/rt-net/rt_usb_9axisimu_driver/issues/64 があります。 # How has this been tested? 下記コマンドでlaunchファイルを実行すると、IMUノードのlifecycleがactiveへ遷移して、センサデータトピックが配信されることを実機で確認しました。 ```sh ros2 launch rt_usb_9axisimu_driver rt_usb_9axisimu_driver.launch.py ```...