コンテンツにスキップ

自動起動 (systemd)

このページでわかること

questix_robot.service の安全機構(モードによる起動ロック)、設定ファイルの役割、サービスの操作コマンドがわかります。

ロボット実機 (Raspberry Pi 5) では、systemd サービスにより起動時に ROS 2 のロボット制御を 自動起動できます。robot_autostart ロール(Pi 5 セットアップ)で導入されます。

安全機構:モードによる起動ロック

このサービスは モードが competition(競技)のときだけ ROS 2 を起動します。 それ以外(既定は practice)では起動をスキップします。意図しない自動起動による ハードウェアの暴走を防ぐための安全機構です。

flowchart TD
    A[起動 / questix_robot.service] --> B[questix_robot_launcher.sh]
    B --> C{/etc/questix_robot/mode}
    C -->|competition| D[ROS 2 launch を実行]
    C -->|practice ほか| E[起動をスキップ]

モードの切り替え:

# 競技モード(自動起動を有効化)
echo competition | sudo tee /etc/questix_robot/mode

# 練習モード(自動起動を無効化=既定)
echo practice | sudo tee /etc/questix_robot/mode

設定ファイル

パス 役割
/etc/questix_robot/mode practice または competition
/etc/questix_robot/launch.env 実行時の環境変数オーバーライド
/opt/questix_robot/questix_robot_launcher.sh 起動スクリプト本体

launch.env(既定値)

launch.env で起動するコンポーネントやコントローラ種別を切り替えます。

# ROS2 ディストリビューションとワークスペース
ROS_DISTRO=jazzy
ROBOT_WS=/home/ubuntu/robot_ws

# ROS2 ドメイン ID(複数台運用時は機体ごとに変更)
ROS_DOMAIN_ID=42

# 起動コンポーネントのトグル
ENABLE_LIDAR=true
ENABLE_SHOT=true
ENABLE_DRIVE=true
ENABLE_GPIO_REF=false
ENABLE_RVIZ=false

# コントローラ種別: uart または dualshock
CONTROLLER_TYPE=uart

起動スクリプトは、これらの環境変数をもとに次のコマンドを実行します。

ros2 launch questix_launcher questix_core.launch.xml \
  enable_lidar:=${ENABLE_LIDAR} \
  enable_shot:=${ENABLE_SHOT} \
  enable_drive:=${ENABLE_DRIVE} \
  enable_gpio_ref:=${ENABLE_GPIO_REF} \
  enable_rviz:=${ENABLE_RVIZ} \
  controller_type:=${CONTROLLER_TYPE}

サービスの操作

# 状態確認
systemctl status questix_robot.service

# 手動で起動 / 停止 / 再起動
sudo systemctl start questix_robot.service
sudo systemctl stop questix_robot.service
sudo systemctl restart questix_robot.service

# ログの確認
journalctl -u questix_robot.service -f
journalctl -t questix_robot -f

polkit ルール

50-questix-robot.pkla により、ubuntu ユーザーはパスワードなしで questix_robot.service の start / stop / restart を実行できます。

サービス定義の要点

questix_robot.service の主な設定は次のとおりです。

項目
User / Group ubuntu / ubuntu
SupplementaryGroups gpio input dialout(ハードウェアアクセス用)
Environment ROS_DISTRO=jazzy, ROBOT_WS=/home/ubuntu/robot_ws
ExecStart /opt/questix_robot/questix_robot_launcher.sh
Restart on-failureRestartSec=5
KillSignal SIGINT(ROS 2 ノードの安全終了)

ハードウェアアクセス権限

GPIO・シリアルデバイスへアクセスするため、サービスユーザーは gpio input dialout グループに所属している必要があります。 raspberry_pi_setup ロールがこれらのグループ設定を行います。