はじめに
ROS2 Foxy環境でTurtleBot3のGazeboシミュレーションパッケージをインストールしてNavigation2を動かしたのでその手順のメモ
動作環境
項目 | 値 |
---|---|
CPU | Ryzen5 |
OS | Ubuntu20.04.02LTS |
ROS2 | Foxy Fitzroy |
TurtleBot3の環境構築
Gazebo関係パッケージのインストール
$ sudo apt install gazebo11 ros-foxy-gazebo-ros-pkgs
ワークスペースの作成とTutleBot3関係パッケージのインストール
$ mkdir -p ~/turtlebot3_ws/src
$ cd ~/turtlebot3_ws
$ sudo apt install python3-vcstool
$ wget https://raw.githubusercontent.com/ROBOTIS-GIT/turtlebot3/ros2/turtlebot3.repos
$ vcs import src < turtlebot3.repos
パッケージのビルド
$ colcon build --symlink-install
ビルドに失敗したら以下でdynamixel_sdkパッケージをインストールしてください
$ sudo apt install ros-foxy-dynamixel-sdk
ワークスペースの環境設定
$ echo 'source ~/turtlebot3_ws/install/setup.bash' >> ~/.bashrc
TurtleBot3のモデルの環境変数を~/.bashrcに記述
TURTLEBOT3_MODEL=
にはburger
, waffle
, waffle_pi
のいずれかを指定
とりあえずburgerを使用
$ echo 'export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:~/turtlebot3_ws/src/turtlebot3/turtlebot3_simulations/turtlebot3_gazebo/models' >> ~/.bashrc
$ echo 'export TURTLEBOT3_MODEL=burger' >> ~/.bashrc
$ source ~/.bashrc
Gazeboシミュレーションの実行
以下で実行、Gazeboが起動するまで最初は時間がかかります。
$ ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
以下の用にGazeboワールドとロボットのモデルが表示されれば成功
TurtleBot3のモデルが簡単な形状になっていますがこれでいいらしいです。
Navigation2のインストール
以下でインストール
$ sudo apt install ros-foxy-navigation2
$ sudo apt install ros-foxy-nav2-bringup
ソースからビルドする場合(最新版を使う場合こちら推奨)
$ cd ~/ros2_ws/src
$ git clone https://github.com/ros-planning/navigation2.git
$ cd navigation2
$ git checkout foxy-devel
$ cd ~/ros2_ws
$ colcon build --symlink-install
Navigation2の実行
TurtleBot3 シミュレーションを起動
$ ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
Navigation2の実行
$ ros2 launch turtlebot3_navigation2 navigation2.launch.py
rviz2が起動し、以下のような画面が表示されます。
まずrviz2上の2D Pose Estimate
をクリック、地図上の初期位置をドラックして初期位置を設定します。
次にNavigation2 Goal
をクリックして移動させたい位置と姿勢をドラックしてゴールを指定するとGazebo上のTurtlebot3が指定した位置に向かって動き出します。
おわりに
最初はこちらのNavigation2ドキュメントを参考にTurtleBot3パッケージをaptから取ってきてやったのですがうまくいきませんでした。
今後はNavigation2について理解していきたいと思います。
(2021/05/03 追記:最新版で上のNavigation2ドキュメント通りの方法で動くようになっていました。)
参考
おまけ
Navigation2実行時のrqt_graphやトピックを見てみます。
トピック一覧
$ ros2 topic list
/amcl/transition_event
/amcl_pose
/bt_navigator/transition_event
/clicked_point
/clock
/cmd_vel
/controller_server/transition_event
/cost_cloud
/downsampled_costmap
/downsampled_costmap_updates
/evaluation
/global_costmap/costmap
/global_costmap/costmap_raw
/global_costmap/costmap_updates
/global_costmap/footprint
/global_costmap/global_costmap/transition_event
/global_costmap/published_footprint
/global_costmap/voxel_marked_cloud
/goal_pose
/imu
/initialpose
/joint_states
/local_costmap/clearing_endpoints
/local_costmap/costmap
/local_costmap/costmap_raw
/local_costmap/costmap_updates
/local_costmap/footprint
/local_costmap/local_costmap/transition_event
/local_costmap/published_footprint
/local_costmap/voxel_grid
/local_costmap/voxel_marked_cloud
/local_plan
/map
/map_server/transition_event
/map_updates
/marker
/mobile_base/sensors/bumper_pointcloud
/odom
/parameter_events
/particle_cloud
/particlecloud
/plan
/planner_server/transition_event
/received_global_plan
/recoveries_server/transition_event
/robot_description
/rosout
/scan
/tf
/tf_static
/transformed_global_plan
/waypoint_follower/transition_event
/waypoints
ノード一覧
$ ros2 node list
/amcl
/amcl_rclcpp_node
/bt_navigator
/bt_navigator_rclcpp_node
/controller_server
/controller_server_rclcpp_node
/gazebo
/global_costmap/global_costmap
/global_costmap/global_costmap_rclcpp_node
/global_costmap_client
/lifecycle_manager_localization
/lifecycle_manager_localization_service_client
/lifecycle_manager_navigation
/lifecycle_manager_navigation_service_client
/local_costmap/local_costmap
/local_costmap/local_costmap_rclcpp_node
/local_costmap_client
/map_server
/planner_server
/planner_server_rclcpp_node
/recoveries_server
/recoveries_server_rclcpp_node
/robot_state_publisher
/rviz2
/rviz2
/rviz2
/rviz2
/transform_listener_impl_558dfb1ede70
/transform_listener_impl_55c19cce39e0
/transform_listener_impl_561e7b781750
/transform_listener_impl_5625557a28c0
/transform_listener_impl_564441e1cea0
/turtlebot3_diff_drive
/turtlebot3_imu
/turtlebot3_joint_state
/turtlebot3_laserscan
/waypoint_follower
/waypoint_follower_rclcpp_node
rqt_graph
$ rqt_graph
ROS1のNavigationではmove_baseノードにまとめられていた機能が個別のノードに分かれているためかなり複雑になっています。