了解です。次のチャットにそのまま貼って引き継げる前提で、 「事実」「到達点」「未解決点」「次にやること」を分けて整理します。

SCOUT × ROS(Teach & Repeat / teleop)現状まとめ

1. 環境・前提

  • ロボット:SCOUT(roller_eye 系)
  • ROS:
    • ロボット側:ROS Melodic(/opt/ros/melodic に roller_eye パッケージあり)
    • PC側:ROS Noetic
  • 通信:
    • ROS Master:linaro-alip (192.168.11.7)
    • /etc/hosts 設定済みで名前解決は安定
  • PCワークスペース:~/catkin_ws

2. これまでの大きな問題

(A) teleop_twist_keyboard が効かない

  • /cmd_vel には Twist が流れる
  • しかし SCOUTは前進せず、回転だけ一瞬動くことがある
  • 原因:
    • /cmd_vel/cmd_vel_forceAppNode / CoreNode / NavPathNode / UtilNode / CloudNode など多数が同時 publish
    • /MotorNode はそれら全てを購読
    • 結果:teleop が出しても 0 で上書き or 優先度で無視される
➡️ 単純な teleop では制御権を取れない構造

3. 重要な突破点(今回の最大成果)

(A) roller_eye の srv/msg が PC 側で使えるようになった

  • roller_eye パッケージの CMakeLists.txt を修正
    • add_service_files() を追加
    • add_message_files() を正しく整理
  • catkin_make 後、以下が PC 側で使用可能に:
rossrv show roller_eye/nav_get_status
rossrv show roller_eye/algo_move

(B) NavPathNode を PCから正式に操作できる

状態取得

rosservice call /NavPathNode/nav_get_status
# status: 0 (アイドル)

Teach済みルート一覧取得

rosservice call /NavPathNode/nav_list_path
結果:
  • /userdata/roller_eye/navigate/table
  • /userdata/roller_eye/navigate/test
  • /userdata/roller_eye/navigate/table2
➡️ Teach データが存在し、PCから完全に参照可能

4. 現在の正しい理解(本質)

  • SCOUTは 「cmd_vel直結ロボット」ではない
  • 内部構成は:
    • 公式 Nav / Patrol / App 制御が最優先
    • /cmd_vel内部制御の1入力 に過ぎない
  • そのため:
    • teleop を直接効かせるには Nav / App / Cloud 等を明示的に止める必要がある
  • 今回の進展により:
    • nav_cancel / nav_exitPCから呼べる
    • teleop が効く条件を“作れる”段階に到達

5. いま出来ること

✅ 公式 Teach & Repeat を PC から制御

  • ルート一覧取得
  • Repeat 開始・停止(nav_path_start / nav_cancel / nav_exit

✅ Repeat 実行中に

  • カメラ画像
  • odom(/MotorNode/baselink_odom_relative
  • Nav 状態 を PCで同時に取得可能
➡️ 研究用途としてはすでに成立

6. まだ未確定・未解決な点

(A) teleop_twist_keyboard が「常に」効くとは限らない

  • Nav/App が動いていると無効
  • 停止後なら効く可能性あり(要確認)

(B) cmd_vel の完全単独支配

  • /MotorNode は以下を全購読:
    • /cmd_vel
    • /cmd_vel_force
    • /cmd_vel2/3/4/8003
  • どれが最優先かは 内部ブラックボックス

7. 次にやるべきこと(優先順)

Step 1(安全)

rossrv show roller_eye/nav_exit
rossrv show roller_eye/nav_cancel
→ 正しい呼び出し形式を確定

Step 2(teleop 判定)

  1. nav_exit / nav_cancel 実行
  2. teleop_twist_keyboard 起動
  3. /cmd_vel を echo して
    • 値が出るか
    • すぐ 0 に戻されないか確認

Step 3(研究としての王道)

  • Teach:公式アプリ or nav_path_save
  • Repeatnav_path_start
  • PC側
    • 画像・odom・Nav状態をログ
    • 必要なら nav_cancelalgo_move で介入
➡️ 「PCが主・SCOUT公式制御を使う」構成が現実解

8. 一言まとめ(次の相談者向け)

SCOUTは cmd_vel 直結ではなく、 公式 NavPathNode を PC から制御できた時点で勝ち筋が見えた。 teleopは目的ではなく、Nav制御を止めたときの補助操作として扱うのが正解。

このまま次チャットに貼ってもらえれば、 「じゃあ次は nav_path_start をどう使うか」「Repeat中にVPRをどう重ねるか」 からすぐ続けられます。