スタックチャンをラズパイマウスに搭載してカメラを使った顔の検出と追従

はじめに 概要 M5Stack製のStackChan(スタックチャン)をアールティの小型移動ロボットRaspberry Pi Mouse(ラズパイマウス)に搭載して、 スタックチャンのカメラを使った顔の検出と追従を行いました。 スタックチャンのカメラ画像をmicro-ROSでトピックとして配信、 ラズパイマウス側のROS 2で画像を受け取ってOpenCVで顔を検出、 顔の位置が画像の中心かつ顔の大きさが範囲内に収まるようにスタックチャンとラズパイマウスを動かします。 注意: ちなみにラズパイマウスは自社製品ですが今回は個人開発です。宣伝とかではないです。 これまでにやったこと、今回やること まずラズパイマウスをROS 2で動かせるようにセットアップしました。 Raspberry Pi Mouseをセットアップ 次にmicro-ROSとArduinoを使ってROS 2のトピック経由でスタックチャンのモータを動かせるようにしました。 スタックチャンをmicro-ROSで動かす - Arduino編 そして今回はスタックチャンのカメラ画像をトピックで配信してOpenCVによる顔の検出を行い、 スタックチャンとラズパイマウスのモータを動かして顔を追従させます。 開発環境 開発環境は前回と同様なので前回の記事を参照ください。 スタックチャンをmicro-ROSで動かす - Arduino編(再掲) スタックチャンのカメラ画像をトピックで配信 まずはスタックチャンのカメラから画像を取得してmicro-ROSで配信します。 カメラ画像の取得方法は下記の公式のサンプルプログラムを参考にしました。 M5Stack - StackChan Camera カメラ 実際に作成したプログラムは下記です(だいたいはGeminiに書いてもらいました)。 GitHub - stack-chan_micro-ros_arduino/camera_node.ino 注意点としては画像は比較的にデータサイズが大きいため、マイコンで処理する場合は扱う画像を小さくするなどの対策が必要になることがあります。 また、micro-ROSで画像をトピックとして配信するわけですが、ここでもデータサイズに制限があってあまり大きなデータは扱えないようです。 そのため今回は.frame_size = FRAMESIZE_QQVGAのように解像度は160x120に設定して、 fmt2jpg()でjpg形式に圧縮してからCompressedImageとして配信しています。 画像がグレースケールで問題なければPIXFORMAT_GRAYSCALEを設定したり、 解像度がもっと小さくてもよければFRAMESIZE_96X96を設定したりもできます。 また、配信周期は一応5Hzに設定していますが、実際は1~2Hz程度になっていました。 以上のプログラムでスタックチャンのカメラ画像を/stackchan/camera/image/compressedというトピック名で配信できました。 スタックチャンにプログラムを書き込んでmicro-ROS agentを起動した後、rqtを使って配信されているカメラ画像を確認できました。 実行方法は下記のREADMEを参照ください。 GitHub - stack-chan_micro-ROS_arduino/README#camera 顔を検出してスタックチャンとラズパイマウスで追従する カメラ画像が取得できたので本題の顔の検出と追従を行います。 ROS 2のトピックのpublish/subscribeを行うので専用のROS 2パッケージを作成しました。 下記のGitHubリポジトリとして公開しています。 GitHub - YusukeKato/stackchan_on_raspimouse ...

作成日: 2026年5月16日 · Yusuke Kato

スタックチャンをmicro-ROSで動かす - Arduino編

はじめに KickStarterでM5Stack製のスタックチャンを手に入れたので、 micro-ROSとROS 2、Arduino IDEを使ってスタックチャンのモータの制御と現在角度の取得をやってみようと思います。 KickStarterのM5Stack製スタックチャンの情報は下記リンクです。 KickStarter: M5Stack - スタックチャン 開発環境 下記の環境で開発しています。 ROS 2を使用するためUbuntu PCが必要になります。 PC Ubuntu 24.04 LTS ROS 2 Jazzy Arduino IDE 2.3.8 Docker 29.5.0 Arduino IDE - Boards esp32 3.3.8 M5Stack 3.3.7 Arduino IDE - Library micro_ros_arduino 2.0.7-humble 2026/05/17追記:3.0.0-ironでも動作確認済み M5StackChan 1.0.1 M5Stack製スタックチャン用のプログラムはGitHubでも公開しています。 GitHub - YusukeKato/stack-chan_micro-ros_arduino ROS 2のインストール ROS 2 Jazzyの公式チュートリアルは下記リンクです。 ROS 2 Jazzy Tutorials ROS 2 Jazzyのインストールについては私のほうでも別の記事に書いたので、そちらを参考にしていただければと思います。 ROS 2 Jazzy公式チュートリアル01: ROS 2 Jazzyのインストールから動作確認まで M5Stack製スタックチャンのスペック M5Stack製スタックチャンの詳細は下記リンクの公式ページで確認できます。 ...

作成日: 2026年5月13日 · 最終更新日: 2026年5月17日 · Yusuke Kato

AlpacaHackで始めるCTF入門8:初めてのDaily AlpacaHackに挑戦 2026/05/08 Vending Machine

はじめに 概要 前回から一年以上経って久々のAlpacaHackです。 どうやら毎日問題が出題されるDaily AlpacaHackというものが始まっていて、 しかも初心者向けの教育的な問題ということなので、 CTF初心者の私にちょうどよさそうです。 今回は直近で簡単そうな問題(Easy)である2026年5月8日の「Vending Machine」に挑戦してみようと思います。 Daily AlpacaHack 2026/05/08 - Vending Machine AlpacaHack AlpacaHackへのリンクはこちら AlpacaHackのサイトへのリンク 前回の記事 2024年12月09日の記事です。 AlpacaHackで始めるCTF入門7:AlpacaHack Round 5 - XorshiftStreamに挑戦 問題内容 今回挑戦する問題「Vending Machine」は自販機スクリプトからFlagを購入することを目指す問題のようです。 スクリプトを実行すると入力が求められるのでa~eのいずれかを入力するとそれに対応した商品が購入できます。 ここでfがFlagに対応しているのですが、単純にfを入力しても不正な入力と判定されてしまいます。 実際に実行してみた↓ $ nc 34.170.146.252 30573 Please select an item. ---------------- a: apple juice b: banana juice c: coke d: draft beer e: energy drink f: flag x: exit ---------------- your choice> a # aを入力 You bought apple juice. Thank you! your choice> f # fを入力 Invalid choice. your choice> x # xを入力 Bye. スクリプトを読んでみる この問題の自販機スクリプトserver.pyを読んでみます。 ...

作成日: 2026年5月10日 · Yusuke Kato

Raspberry Pi Mouseをセットアップ

はじめに せっかくのゴールデンウィークなので家でもロボット開発をしてみようということで、 アールティのRaspberry Pi Mouse V3(通称:ラズパイマウス)を購入してみました。 最終的にはM5Stack製のスタックチャンと連携させるところまでやりたいと思っています。 注意: ちなみにラズパイマウスは自社製品ですが今回は個人開発です。宣伝とかではないです。 ラズパイマウスについて 下記写真がラズパイマウスです。ROS 2対応で2つの車輪が付いた移動ロボットです。 詳しい情報については下記リンクの公式ページで説明されています。 株式会社アールティ - Raspberry Pi Mouse V3 ラズパイマウスの上にスタックチャンを乗せたかったのでオプションキットのマルチLiDARマウントも追加で購入してみました。 ラズパイマウスのセットアップ 開封 私はラズパイマウスのフルキットを購入しました。 ちょうどRaspberry Piも欲しかったので手に入って良かったです。 環境 今回は下記環境をセットアップしました。 Ubuntu Server 24.04 LTS ROS 2 Jazzy セットアップに使用したPCはWindows 11です。 セットアップ セットアップ手順は下記の公式チュートリアルに従いました。 基本的にはチュートリアル通りにセットアップを行ったのでこの記事では細かい説明は省略します。 RT Corporation Software Tutorials - Raspberry Pi Mouse Raspberry Pi Imagerを久しぶりに使いましたが、Wi-Fiやsshの設定も一緒にできてやっぱり便利ですね。 OSを書き込んでラズパイマウスを起動した後、まずはデバイスドライバをインストールしました。 ちなみにRaspberry Pi 4Bをディスプレイに繋ぐためにはmicroHDMIケーブルが必要です。 私はディスプレイに繋ぐのが少々手間だったので最初からsshで接続しました。 デバイスドライバのインストールが完了したら次にROS 2 Jazzyをインストールします。 CLI版のUbuntu Serverを使用しているので、ROS 2もros-jazzy-ros-baseのほう(desktop版ではないほう)をインストールしました。 ...

作成日: 2026年5月2日 · Yusuke Kato

Pokemon Champions日記2:シングルバトルでマスターボール級へ

はじめに Pokemon Championsを一週間くらい遊んでいます。 ポケモンバトルは初心者で、 好きなポケモンを使ったり、 バトルで強かった相手のポケモンを自分でも使ってみたり、 攻略サイトで紹介されているポケモンを使ってみたりしていました。 そしてようやくマスターボール級まで上がったので記録を残しておきます。 下記がPokemon Championsの公式サイトのリンクです。 Pokemon Champions公式サイト マスターボール級へ上がった シングルバトルでマスターボール級へ上がった時のスクショです。 ハイパーボール級のⅠまで結構サクサク上がったのですが、 残り一勝でマスターボール級に上がるというところから連敗を重ねてどんどんランクが落ちてしまいました。 その後ハイパーボール級のⅡ~Ⅰの間で勝ったり負けたりを繰り返してようやくマスターボール級に上がれたという流れです。 自分のキャラクターも少しずつ変更を加えていて、 今はオシャレなお姉さんみたいな見た目をしています。 ただ最初はお兄さんみたいな見た目を選んだので性別は男性のはずです。 主に使っているポケモン パーティのポケモンを入れ替えながらバトルを模索していて、 その中でも最初から使っているポケモンを紹介します。 マリルリ まずは私のパーティの主力であるマリルリです。 マリルリは能力値的には弱いほうのようですが、 タイプが水とフェアリーで現在の環境(ドラゴンやじめん、ほのおなど)に対してかなり強いのと、 特性の「ちからもち」で物理技がかなり強くなって、 かなり良いポケモンだと思います。 弱点のワザでなければ一発は耐えられるので耐久性も悪いわけではないです。 おすすめです。 ゲンガー 次は評判の高いゲンガーです。 ゲンガーは耐久性は低いですが、特攻と素早さが高くて先にワザを出して相手のHPを削っていく戦い方になります。 相手の特防が低ければワンパンもしやすいです。 きあいのタスキでワンパンされないようにしたり、メガゲンガーにして能力値を上げたりなど戦い方もいくつか選べそうです。 特攻が高いのでタイプ一致していないワザでも効果抜群を取れたらワンパンで倒せる可能性がそこそこあります。 おすすめです。 カビゴン 最後はカビゴンです。 カビゴンは見た目の通り耐久性が売りで格闘ワザで効果抜群を取られなければだいたいの攻撃は一発耐えられます。 さらには一発どころから2,3発耐えられたりもします。 「たべのこし」を持たせておけばさらに耐久性が上がります。 あと「じしん」や「れいとうパンチ」、「かみくだく」など様々なタイプの強めのワザを覚えられて、 いろいろな相手に効果抜群を取れて戦いやすかったりします。 最近の環境と対策 物理耐性のあるポケモンが多い アーマーガアやブリジュラス、カバルドン、ギルガルドなど物理耐性が高く、 さらに防御の能力値を上げられるポケモンと当たることが多いです。 これらのポケモンは物理ワザでは効果抜群でも一発では倒せなくて厄介でした。 パーティに特殊ワザでじめんタイプやはがねタイプに効果抜群ワザを出して戦えるポケモンを用意しておかないとしんどいと思います。 ドラゴンは単純に強い ほとんどのプレイヤーがパーティ内にドラゴンタイプのポケモンを入れているので、 ドラゴン対策をしていないと簡単に負けます。 私の場合はマリルリで倒しています。 メガリザードンYに注意 マリルリを使う注意点として、メガリザードンYのソーラービームでワンパンされるので気をつける必要があります。 タイプ的にリザードンはほのおタイプが入っているのでマリルリで勝てそうに思いますが、 実際は特性の「ひでり」でソーラービームを溜めなしで打って来てマリルリでは耐えられません。 マリルリを出した時にメガリザードンYが出てきたらすぐに入れ替えましょう。 ...

作成日: 2026年4月18日 · Yusuke Kato

Pokemon Champions日記1:ポケモンバトルしたい

はじめに ポケモンバトル特化のゲーム「Pokemon Champions」がSwitchで販売開始したのでさっそく遊んでみました。 私はポケモンシリーズはいくつかクリアしていますが、対人戦のポケモンバトルは初心者です。 あと最近のポケモンはプレイしていないので知らないポケモンも多いです。 そんな状態で分からないことは多いのですが、基本プレイは無料とのことなのでひとまず遊んでみようかと思います。 下記がPokemon Championsの公式サイトのリンクです。 Pokemon Champions公式サイト ちなみに現在はNintendo Switchだけですが、いずれはスマホアプリ版が出るっぽいです。 ポケモンスカウト Pokemon Championsではポケモンスカウト機能があって、 いわゆるソシャゲのガチャ的な仕組みでポケモンを手に入れることができます。 他のポケモン作品からポケモンを持ってこれる機能もありますが、 私は他にポケモンをプレイしていないので今のところスカウト機能で手に入れたポケモンだけでバトルしています。 下記画像に写っている赤髪が私で、 おじさんはなぜか私をジムの後継ぎにしてくれたコーディさん、 お姉さんはポケモンをスカウトできる牧場みたいなところのルッコラさんです。 スカウトでは1度に10匹のポケモンが提示されて、その中から1匹のポケモンを選択して手に入れます。 ポケモンの能力値やワザ構成、性格、特性などはランダムっぽいですが、 あとでトレーニング機能で自由に変更可能です。 ボックス内のポケモン 自分のポケモンはいつものボックスで確認できます。 現状の私のポケモンは下記画像のようになっています。 スカウトだけでもたくさんのポケモンを手に入れられるので、 今のところは他のポケモン作品を持っていなくても特に困っていないです。 最近のポケモンは詳しくないですが、 ソウブレイズが強くてカッコいいので気に入っています。 カイリューは早期ログインキャンペーンみたいなものでもらいました。 バンギラスやガルーラ、カビゴンのような耐久力のあるポケモンが安心感があって結構好きです。 あとメガシンカも使いどころをまだ理解できていませんが楽しいです。 ポケモンのトレーニング ポケモンの能力値とワザ構成、性格、特性はトレーニングで自由に変更できます。 ただし、VPというポイントかトレーニングチケットが必要なので注意が必要です。 スターターセットみたいなものを購入するとチケットがたくさんもらえます。 ランクバトル Pokemon Championsにはバトルが何種類かありますが、 メインはランクバトル(シングルとダブルがある)かと思います。 ランダムでユーザ同士でバトルして勝つとどんどんランクが上がっていきます。 最初はビギナーでチュートリアルをクリアするとモンスターボール級に上がります。 そしてモンスターボール級で何回か勝ち進むとスーパーボール級になります。 ↑服もポイントで購入できます。赤色系で統一するファッションを目指しています。 現在のランクは下記の通りです。 ビギナー級 モンスターボール級 スーパーボール級 ハイパーボール級 マスターボール級 チャンピオン級 また、一ヶ月程度のシーズンごとにランクが決まるようです。 私も一番上を目指して楽しんでいきたいと思います。 あと今はシングルバトルをメインに遊んでいますが、 ダブルバトルも遊んでみたいですね。 おわりに 今回はPokemon Championsでポケモンバトルをやってみました。 初心者なりにポケモンバトルも楽しめていて、 好きなポケモンでバトルに勝てた時の達成感も凄いので、 引き続き上を目指して勝ち進んでいきたいと思います。 それでは、また。

作成日: 2026年4月11日 · Yusuke Kato

GARAGE ガラージュのプレイ記録

はじめに 概要 かつて30万円ほどで取引されていた幻のゲームであり、 現在はリマスター版が販売されて遊びやすくなった「GARAGE ガラージュ」をプレイしました。 クリア記念に記録を残しておきます。 下記がSteamの販売ページのリンクです。 Steam - GARAGE ガラージュ 注意 本記事はネタバレありなので未プレイの方はご注意ください。 プレイのきっかけ 私がガラージュを知ったのは元にじさんじライバーの黛灰さんの配信でした。 25万円で購入したという話を見かけて気になって配信を見始めましたが、 ゲームの雰囲気が素敵すぎてビックリしたことを何となく覚えています。 さすがに25万円は払えませんが、 リマスター版は2000円くらいなのでようやく自分でもプレイできます。 プレイ記録 ゲームの始まり 主人公らしき人間が怪しげな機械に入っているムービーから始まります。 この怪しげな機械が「ガラージュ」で、Steamの販売ページでは「精神治療装置」と説明されています。 つまり、主人公は精神に何かしら異常があってガラージュで治療を受けているということです。 ガラージュによって精神世界に入り込むとゲーム開始です。 この世界においては、 鏡に映っているのが主人公で、 最初のムービーの人間とは異なる姿になっています。 アドベンチャーゲームらしく、 画面上をクリックしてアイテムを取得したり、 ギミックを操作したり、 主人公を移動させたりできます。 部屋から外に出ると木造の建物と移動用のレールが敷かれた世界が広がっています。 主人公を含めた人のような機械たちはこのレールを使って移動しています。 あと本ゲームでは釣り要素がかなり凝っていて、かつ、重要になっています。金策にも利用できます。 その釣りでエサとして使用する蟹などを「ビンドウ」という道具を仕掛けて捕獲できます。 ちなみに釣るのは魚ではなく蛙です。 ...

作成日: 2026年4月8日 · Yusuke Kato

ブログをHugoで作り替えたので記事追加をテストしてみる

はじめに Geminiに聞きながらこのブログをHugoで作り替えました。 デザインも整えてもらって綺麗になりました。 今回は新しく記事を追加するテストを行います。 見出しテスト1 この見出しが1です。 見出し2.1 この見出しは2です。 見出し2.2 この見出しは2です。 見出し3.1 この見出しは3です。 見出し3.2 この見出しは3です。 見出し4.1 この見出しは4です。 見出し4.2 この見出しは4です。 箇条書きテスト テスト1 テスト2 テスト2 テスト1 テスト2 テスト3 テスト4 URLテスト YusukeKatoBlog 画像テスト YouTubeテスト おわりに 運用しやすくなってありがたいですね。 それでは、また。

作成日: 2026年3月5日 · Yusuke Kato

Meta Quest 2でVRChatをプレイしてみる

はじめに 友達からMetaのQuest 2を借りました。 VRChatはずっとデスクトップモードで遊んでいたので、 VRモードでも遊んでみたいと思います。 プレイ環境 使用するVR機器はMeta Quest 2です。 PCのスペックは下記の通りです。 OS:Windows 11 Home CPU:Intel i5-11400H メモリ:16GB グラボ:GeForce RTX 3050 Laptop GPU PCは有線LANで接続しているのでネットワークはそれなりに安定しています。 PCとQuest 2はUSBケーブル(純正ではない)で接続します。 ※先に書いておくと、このPCのスペックではグラフィック設定を最低にしてようやく遊べるくらいの性能のようです。 これからPCを購入する場合は参考にしないようにお気をつけください。 必要なもの 必要なソフトウェアは下記の通りです。 Meta Horizon Link:Quest 2をPCと接続するためのソフトです SteamVR:SteamのゲームをVR機器で遊ぶためのソフトです VRChat:Steam版VRChatを使用します 必要なアカウントは下記の通りです。 Metaアカウント:Quest 2とMeta Horizon Linkでログインするために使用します Steamアカウント:SteamでStemVRとVRChatをインストールするために使用します VRChatアカウント:VRChatをプレイするために使用します Meta Horizon Linkのインストール Meta公式サイトからMeta Horizon Linkをインストールします。 インストールできたらMetaアカウントでログインします。 アカウントがない場合は新規作成します。 Meta公式サイト SteamでSteamVRとVRChatをインストール SteamでSteamVRとVRChatをインストールします。 Steamをインストールしていない場合は公式サイトからインストールします。 Steamアカウントが無い場合は新規作成します。 Steam公式サイト Quest 2のセットアップ Quest 2を起動してMetaアカウントでログインします。 初回起動時はネットワーク設定をしたり、周囲環境を認識したりなど、セットアップが必要です。 PCとQuest 2の接続 PCとQuest 2の接続します。 まず、PC側でMeta Horizon Linkを起動しておきます。 一つ目の接続方法はUSBケーブルでPCとQuest 2を接続する方法です。 USBケーブルを接続するとMeta Horizon Linkで自動的に接続設定が始まると思います。 注意点としてUSB 3.0以上に対応しているケーブルを使わないと通信速度が足りないことがあるっぽいです。 ...

作成日: 2026年2月15日 · Yusuke Kato

シェル芸オンラインジャッジ:シェル芸実行用コンテナを常に待機させておく

はじめに シェル芸オンラインジャッジというウェブサイトを開発しています。 今回は実行結果が返ってくるまでに10秒程度かかっている問題に対応しました。 元々はシェル芸を受け付けてからDockerコンテナを起動していたのですが、 コンテナ起動に時間がかかっているようだったので、 シェル芸実行用コンテナを常に待機させておくことで応答速度の向上を目指しました。 シェル芸オンラインジャッジ 修正方法について シェル芸オンラインジャッジのソースコードを丸ごとGeminiに渡して、 具体的に修正方法を教えてもらっています。 コンテナ管理スクリプトを作成 GeminiにDockerコンテナを管理するスクリプトを書いてもらいました。 少し修正していますが、基本的にはGeminiの出力そのままです。 行数がそこそこあるのでリンクだけ貼ります。 backend/scripts/container_manager.py このスクリプトでは常にN個(現状N=3)のDockerコンテナを待機させる処理が書いてあります。 シェル芸実行用コンテナは使い捨てなので、 一度シェル芸を実行したコンテナは破棄して、 その分を補充します。 シェル芸実行スクリプトの修正 元々はシェル芸実行スクリプトでコンテナを作成していましたが、 container_manager.pyから起動中のコンテナを受け取って、 そのコンテナでユーザのシェル芸を実行するように修正しました。 backend/scripts/run_shellgei.py 応答速度が向上した ちゃんと計測はしていませんが、 元々はシェル芸の実行結果が返ってくるまで10秒程度かかっていました。 シェル芸実行用コンテナを常に待機させておくことで、 すぐに結果が返ってくるようになりました。 やはりコンテナの起動に時間がかかっていたようです。 おわりに 今回はシェル芸オンラインジャッジのパフォーマンス向上を目指して、 シェル芸実行用コンテナを常に待機させておくように変更しました。 すぐに実行結果が返ってくるようになってよかったです。 それでは、また。

作成日: 2026年2月2日 · Yusuke Kato