RTSP対応のカメラ(例えばTapo のカメラ)などを用意してRTSPを出力するように設定する。
参考: Tapoを使用したRTSPライブストリーミングの利用方法
GSCamを使えるようにする https://docs.ros.org/en/humble/p/gscam/
# 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で終了。
# 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/camera/image_rawまたは/camera/image_raw/compressedをサブスクライブする。
ここに従う https://github.com/mgonzs13/yolo_ros
こんな感じ
ros2 launch yolo_bringup yolo.launch.py input_image_topic:=/camera/image_raw model:=yolo11m.pt device:=cuda:0/yolo/dbg_imageトピックをImage Viewプラグインで表示。
/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関連もそこで動かせば、外部ネットワーク無しで動く。ただし推論は遅いのでアクセラレータが欲しくなる。
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"