SLAM (自己位置推定) のための Localization ~ekf 設定調整~ (ROS2-Foxy)

ROS2
スポンサーリンク

スポンサーリンク

はじめに

前回までの記事で、マップ作成が完結しました。

今回は、ekf の設定項目について、テストしながら説明していければと思います。

前提条件

前提条件は、以下の通りです。

  • first_ekf.yaml を使用して ekf を実行できる

ekf 設定ファイルとlaunchファイルの確認

first_ekf.yaml についてはこちらの記事で説明しました。

launch ファイルについて説明していないので、以下の部分について説明します。

Node(
    package='robot_localization',
    executable='ekf_node',
    name='ekf_filter_node',
    output='screen',
    parameters=[ekf_path, {'use_sim_time': use_sim_time}]),

robot_localization パッケージは、こちらの公式サイトに説明があります。

今回は、拡張カルマンフィルタである ekf_node を実行します。

ekf のパラメータ変更 -IMU-

次に、first_ekf.yaml を変更して、どうなるかを確認してみましょう。

launch ファイルは first_localization.launch.py を使用します。

first_ekf.yaml を以下のように変更してください。IMU の Z軸 を有効化します。

imu0: first_robot/imu
imu0_config: [true, true, false,       # position of xyz
               false, false, true,     # angle of rpy
               true, true, false,      # velocity of xyz
               false, false, true,      # angular velocity of rpy
               true, true, false,]     # acceleraion of xyz
↓
imu0: first_robot/imu
imu0_config: [true, true, true,       # position of xyz
               false, false, true,     # angle of rpy
               true, true, true,      # velocity of xyz
               false, false, true,      # angular velocity of rpy
               true, true, true,]     # acceleraion of xyz

この状態で実行してみます。

ros2 launch ros2_first_test first_localization.launch.py

こちらを実行すると、以下の画像のようになります。

私は最初何が起きているか分かりませんでした。
Odometry が空を飛んでいます。

URDF ファイルの IMU の設置状況が良くないのだと思いますが、ひとまずこれで続けていきます。

次は、別のステータスを有効にします。

imu0: first_robot/imu
imu0_config: [true, true, false,       # position of xyz
               false, false, true,     # angle of rpy
               true, true, false,      # velocity of xyz
               false, false, true,      # angular velocity of rpy
               true, true, false,]     # acceleraion of xyz
↓
imu0: first_robot/imu
imu0_config: [true, true, false,       # position of xyz
               true, true, true,     # angle of rpy
               true, true, false,      # velocity of xyz
               true, true, true,      # angular velocity of rpy
               true, true, false,]     # acceleraion of xyz

変更したら、first_localization.launch.py を起動してみましょう。

ros2 launch ros2_first_test first_localization.launch.py

左上の移動か回転をクリックしてから、ロボットをクリックすると、少しだけ宙に浮きます。
そのままにしておくと、だんだん地面に傾いていきます。

ekf のパラメータ変更 -odom-

次は odom のパラメータを変更していこうと思います。

odom0: first_robot/odom
odom0_config: [true, true, false,       # position of xyz
               false, false, true,     # angle of rpy
               true, true, false,      # velocity of xyz
               false, false, true,      # angular velocity of rpy
               true, true, false,]     # acceleraion of xyz
↓
odom0: first_robot/odom
odom0_config: [true, true, true,       # position of xyz
               false, false, true,     # angle of rpy
               true, true, true,      # velocity of xyz
               false, false, true,      # angular velocity of rpy
               true, true, true,]     # acceleraion of xyz

変更し、ビルドしましたら、起動します。

ros2 launch ros2_first_test first_localization.launch.py

最初は何ともありませんが、時間が経過するといつの間にか以下のようになっています。

この状態で動かしてみましょう。別のターミナルを開いて以下のコマンドを実行してみてください。

ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args --remap cmd_vel:=/first_robot/cmd_vel

以下のように、面白い現象が起きます。

空飛ぶ自動車になっています。

ekf のパラメータ変更はここまでにしておきます。
必ず、元のパラメータに戻しておいてください。

おわりに

今回は ekf の設定変更についてテストをしました。

少し設定を間違えるだけでも、大きな影響があることが分かっていただけたと思います。

SLAMパラメータの調整も含めると非常に長くなりそうなので、次回とします。

コメント

タイトルとURLをコピーしました