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/tsukuba navigation #83

Merged
merged 2 commits into from
Nov 21, 2023
Merged

Conversation

shunki1006
Copy link
Contributor

@shunki1006 shunki1006 commented Nov 20, 2023

PR Type

  • Feature
  • Bug fix
  • Refactor
  • Documentation
  • Other

Overview

  • つくちゃれ2023左側スタート用ファイルの初期位置調整, ロボットのfootprint調整, stopするはずのwaypointで停止しない問題対策のNav2param調整.

Detail

  1. つくばチャレンジ2023で左側スタートの際のロボットの初期位置を変更しました. 走行位置のスタート位置のタイルが1枚60cmで7枚分離れていたため, 4.2mずらしました.
  2. 下記PRで急な障害物を確実に避けるために余分に大きくしたfootprintが大きすぎることが原因で狭い道を通ることができないことがつくばチャレンジ走行中に発覚したため, 下記PR変更前のfootprintに戻しました.
    参考;Fix/nav2 local costmap #73 (comment)
  3. tandemが終わる位置にstopのパラメータがtrueになっているwaypointがあるとstopせずに通過してしまう問題があり, その原因として, navigation2のゴール到達判定と, waypoint_navigationのゴール到達判定の相違にあると考えたため, Nav2param内の到達判定を厳しく, waypoint_navigation内の到達判定を緩くすることで対応しました. これにより, 基本的waypoint_navigationの判定をもとに次の動作をするようになっています.

Test

  • つくばチャレンジ動作確認済み.

Attention

  • つくちゃれ左側スタート用に初期位置を変えた点と, launch内で指定する走行コースがつくばようになっている以外は下記PRと同様の内容になっているはずです.
    参考;Fix/nav2 param navigation #82 (comment)

@shunki1006 shunki1006 added bug Something isn't working enhancement New feature or request labels Nov 20, 2023
@shunki1006 shunki1006 self-assigned this Nov 20, 2023
@Alpaca-zip
Copy link
Contributor

waypointがあるとstopせずに通過してしまう問題があり, その原因として, navigation2のゴール到達判定と, waypoint_navigationのゴール到達判定の相違にあると考えたため

これとtandemは何か関係があるんですか?

@koki0624
Copy link
Contributor

  1. tandemが終わる位置にstopのパラメータがtrueになっているwaypointがあるとstopせずに通過してしまう問題があり, その原因として, navigation2のゴール到達判定と, waypoint_navigationのゴール到達判定の相違にあると考えたため, Nav2param内の到達判定を厳しく, waypoint_navigation内の到達判定を緩くすることで対応しました. これにより, 基本的waypoint_navigationの判定をもとに次の動作をするようになっています.

返信が遅れました。
ここの記述ですが、以下の2つの問題(原因は推測です)が複合しています。

  1. stop が true である waypoint のゴール判定は、距離と方位が waypoint_nav にパラメータで与える min_dist_err, min_yaw_err を下回るか、nav2 の方でゴールしたと判定されるかのどちらかを満たすときです。しかし、stop が true である waypoint にゴールを設定した直後、後者の nav2 のゴール判定が残っている(nav2 はゴールした状態のままになっている)ことがあるようで、1つ前の waypoint で、停止してしまうことがありました。仮にここで手動で再開させたとしても、本来停止すべき地点を通過してしまうということが起きました。

  2. tandem が終わる地点では、global_costmap の状態の切り替え(tanndem中は無効化、終わると有効化)を行なっています。ただ、ナビゲーション中に行なうと不具合があったので、一度停止させてから切り替え、再開させています。この再開させるタイミングが、stop が true の waypoint と被ると、手動で再開されたものと区別ができず、勝手にスタートしてしまうのではないか、と推測していました。

対応として、1に対しては nav2 のゴール判定を厳しくすることで nav2 のゴール判定よりも先に waypoint_nav にゴール判定をさせることで対応しました。2に対しては、一時停止直前の tandem を無くすことで対応しました。

厳密な検証をする時間はなかったので、原因は推測に過ぎませんが、ひとまず本番では以上の対応をしました。

@Alpaca-zip
Copy link
Contributor

1つ前の waypoint で、停止してしまうことがありました。仮にここで手動で再開させたとしても、本来停止すべき地点を通過してしまうということが起きました。

waypoint_navigation側ではゴール到達判定になっているが、navigation2ではゴール到達判定になっていない状態で、navigation2の方でゴールしたと判定されると、waypoint_navigation側では一つ先のwaypointでゴールしたことになってしまい停止したいwaypointで停止できないということですか?

この再開させるタイミングが、stop が true の waypoint と被ると、手動で再開されたものと区別ができず、勝手にスタートしてしまうのではないか、と推測していました。

手動で再開するときって/joyを監視しているのではないですか?

@koki0624
Copy link
Contributor

1つ前の waypoint で、停止してしまうことがありました。仮にここで手動で再開させたとしても、本来停止すべき地点を通過してしまうということが起きました。

waypoint_navigation側ではゴール到達判定になっているが、navigation2ではゴール到達判定になっていない状態で、navigation2の方でゴールしたと判定されると、waypoint_navigation側では一つ先のwaypointでゴールしたことになってしまい停止したいwaypointで停止できないということですか?

stop が true の waypoint を N番目としたとき、

  1. N-1番目の waypoint に到達する。このとき、waypoint_nav はもちろん、nav2 の方でもゴールしたと判定された場合、nav2 の状態が "ゴールした" 状態になる。
  2. waypoint_nav が N番目の waypoint をゴールに設定し、ゴール判定をし始める。
  3. nav2 の状態が "ゴールした" 状態のままの場合、N番目にゴールを設定した直後に waypoint_nav はゴールしたと判定してしまう。(stop が true の waypoint でのゴール判定に nav2 の状態も利用しているため)
  4. 結果として N-1 番目の waypoint に到達直後、N番目の waypoint に到達したと判定されてしまい、一時停止する。

このようなプロセスで問題が起きていると推測しています。


この再開させるタイミングが、stop が true の waypoint と被ると、手動で再開されたものと区別ができず、勝手にスタートしてしまうのではないか、と推測していました。

手動で再開するときって/joyを監視しているのではないですか?

ナビゲーション時、コントローラは使用していません。手動とは、rviz 上のボタンで再開させるという意味です。

@Alpaca-zip
Copy link
Contributor

stop が true の waypoint を N番目としたとき、

  1. N-1番目の waypoint に到達する。このとき、waypoint_nav はもちろん、nav2 の方でもゴールしたと判定された場合、nav2 の状態が "ゴールした" 状態になる。
  2. waypoint_nav が N番目の waypoint をゴールに設定し、ゴール判定をし始める。
  3. nav2 の状態が "ゴールした" 状態のままの場合、N番目にゴールを設定した直後に waypoint_nav はゴールしたと判定してしまう。(stop が true の waypoint でのゴール判定に nav2 の状態も利用しているため)
  4. 結果として N-1 番目の waypoint に到達直後、N番目の waypoint に到達したと判定されてしまい、一時停止する。

このようなプロセスで問題が起きていると推測しています。

なるほど、理解しました。
waypoint_nav側で、どのwaypointのゴール判定であるかの識別はできたほうが良さそうですね。この件について時間があればissue化していただけると嬉しいです。

ナビゲーション時、コントローラは使用していません。手動とは、rviz 上のボタンで再開させるという意味です。

すみません。完全に忘れていました。
rviz 上のボタンで再開させるのとtanndemから復帰する際の区別がつかないということですが、何かグローバル変数などでステートが共有されてしまっているということですか?

@koki0624
Copy link
Contributor

なるほど、理解しました。 waypoint_nav側で、どのwaypointのゴール判定であるかの識別はできたほうが良さそうですね。この件について時間があればissue化していただけると嬉しいです。

承知です。後ほど orange_navigation の方で issue にしておきます。


すみません。完全に忘れていました。 rviz 上のボタンで再開させるのとtanndemから復帰する際の区別がつかないということですが、何かグローバル変数などでステートが共有されてしまっているということですか?

ナビゲーションの中断や再開は、すべて waypoint_nav の ROS Service をコールする形で実装しています(rviz や tandem からこのサービスをコールする)。このとき、現状の実装では waypoint_nav は誰からサービスをコールされたのか判別ができない、ということです。

ROS2 移行時に考えてはいたのですが、ROS1 ではこれが問題になることがなかった(これが問題の原因かは不確かですが)ということと、ROS2の標準サービス(std_srvs)では、リクエスト側にデータを含むものが Bool のみで、2つ以上の判別ができない(十分だとしてもあまり美しくない)こともあり先送りにしていました。

@Alpaca-zip
Copy link
Contributor

ナビゲーションの中断や再開は、すべて waypoint_nav の ROS Service をコールする形で実装しています(rviz や tandem からこのサービスをコールする)。このとき、現状の実装では waypoint_nav は誰からサービスをコールされたのか判別ができない、ということです。

ROS2 移行時に考えてはいたのですが、ROS1 ではこれが問題になることがなかった(これが問題の原因かは不確かですが)ということと、ROS2の標準サービス(std_srvs)では、リクエスト側にデータを含むものが Bool のみで、2つ以上の判別ができない(十分だとしてもあまり美しくない)こともあり先送りにしていました。

解説頂きありがとうございます。こちらの件もissue対応した方が良いかもしれませんね。

とりあえずここでの作業内容は良いと思います。

@Alpaca-zip Alpaca-zip merged commit 31ef517 into devel/tsukuba2023_Senior Nov 21, 2023
1 check passed
@Alpaca-zip Alpaca-zip deleted the fix/tsukuba_navigation branch November 21, 2023 09:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants