自動起動 (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-failure(RestartSec=5) |
KillSignal |
SIGINT(ROS 2 ノードの安全終了) |
ハードウェアアクセス権限
GPIO・シリアルデバイスへアクセスするため、サービスユーザーは
gpio input dialout グループに所属している必要があります。
raspberry_pi_setup ロールがこれらのグループ設定を行います。