0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

自動運転AIチャレンジ2024決勝 @ 11月初旬 に向けて開発を進めています。

2024決勝大会では、本番までに数回、実際の車両を使った練習の機会が設けられます。

限られた時間の中で車両適合を効率的に進めるためには、パラメータ変更を素早く行い試行回数を増やす必要があります。

simple_pure_pursuitノードに、ROS の dynamic_reconfigure に相当する処理を追加し、パラメータの動的な変更を実現してみます。

動的なパラメータ変更方法

以下を参考にすれば簡単にできました。add_parameter_callbackを使用する方法です。

例えば、simple_pure_pursuitexternal_target_vel を動的に変更したい場合、
以下の変更を行います。

simple_pure_pursuit.hpp
...
  const bool use_external_target_vel_;
-  const double external_target_vel_;
+  double external_target_vel_; // constを外す
  const double steering_tire_angle_gain_;


 private:
  void onTimer();
  bool subscribeMessageAvailable();
+  std::shared_ptr<rclcpp::ParameterEventHandler> param_subscriber_;
+  std::shared_ptr<rclcpp::ParameterCallbackHandle> cb_handle_;
...
simple_pure_pursuit.cpp
...
  using namespace std::literals::chrono_literals;
  timer_ =
    rclcpp::create_timer(this, get_clock(), 30ms, std::bind(&SimplePurePursuit::onTimer, this));
  
+  param_subscriber_ = std::make_shared<rclcpp::ParameterEventHandler>(this);
+  auto cb = [this](const rclcpp::Parameter & p) {
+    external_target_vel_ = p.as_double();
+    RCLCPP_INFO(this->get_logger(), "external_target_vel changed to %f", external_target_vel_);
+  };
+  cb_handle_ = param_subscriber_->add_parameter_callback("external_target_vel", cb);
}

AckermannControlCommand zeroAckermannControlCommand(rclcpp::Time stamp)
{
...

ビルドしてAutowareを起動します。

別ターミナルから以下コマンドを打つと目標車速値が変更され、
速く走るようになったと思います。

Terminal
ros2 param set /simple_pure_pursuit_node external_target_vel 11.1111

GUIで変更したい場合は以下で、external_target_vel を変えると同様のことができます。

Terminal
ros2 run rqt_reconfigure rqt_reconfigure

image.png

他にもadd_on_set_parameters_callbackを使用する方法もあり、
どちらかというと、こちらの実装が多いです。

どちらのほうがベターか、は実はよくわかっていません…
ただ公式ドキュメントのチュートリアルではadd_parameter_callbackを使っていたので、今回はこちらを採用しました。またコミュニティでは以下のような言及がありましたので載せておきます。

(追記)
add_parameter_callback
特定のパラメータ の変更に対してコールバックを登録する。

add_on_set_parameters_callback
複数のパラメータ の変更に対してコールバックを登録する。
変更のバリデーションや複数パラメータをまとめて更新する用途と理解。

(参考) Pythonで書かれたノードの場合…

上記はC++(rclcpp)の1例ですが、Python(rclpy)はというと…

まずhumbleの公式ドキュメントには、同様のadd_parameter_callbackを使ったPython(rclpy)チュートリアルが存在しませんでした。rollingにはありますので参考までに載せます。

既にマージされているようですが…

ただ、公式ドキュメント以外の以下記事などを参考に、
add_on_set_parameters_callbackを使うことで実現はできそうなところまでは確認しています。
皆さんトライしてみてください!

おわりに

実はこれまで個人的に避けてきた動的なパラメータ変更ですが… 意外と簡単にできることがわかりました。
これらの処理を動的に変更したいパラメータ全てに実施すれば、効率的に実車適合が行えそうな感触です。

練習時間をフル活用して、実車適合頑張るぞ〜!

※ パラメータコールバックに関するhumbleのコンセプトは以下で確認できます。

この記事は、AI文章校正ツール「ちゅらいと」で校正されています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?