Skip to content

Instantly share code, notes, and snippets.

@comoc
Last active April 29, 2026 12:15
Show Gist options
  • Select an option

  • Save comoc/f6196e885269a32c16dd54a02a218e9f to your computer and use it in GitHub Desktop.

Select an option

Save comoc/f6196e885269a32c16dd54a02a218e9f to your computer and use it in GitHub Desktop.
ROS 2でWi-FiカメラのRTSPをYOLOする

カメラの用意

RTSP対応のカメラ(例えば⁤Tapo のカメラ)などを用意してRTSPを出力するように設定する。

参考: Tapoを使用したRTSPライブストリーミングの利用方法

ROS 2を設定する

GSCamを使えるようにする https://docs.ros.org/en/humble/p/gscam/

GStreamerで接続確認

# LOCATION, USER, PASSWORD は適宜設定する
# LOCATION は Tapo の場合次のようになる: rtsp://192.168.12.123/stream1
gst-launch-1.0 -v \
  rtspsrc location=LOCATION \
          user-id=USER \
          user-pw=PASSWORD \
          latency=200 do-retransmission=false \
  ! rtph264depay ! h264parse ! avdec_h264 \
  ! videoconvert ! autovideosink

画面に映像が表示されたのを確認したらCrtl+Cで終了。

GSCamノードを起動する

# LOCATION, USER, PASSWORD は適宜設定する
ros2 run gscam gscam_node --ros-args -p gscam_config:="rtspsrc location=LOCATION user-id=USER user-pw=PASSWORD latency=200 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert" -p camera_name:=rtsp_cam -p frame_id:=rtsp_cam_link

rqtで確認

/camera/image_rawまたは/camera/image_raw/compressedをサブスクライブする。

yolo_rosをセットアップする

ここに従う https://github.com/mgonzs13/yolo_ros

yolo_rosノードを起動する

こんな感じ

ros2 launch yolo_bringup yolo.launch.py input_image_topic:=/camera/image_raw model:=yolo11m.pt device:=cuda:0

rqtで認識結果を可視化

/yolo/dbg_imageトピックをImage Viewプラグインで表示。

yolo_rosのトピック

/yolo/dbg_image
/yolo/debug_node/transition_event
/yolo/detections
/yolo/dgb_bb_markers
/yolo/dgb_kp_markers
/yolo/tracking
/yolo/tracking_node/transition_event
/yolo/yolo_node/transition_event

発展型

ラズパイなどをWi-FiアクセスポイントにしてROS 2関連もそこで動かせば、外部ネットワーク無しで動く。ただし推論は遅いのでアクセラレータが欲しくなる。

補足 SwitchBot のカメラの場合

GStreamerとSwitchBot カメラのRTSPの相性が悪いために、直接RTSP->FFmpeg->GSCamという構成にする。

まずはじめに、Home AssistantにSwitchBotカメラ/テレビドアホンの映像を表示する を参考に、RTSPを有効にする。

ターミナル1: FFmpegでRTSPをUDP MPEG-TSに変換

# USER と PASSWORD は SwitchBot アプリで設定した値
# IPADDRESS は SwitchBot アプリで確認した値
ffmpeg -rtsp_transport tcp \
  -i rtsp://USER:PASSWORD@IPADDRESS/live0 \
  -an -c:v copy -f mpegts udp://127.0.0.1:5000

ターミナル2: UDP MPEG-TSをGSCamのソースにする

ros2 run gscam gscam_node --ros-args \
  -p camera_name:=rtsp_cam \
  -p frame_id:=rtsp_cam_link \
  -p gscam_config:="udpsrc port=5000 caps=video/mpegts,systemstream=true,packetsize=188 ! tsdemux ! h264parse ! avdec_h264 ! videoconvert"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment