ShelPiのカメラでストリーミングした映像をメインPCで画像認識することができたので、これをShelPiに反映させてみました。
当初計画していたシステムでは、メインPCで画像認識をローカルLLMで行い、ShelPiに行動の指示をする予定でした。
ローカルLLMは画像からとるべき行動を考え、ShelPiに直接コマンドを送って制御しようというものです。
ですが、ローカルLLMでは応答速度が遅くリニアな反応が期待できません。
ロボットを制御する場合はリアルタイムで画像を認識できないと反応が遅くストレスがたまることが分かったので、LLMではなく、YOLOによる画像認識の結果を使う事にしました。
YOLOであれば、メインPCで50ms程度の速度で処理できるため、リニアな反応をさせる事ができます。
メインPCでどこまで制御するかがわりと難しく、LLMを使ってメインPC側でShelPiを制御したいという当初の計画でプログラムを作ると、画像認識して特定のオブジェクトを検出したらShelPiの動作モードを変えるフラグをjson形式で送信するようなプログラムになりました。
ところが、この方法だとShelPiの動作はメインPCに依存するので動作にかかわるプログラムが分かれてしまいます。
また、ShelPiにはカメラの他に超音波センサーが搭載されていますが、このセンサーの情報を使いたい場合、メインPC側にデータを送信しなければなりません。
このような理由からメインPC側では動作にかかわる指示はせずに、画像認識の結果のみをShelPiに出力することにしました。
いってみれば、メインPCは目としての役割のみを担うという事で、動作はShelPiに搭載されているRaspberryPi zero2Wで制御します。
YOLOの画像認識の結果、人や犬、猫などの特定のオブジェクトを認識したら、その映像をカメラの中心にとらえるように方向を調整し、超音波センサーの測定値で適切な距離まで近づきます。
適切な距離まで近づいたらコミュニケーションをさせるという制御をさせるのです。
Shelpiの行動制御を作り込みました。
— slowtech (@slowtech) 2026年3月21日
Shelpi側はラズパイゼロ2Wでカメラの映像をストリーミング→メインPCで映像を受け取りYOLO を使った物体認識→結果をラズパイが受け取り移動→超音波センサーで距離測定→ある程度近づいたらアクション
うん、賢くなった!#Robotics #RaspberryPi #Robots pic.twitter.com/MSs5DC2MwO
ShelPiがとっても賢くなり、とてもかわいいです