はじめに
前回までの記事で、マップ作成が完結しました。
今回は、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パラメータの調整も含めると非常に長くなりそうなので、次回とします。
コメント