了解しました。 以下は 「他の人が同じ状態まで再現できる」ことを目的にした実務向け手順書です。 README や社内Wiki、そのまま配布できるレベルで書いています。

SCOUT(roller_eye)

Teach & Repeat を PC(ROS Noetic)から制御する手順書


0. 目的とゴール

目的

  • SCOUT(roller_eye 系)を PC から ROS 経由で制御・観測できるようにする
  • 公式の Teach & Repeat(NavPathNode)を PC から開始・停止・状態取得する

最終ゴール

  • PC から以下が可能になること
    • Teach 済みルート一覧の取得
    • Repeat(nav_path_start)の開始・停止
    • 状態取得(nav_get_status)
  • teleop_twist_keyboard が 条件付きで使える状態になる

1. 前提環境

ハード

  • SCOUT(roller_eye ベース)
  • PC(Ubuntu 20.04 推奨)

ソフト

  • SCOUT 側:ROS Melodic(メーカー標準)
  • PC 側:ROS Noetic
  • ネットワーク:PC ↔ SCOUT が同一 LAN

2. ネットワーク・ROS 接続設定

2.1 ROS_MASTER_URI の確認(PC 側)

echo $ROS_MASTER_URI
例:
http://192.168.11.7:11311

2.2 名前解決(推奨)

PC の /etc/hosts に SCOUT を登録:
sudo nano /etc/hosts
追記例:
192.168.11.7   linaro-alip
確認:
ping linaro-alip

3. PC 側に roller_eye メッセージ・サービスを用意する

3.1 ワークスペース準備

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
source devel/setup.bash

3.2 roller_eye パッケージを配置

SCOUT 側 /opt/ros/melodic/share/roller_eye を参考に、 PC 側 ~/catkin_ws/src/roller_eye に以下を配置:
  • msg/
  • srv/
  • CMakeLists.txt
  • package.xml
(既にある場合は OK)

4. CMakeLists.txt の修正(最重要)

4.1 正しい CMakeLists.txt 例

cmake_minimum_required(VERSION 3.0.2)
project(roller_eye)

find_package(catkin REQUIRED COMPONENTS
  std_msgs
  sensor_msgs
  message_generation
)

add_message_files(
  FILES
  alexskill.msg
  contour.msg
  detect.msg
  frame.msg
  patrol_status.msg
  point.msg
  record.msg
  status.msg
  task.msg
  wifi_config_info.msg
  wifi_info.msg
)

add_service_files(
  FILES
  nav_get_status.srv
  nav_list_path.srv
  nav_path_start.srv
  nav_cancel.srv
  nav_exit.srv
  algo_move.srv
  # ※必要に応じて他 srv を追加
)

generate_messages(
  DEPENDENCIES
  std_msgs
  sensor_msgs
)

catkin_package(
  CATKIN_DEPENDS
    message_runtime
    std_msgs
    sensor_msgs
)

include_directories(
  ${catkin_INCLUDE_DIRS}
)
⚠️ 注意
  • .msgadd_message_files
  • .srvadd_service_files
  • 混ぜるとビルドエラーになる

5. ビルド

cd ~/catkin_ws
rm -rf build devel
catkin_make
source devel/setup.bash

5.1 型が見えるか確認

rossrv show roller_eye/nav_get_status
rossrv show roller_eye/algo_move

6. NavPathNode を PC から操作する

6.1 現在状態の取得

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

6.2 Teach 済みルート一覧取得

rosservice call /NavPathNode/nav_list_path
例:
name_list:
- table
- test
- table2

6.3 Repeat(走行)開始

※ 引数形式は必ず確認すること
rossrv show roller_eye/nav_path_start
例(name 指定型の場合):
rosservice call /NavPathNode/nav_path_start "name: 'table'"

6.4 停止(安全用・重要)

rosservice call /NavPathNode/nav_cancel
rosservice call /NavPathNode/nav_exit

7. teleop_twist_keyboard についての扱い

7.1 重要な理解

  • SCOUT は cmd_vel 直結ロボットではない
  • 以下が同時に /cmd_vel を publish する:
    • AppNode
    • CoreNode
    • NavPathNode
    • CloudNode など
  • そのため teleop は常に効くわけではない

7.2 teleop が効く条件

  1. nav_cancel / nav_exit で公式制御を止める
  2. 他ノードが /cmd_vel を出していない
  3. その状態で teleop を起動
rosrun teleop_twist_keyboard teleop_twist_keyboard.py cmd_vel:=/cmd_vel
確認:
rostopic echo /cmd_vel

8. 推奨運用(研究・実験向け)

教示(Teach)

  • 公式アプリ or nav_path_save

再現(Repeat)

  • PC から nav_path_start

PC 側の役割

  • 画像取得
  • odom ログ
  • Nav 状態監視
  • 必要時のみ介入(nav_cancel / algo_move)
➡️ cmd_vel 直接制御に固執しないのが成功のコツ

9. トラブルシューティング

srv が見えない

  • catkin_make が通っているか
  • source devel/setup.bash を実行したか

teleop が効かない

  • Nav / App が動いていないか確認
  • /cmd_vel の Publisher 数を確認
rostopic info /cmd_vel

10. まとめ(重要)

  • SCOUT は NavPathNode を正面から使えるようになった時点で勝ち
  • teleop は「補助操作」
  • Teach & Repeat + PC 監視が最も安定

この手順書で再現できる状態

✅ PC から公式 Repeat を制御 ✅ ルート管理・状態取得 ✅ 将来 VPR・自律制御を重ねられる構成
必要であれば次は
  • README.md 形式
  • 社内Wiki向け
  • 研究論文の実験環境章向け
にも書き直せます。