コンテンツにスキップ

開発サイクル

このページでわかること

QUESTiX のコードを変更してロボットで動かすまでの開発サイクル(編集 → ビルド → 起動 → 確認)と、ワークスペース構成がわかります。

開発の流れ

flowchart LR
    A["① コードを編集\n~/questix/ 配下"] --> B
    B["② ビルド\ncolcon build --symlink-install"] --> C
    C["③ install を読み込む\nsource install/setup.bash"] --> D
    D["④ 起動・確認\nros2 launch ..."] --> A

--symlink-install について

--symlink-install フラグをつけてビルドすると、Python スクリプトや YAML ファイルはシンボリックリンクで install/ に展開されます。これらのファイルを変更した場合、再ビルドせずにノードを再起動するだけで変更が反映されます。C++ コードを変更した場合は再ビルドが必要です。


ワークスペース構成

開発は 2 つのディレクトリにまたがります。

~/
├── questix/          ← ROS 2 パッケージのソース(git リポジトリ)
│   ├── motor_control_app/
│   │   ├── config/   ← パラメータ YAML(変更が多い)
│   │   └── src/
│   ├── launcher/
│   │   └── launch/   ← launch XML ファイル
│   └── ...
└── robot_ws/         ← colcon ワークスペース
    ├── src/          ← vcs import で取得したソース(symlink)
    ├── build/
    ├── install/      ← ビルド成果物(ここを source する)
    └── log/

ソースは questix/ に置く

~/robot_ws/src/vcs import によって生成されるシンボリックリンクを含みます。実際のコードは ~/questix/ を直接編集してください。


よく使うコマンド

ビルド

rw                          # ~/robot_ws に移動
source /opt/ros/jazzy/setup.bash  # ROS 2 環境を読み込む(初回 or 新しいターミナル)
colcon build --symlink-install    # 全パッケージをビルド

# 特定パッケージのみ(高速)
colcon build --symlink-install --packages-select motor_control_app

install の読み込み

source ~/robot_ws/install/setup.bash

ターミナルを新しく開いた場合は毎回実行します(または ~/.bashrc に追記)。

依存リポジトリの取得

依存パッケージ(ydlidar_ros2_driver など)を取得または更新します。

cd ~/robot_ws
vcs import src < ~/questix/dependency.repos
rosdep install --from-paths src --ignore-src -r -y

開発機(AMD64)でのビルド

実機 Pi を使わず、開発機(x86_64)でビルド・テストする場合の手順です。

# 開発機セットアップ後
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
vcs import src < ~/questix/dependency.repos
source /opt/ros/jazzy/setup.bash
rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install
source install/setup.bash

GPIO・シリアルデバイスは Pi 専用

gpio_readerdrive_componentshot_component は Pi の実ハードウェアに依存します。開発機では launch 引数で該当コンポーネントを無効化してください。

ros2 launch questix_launcher questix_core.launch.xml \
  enable_drive:=false enable_shot:=false enable_gpio_ref:=false

次のステップ