Navigation 2 を使用した経路計画行うROS 2パッケージです。
penguin_nav
は Navigation 2 を使用して経路計画を行うROS 2パッケージです。以下の要素で構成されています。
nav2_bringup
パッケージの navigation_launch.py
をベースに、 collision_monitor
による衝突回避を追加しています。goThroughPoses
API を通して経路を渡しています。i
-> i+1
のベクトルから計算しています。このリポジトリをROS 2ワークスペースにクローンし、依存パッケージをインストールしてからビルドします。
# リポジトリをクローン
cd ~/ros2_ws/src
git clone https://github.com/AbudoriLab-TC2024/penguin_nav.git
# 依存パッケージをインストール
sudo apt-get update
sudo apt-get install ros-${ROS_DISTRO}-navigation2 ros-${ROS_DISTRO}-nav2-bringup python3-pandas
# ビルド
cd ~/ros2_ws
colcon build --packages-select penguin_nav
Navigation 及びウェイポイント設定スクリプトを起動します。
ターミナル1
source install/setup.sh
# Navigation + pose_to_tf
ros2 launch penguin_nav nav.launch.xml
ターミナル2
source install/setup.sh
# ウェイポイント設定スクリプト
ros2 run penguin_nav follow_path.py -- <path/to/waypoints.csv> [<path/to/waypoints2.csv> ...]
# ワイルドカードにより一括で渡すこともできる
$ ls waypoints_list
waypoints_0001.csv waypoints_0002.csv waypoints_0003.csv
$ ros2 run penguin_nav follow_path.py -- waypoints_list/waypoints_*.csv
# ros2 ... -- waypoints_list/waypoints_0001.csv waypoints_list/waypoints_0002.csv waypoints_list/waypoints_0003.csv と等価
以下は pose_to_tf
のパラメータです。launchファイルに直接ハードコーディングされていることにご注意ください。
パラメータ名 | 型 | 説明 | デフォルト値 |
---|---|---|---|
child_frame_id |
string |
Pose を TF に変換する際の子フレームID。親フレームは Pose の Header を継承します | base_link |
config/nav2_params.yaml が Navigation 2 のパラメータです。各設定は Configuration Guide に従います。
penguin_nav/follow_path.py に座標の列名がハードコーディングされているため、必要に応じて修正してください。
/scan
(sensor_msgs/msg/LaserScan
) - 2D LiDAR 形式の点群データを受け取ります。Glocal costmap、Local costmap、及び collision monitor に使用されます。/pcl_pose
(geometry_msgs/msg/PoseWithCovarianceStamped
) - ロボットの自己位置を受け取ります。/cmd_vel
(geometry_msgs/msg/Twist
) - 制御コマンドです。DDSの問題により上手く動作しないかもしれないです。その場合はこちら を参考に DDS を cyclonedds に変更してください。