SCOUT × ROS(Teach & Repeat / teleop)現状まとめ
1. 環境・前提
- ロボット:SCOUT(roller_eye 系)
- ROS:
- ロボット側:ROS Melodic(
/opt/ros/melodicに roller_eye パッケージあり) - PC側:ROS Noetic
- ロボット側:ROS Melodic(
- 通信:
- ROS Master:
linaro-alip (192.168.11.7) /etc/hosts設定済みで名前解決は安定
- ROS Master:
- PCワークスペース:
~/catkin_ws
2. これまでの大きな問題
(A) teleop_twist_keyboard が効かない
/cmd_velには Twist が流れる- しかし SCOUTは前進せず、回転だけ一瞬動くことがある
- 原因:
/cmd_velや/cmd_vel_forceに AppNode / CoreNode / NavPathNode / UtilNode / CloudNode など多数が同時 publish/MotorNodeはそれら全てを購読- 結果:teleop が出しても 0 で上書き or 優先度で無視される
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
4. 現在の正しい理解(本質)
- SCOUTは 「cmd_vel直結ロボット」ではない
- 内部構成は:
- 公式 Nav / Patrol / App 制御が最優先
/cmd_velは 内部制御の1入力 に過ぎない
- そのため:
- teleop を直接効かせるには Nav / App / Cloud 等を明示的に止める必要がある
- 今回の進展により:
nav_cancel/nav_exitを PCから呼べる- → 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 判定)
nav_exit / nav_cancel実行teleop_twist_keyboard起動/cmd_velを echo して- 値が出るか
- すぐ 0 に戻されないか確認
Step 3(研究としての王道)
- Teach:公式アプリ or nav_path_save
- Repeat:
nav_path_start - PC側:
- 画像・odom・Nav状態をログ
- 必要なら
nav_cancel→algo_moveで介入
8. 一言まとめ(次の相談者向け)
SCOUTは cmd_vel 直結ではなく、 公式 NavPathNode を PC から制御できた時点で勝ち筋が見えた。 teleopは目的ではなく、Nav制御を止めたときの補助操作として扱うのが正解。
このまま次チャットに貼ってもらえれば、 「じゃあ次は nav_path_start をどう使うか」「Repeat中にVPRをどう重ねるか」 からすぐ続けられます。





