質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
SLAM

SLAMとは、自己位置推定とマッピングを同時に実行することを指し、自律移動するロボットなどに利用されています。センサーで周囲を把握し形状のデータに基づき自己位置を推定。修正を行いながら地図作成できる技術です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

979閲覧

waypoint navigationを滞りなく実行したい

nao_25_25

総合スコア0

SLAM

SLAMとは、自己位置推定とマッピングを同時に実行することを指し、自律移動するロボットなどに利用されています。センサーで周囲を把握し形状のデータに基づき自己位置を推定。修正を行いながら地図作成できる技術です。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/11/18 06:01

編集2022/11/18 08:48

前提

ROS melodic (rosversion : 1.14.13) を用いて台車ロボットを動かしています。

実現したいこと

waypoint navigation を用いて設定したポイントを通過しゴールポイントに到達できるようにしたいです。

発生している問題・エラーメッセージ

roslaunch megarover_samples megarover_move_base_dwa.launch を実行した後にrviz上で2D_Pose_Estimateを選択して初期位置を設定してから、navigationを実行するとnavigationが始まるはずですが、最初のwaypointに到達後次のwaypointに移動しません。シェルを見てみると以下のようなエラーが出ていました。

process[map_server-1]: started with pid [8013] process[cirkit_waypoint_navigator_node-2]: started with pid [8014] process[cirkit_waypoint_server-3]: started with pid [8015] [ INFO] [1668746370.305372772]: Loading map from image "/home/agvros/catkin_ws/src/megarover_samples/map/YM5F20221109.pgm" process[rviz-4]: started with pid [8025] [ INFO] [1668746370.315080777]: Read a 1184 X 1184 map @ 0.050 m/cell [ INFO] [1668746370.316589902]: 8waypoints are loaded. [ INFO] [1668746370.343292089]: [Waypoints file name] : /home/agvros/catkin_ws/src/cirkit_waypoint_manager/cirkit_waypoint_navigator/waypoints/2022-11-14-15-29-51.csv [ INFO] [1668746370.345981094]: Reading Waypoints. [ INFO] [1668746370.346134690]: Waiting for action server to start. [ INFO] [1668746370.518078373]: Next Waypoint : 0 [ INFO] [1668746370.518128996]: Next WayPoint is got [ INFO] [1668746370.518148232]: Go next_waypoint. [ERROR] [1668746370.518301655]: "map" passed to lookupTransform argument target_frame does not exist. [ERROR] [1668746370.518415125]: "map" passed to lookupTransform argument target_frame does not exist. [ERROR] [1668746370.522877975]: "map" passed to lookupTransform argument target_frame does not exist. [ERROR] [1668746370.622842646]: Lookup would require extrapolation at time 1668746370.612398459, but only time 1668746370.746266661 is in the buffer, when looking up transform from frame [base_link] to frame [map] [ERROR] [1668746370.722842929]: Lookup would require extrapolation into the past. Requested time 1668746370.712370635 but the earliest data is at time 1668746370.746266661, when looking up transform from frame [base_link] to frame [map] [ INFO] [1668746380.522812069]: !! WAYPOINT_NAV_PLANNING_ABORTED !! [ INFO] [1668746380.522864525]: cancelGoal() is called !! [ INFO] [1668746380.622822948]: Next Waypoint : 0 [ INFO] [1668746380.622898545]: Next WayPoint is got [ INFO] [1668746380.622913915]: Go next_waypoint.

該当のソースコード

c++

1 // 通常のwaypointの場合 2 void setNextGoal(WayPoint waypoint) { 3 reach_threshold_ = waypoint.reach_threshold_; 4 this->sendNextWaypointMarker(waypoint.goal_.target_pose.pose, 0); // 現在目指しているwaypointを表示する 5 this->sendNewGoal(waypoint.goal_.target_pose.pose); 6 } 7 8 double getReachThreshold() { 9 return reach_threshold_; 10 } 11 12 geometry_msgs::Pose getRobotCurrentPosition() { 13 // tfを使ってロボットの現在位置を取得する 14 tf::StampedTransform transform; 15 geometry_msgs::Pose pose; 16 try { 17 listener_.lookupTransform("/map", "/base_link", ros::Time(0), transform); 18 // laser scan matcher navigationの時は以下に設定 19 //listener_.lookupTransform("/odom", "/base_link", ros::Time(0), transform); 20 } catch (tf::TransformException ex) { 21 ROS_ERROR("%s", ex.what()); 22 } 23 pose.position.x = transform.getOrigin().x(); 24 pose.position.y = transform.getOrigin().y(); 25 //ROS_INFO_STREAM("c)x :" << pose.position.x << ", y :" << pose.position.y); 26 return pose; 27 } 28 29 geometry_msgs::Pose getNowGoalPosition() { 30 //ROS_INFO_STREAM("g)x :" << now_goal_.position.x << ", y :" << now_goal_.position.y); 31 return now_goal_; 32 }

試したこと

navigationでは[map]→[odom]のtfはamclで更新しており、amclのパーティクル数が増え、処理時間が増えたことでタイムスタンプの更新が遅くなる。その結果としてタイムスタンプが遅れている。という記事を拝見しましたのでamclのパラメータである"max_particles"を下げる対応をしましたが、状況は変わりません。

補足情報(FW/ツールのバージョンなど)

参考
https://qiita.com/MMM-lab/items/bd54c53310da8621fd23
参考プログラム
read_csv.cpp : https://gist.github.com/yoneken/5765597#file-read_csv-cpp

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問