![]() |
tb3_controller_cpp package from tb3_controller_cpp repotb3_controller_cpp |
Package Summary
Tags | No category tags. |
Version | 0.0.1 |
License | Apache-2.0 |
Build type | AMENT_CMAKE |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/kimushun1101/tb3_controller_cpp.git |
VCS Type | git |
VCS Version | humble-single-file |
Last Updated | 2024-08-13 |
Dev Status | UNMAINTAINED |
CI status | No Continuous Integration |
Released | UNRELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
tb3_controller_cpp
Turtlebot3 に制御則を実装するパッケージ.
ロボットとその後方にある壁との距離を,指定した目標値に安定化する P 制御器を実装している.
「システム/制御/情報」 第68巻 第3号にて発行された解説記事「ROS 2による制御則実装までの道程」におけるサンプルソースコード.
その時点でのソースコードは humble-single-file ブランチ,または GitHub Release より入手してください.
https://github.com/kimushun1101/tb3_controller_cpp/releases/tag/v1.0.0
環境構築
- Ubuntu 22.04を用意
WSL でも可能であることは確認している. - ROS 2 環境構築
公式インストールページ を参考に ROS 2 をインストールして, Building a Custom Debian Package を参考にrosdep
の初期化まで完了させておく.
さらに,~/.bashrc
に ROS コマンドを有効にするためのコマンドを追加する.
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
パッケージのインストールとビルド
- ROS2のワークスペースを作り,このパッケージをインストール
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
sudo apt update
sudo apt install git
git clone https://github.com/kimushun1101/tb3_controller_cpp.git
- このパッケージの依存関係を解決
cd ~/ros2_ws
rosdep install -y --from-paths src
- ビルド
cd ~/ros2_ws
colcon build --symlink-install
シミュレーターと制御則の実行
- シミュレーターの起動
# Terminal 1
export LIBGL_ALWAYS_SOFTWARE=1 # オンボードGPU のときはこれをしないとGazebo が暗くなる?
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_gazebo turtlebot3_dqn_stage1.launch.py
初回時はGazebo の立ち上がりが遅く,エラーが出てロボットモデルが出ないかもしれない.
そのような場合にはCtrl+C
で一度閉じ,再度
ros2 launch turtlebot3_gazebo turtlebot3_dqn_stage1.launch.py
を実行する.
それでもロボットモデルが出ない場合には,Gazebo 画面内の左にあるInsert タブから,Turtlebot3(Burger) をクリックしてシミュレーター上にロボットを手動で置く.
- 新しく別のターミナルを開き,以下のコマンドで制御を開始(コントローラーを実行)
# Terminal 2
source ~/ros2_ws/install/setup.bash
ros2 run tb3_controller_cpp tb3_controller_node
シミュレーターと制御則を 1 つのターミナルから同時実行させたい場合には,上記の 2 つのターミナルのコマンドをCtrl+C
で終了して,以下のコマンドを入力する.
# Terminal 1
source ~/ros2_ws/install/setup.bash
ros2 launch tb3_controller_cpp simulation_and_controller.launch.yaml
Ctrl+C
でシミュレータも終了してしまうため,以下のパラメーター調整には不向き.
パラメーター調整
# Terminal 1
でシミュレーター,# Terminal 2
でコントローラーを起動しているものとする.
- Gazebo 上のロボットの移動
t
キーを押下してTranslation Mode
に移行してからロボットをドラッグ・アンド・ドロップ.
シミュレーションをリセットしたい場合には以下の ROS 2 service コマンドを実行する.
# Terminal 3
ros2 service call /reset_simulation std_srvs/srv/Empty
- 目標値の変更
以下のコマンドを実行する.
# Terminal 3
ros2 topic pub /xd std_msgs/msg/Float32 "data: 3.0"
新しい目標値に向かってロボットが動くはず.
- パラメーターの調整
制御則を実行したターミナル# Terminal 2
でCtrl+C
を押下することで制御則を一度切り,以下で実行し直す.
# Terminal 2
ros2 run tb3_controller_cpp tb3_controller_node --ros-args -p Kp:=3.0
Kp
と T
を色々変えて実行してみよう.
目標値は手順2 でも変更できるが,起動時の目標値として init_xd
というパラメーターも用意している.
都度 -p
オプションをつければ,複数のパラメーターを同時に設定することもできる.
# Terminal 2
ros2 run tb3_controller_cpp tb3_controller_node --ros-args -p Kp:=0.5 -p T:=0.01 -p init_xd:=3.0
- Launch ファイルに反映 決定したパラメータを launch/simulation_and_controller.launch.yaml に書き込む.
結果出力
# Terminal 1
でシミュレーター,# Terminal 2
でコントローラーを起動しているものとする.
- データの記録
rosbag2 を使用してデータの記録を開始する.
# Terminal 4
mkdir -p ~/ros2_ws/src/tb3_controller_cpp/result
cd ~/ros2_ws/src/tb3_controller_cpp/result
ros2 bag record /scan /xd /cmd_vel
目標値の変更を行う.
# Terminal 3
ros2 topic pub /xd std_msgs/msg/Float32 "data: 3.0"
記録したい動作が終了した後,# Terminal 3
を Ctrl+C
することで記録を終了する.
- グラフを書く
# Terminal 3
ros2 run plotjuggler plotjuggler
File
→Data
から rosbag2 で保存したデータ metadata.yaml
を読み込み描画する.
自身のプログラムでグラフ作成したい場合には,CSV Exporter を使用すれば CSV 形式でも取得できる.
Turtlebot 3 実機での実行
- ロボットのセットアップ
公式の e-manual に従う - ロボットのソフトウェアを立ち上げ
# SSH raspberry Pi 1
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_bringup robot.launch.py
- 新しく別のターミナルを開き,以下のコマンドで制御を開始
# SSH raspberry Pi 2
source ~/ros2_ws/install/setup.bash
ros2 run tb3_controller_cpp tb3_controller_node
シミュレーターと制御則を 1 つのターミナルから同時実行させたい場合には,以下のコマンドを入力する.
# SSH raspberry Pi 1
source ~/ros2_ws/install/setup.bash
ros2 launch tb3_controller_cpp turtlebot3_and_controller.launch.yaml
パラメーター調整や rosbag を用いたデータ取得はシミュレーターと同様であるが,
plotjuggler は GUI で使用するため,取得した rosbag を scp
コマンドなどで raspberry Pi から取り出して,
シミュレーションを行った手元のパソコンで実行する必要がある.
License
Apache License 2.0
Wiki Tutorials
Package Dependencies
Deps | Name |
---|---|
ament_cmake | |
turtlebot3_simulations | |
plotjuggler_ros | |
ament_lint_auto | |
ament_lint_common | |
ament_cmake_auto | |
rclcpp | |
std_msgs | |
sensor_msgs |