新しいものづくりがわかるメディア

RSS


意外と簡単!? かわいい見守りロボットを作ろう

小型ロボットアームが流行の兆しを見せています。最近ではロボットアームで蕎麦も打てるそうですね。ここはひとつ、流行に乗って作ってみたいと思う方は多いでしょうが、なかなか難易度が高く感じられます。しかしながら、ロボットの軸数が少なければ案外簡単にできるのかもしれません。今回はその練習を兼ね、2軸の見守りロボットを作ってみました。

作ってみた

早速ですが、出来上がったものがこちらです。

この見守りロボットはブラウザから簡単に操作できます。パン・チルト方向にサーボモーター(以下、サーボ)が動き、リアルタイムな首振り撮影が可能です。かわいらしいですね。

使ってみよう

見守りロボットとして、実際に使ってみます。ペットの観察等で有効活用できそうなのですが、私はペットを飼っていませんから、例として代わりにヌイグルミを撮影してみます。

離れていても可愛さを感じられますね。 離れていても可愛さを感じられますね。

また、3Dプリンターの稼働状況を観察するのにも役立ちそうです。

造形時間の推定や、失敗の早期発見が可能です。 造形時間の推定や、失敗の早期発見が可能です。

むしろアナログ感もありますが、更新プログラムの進捗状況を遠隔確認するのにも使えそうです。

アップデート完了が遠隔で分かります。 アップデート完了が遠隔で分かります。

それでは作り方を紹介していきます。

構成を考えよう

構成はとてもシンプルです。ヘッドにカメラを設け、サーボを2軸取り付けることでパン・チルト可動。WiFiでブラウザからの映像視聴/操作を実現します。最近のAIカメラで良く見かける方式ですね。

今回はロボットアーム作りの練習も兼ねているので、シリアルサーボを使います。シリアルサーボはPWMサーボのような一方的な指令だけではなく、サーボの様々な状態を把握できるため、インテリジェントなロボット制御が可能です。

ロボットアームのような多軸製品を作る場合、PWM通信方式を多チャンネル設けるのは、ハード的にもソフト的にもかなり大変です。しかしシリアル通信方式の場合、配線はデイジーチェーンでスリム化し、プログラムはIDを割り振って効率的に処理できるため、とてもスマートになります。

シリアルサーボは数珠つなぎできるので便利です。 シリアルサーボは数珠つなぎできるので便利です。

しかしながら、そのためにはサーボ側にそれなりのコントローラーが必要になってきますから、シリアルサーボはPWMサーボより高価になりがちです。ところが近年、中国深センのスタートアップ企業を筆頭とし、安価なシリアルサーボが多く販売されるようになってきました。そのような中、今回は中国Feetech社のサーボを使用し、開発に臨んでみます。

準備するもの

・3Dプリント部品(×4種)
・十字ネジ(M3×2個、M2×4個、M2タッピング×8個)

・USBケーブル(A-MicroB)
・M5Camera
・GROVE-4ピンケーブル
・Feetech SCS009(×2個)
・Feetech UDT-1

SCS009は付属の十字サーボホーンを使用します。 SCS009は付属の十字サーボホーンを使用します。

GROVE-4ピンケーブルの一方は、後ほどUDT-1と接続させるためにピンソケットへ変更しておきます。はんだ付けで対応しましょう。

サーボを動かしてみよう

早速マイコンで制御してみたいところですが、まずはアプリで動かします。これは事前に通信帯域やIDを確認、設定するためです。今回使用するサーボでは「FT SCServo Debug」という専用アプリを使用します。それでは、以下のように接続してみましょう。(https://www.feetechrc.com/software.html )

アプリ起動後「Com」は任意のポート、「BaudR」は「1000000」を選択し、「Open」ボタンを押します。その後「Search」ボタンを押します。すると「ID」が「1」、「Modle」が「SCS009」と表示されます。

まずはIDを合わせます。初期値は「1」ですが、今回2つのサーボを使用するため、一方を「2」に設定する必要があります。「Programming」タブを押して、設定画面を開きましょう。その中から「Address 5」を選択し、右下のテキストボックスに変更したい値を入力します。その後「Save」ボタンを押すことで、IDの設定が完了します。後ほどもう一方のサーボも確認し、ID1とID2が準備できればOKです。

続いて「Debug」タブに戻ります。ここではサーボがきちんと動くことを確認します。操作は簡単で「Servo Control」のスライドバーを動かすだけです。スライドバーの位置に応じてサーボが動き、グラフと「Servo Feedback」の値も変化します。ここでCurrent(電流)が変化しないことに違和感を抱く方もいるかも知れませんが、そもそもSCS009は電流Feedbackが備わっていないため、この値は変化しませんので、ご安心ください。

アプリの終了前に「Servo Control」の「Goal」の値を指定し、サーボの現在角を明確化しておきます。今回は中央値にした方が組み立てやすいため、「511」にしておきましょう。

ここまで準備できれば、この工程は完了です。

組み立てよう

まずはM5Cameraのカバーを取り外します。ネジ2本を外し、基板を取り出しましょう。

ESP32-WROVERが入っています。 ESP32-WROVERが入っています。

取り出した基板をヘッドにセットし、カバーをつけます。その上からID1のサーボを取り付け、M2のネジで締結。このサーボがチルト方向に動きます。

ベースにはパン方向に可動するID2のサーボを取り付けます。サーボホーンがついている場合、一度付け直してください。

アームで、ベースとヘッド部品を繋げます。サーボホーンに対しタッピングネジで締結しましょう。

次に配線を接続し、ベースの穴に通します。

配線はテープで巻くと綺麗になります。 配線はテープで巻くと綺麗になります。

配線をそれぞれUDT-1のコネクタに接続します。5Vの赤ケーブルを青コネクタのV1側に接続するのを、忘れずに行ってください。基板内部で絶縁されているため、サーボの電源が入りません。

基板をリワークしてジャンパーさせても良いです。 基板をリワークしてジャンパーさせても良いです。

最後にUDT-1を、ベース底面に取り付けます。この時、USBケーブルはベースの溝から外へ出します。

以上で組立完了です。

かわいさが欲しい方は、目をつける等の工夫をしましょう。 かわいさが欲しい方は、目をつける等の工夫をしましょう。

なお、部品は全てGithubで公開しています。3Dプリンターで造形してご活用ください。

M5Cameraを使ってみよう

M5CameraはPSRAMとイメージセンサーOV2640を搭載した、ESP32ベースの小型カメラです。

公式で動作するサンプルコードが用意されていますから、簡単に使用することができます。ArduinoIDEから「スケッチ例」→「ESP32」→「Camera」→「CameraWebServer」を選択しましょう。

しかし、使用するには一部コードの修正が必要です。14行目のカメラモデルは「CAMERA_MODEL_M5STACK_V2_PSRAM」を、22〜23行目のssidとpasswordは、自身の環境に応じたものを入力してください。

次に設定です。ボードは「ESP32 Wrover Module」を、「Partition Scheme」は「Huge APP (3MB No OTA)」を選択します。

準備が整ったら、M5Cameraにプログラムを書き込みます。その後、シリアルモニターを起動、そこに表示されたアドレスへ、スマホやPCからアクセスします。するとM5Cameraとの接続が開始されます。

一番下の「Get Still」をクリックすると静止画、「Start Stream」をクリックするとストリーム画像が表示されます。あれ? でも映像が横を向いてしまっていますね。

これはサンプルコードが、M5Cameraを縦方向で使用することを前提としているためです。見守りロボットは横方向で使用しているので、ブラウザ画面を修正しなければ正しく表示されません。

ブラウザ画面を変更しよう

「CameraWebServer」のコードを基に、カメラ向きの修正と、パン・チルト操作画面を実装していきます。そのためには「camera_index.h」を編集する必要があるのですが、これはヘキサ変換後のファイルなので、変換前のHTMLファイルを編集しなければいけません。こちらから取得しましょう。

それではHTMLファイルを編集していきます。まずはカメラ向きの修正ですが、「figure img」に「transform: rotate(90deg)」を追記することで解決できます。

次に操作画面の実装です。ラベルと、パン・チルト用のスライドバーのコードを追記します。

ブラウザを確認するとこのようになります。カメラの向きが修正されたとともに、パン・チルト用のスライドバーが追加されました。

これでHTMLファイルの編集が終わりました。この後、圧縮とヘキサ変換作業が必要です。まずは「7-Zip」等を用いてファイルをgzipに圧縮します。

その後「filetoarray.exe」を活用してヘキサ変換します。https://github.com/xreef/FileToArray
これで出力されるヘキサ変換値、「{ と } の間」を丸ごとコピーし、「camera_index.h」の該当部分に貼り付けます。

リクエスト通りに動かそう

「app_httpd.cpp」を編集し、ブラウザからのリクエスト通りにサーボが動くようにしていきます。まずはFeetechサーボ用のライブラリ「SCServo」を用意しましょう。
(https://github.com/CH1H160/WatchingRobot/tree/main/WatchingRobot)

サーボのシリアル通信は以下のようにして開始します。ボーレートは事前にアプリで動かした「1000000」、UART信号はM5CameraのGPIOである「4」と「13」を使用します。これらを「StartCameraServer」関数に記述しましょう。また、「EnableTorque(ID,有効)」ではサーボのトルクを有効化しています。

サーボを動かすにあたり、今回は位置制御の関数を使用しますが、使い方は簡単で「WritePos(ID,位置,時間)」で指定するだけです。
「esp_err_t cmd_handler(http_req_t *req)」関数に、以下のように記述します。これにより、ブラウザで指定した位置へサーボが動くようになります。

以上が終わったらプログラムを書き込み、ロボットの完成です。

これでロボット作りも簡単!?

日本工業規格(JIS)では「二つ以上の軸についてプログラミングによって動作し、ある程度の自律性をもち、環境内で動作して所期の作業を実行する運動機構」をロボットとして定義しているそうです。今回製作したものは、まさしくその要件を満たしていますから、立派なロボットと言えるのではないでしょうか。もはや誰もが簡単にロボットを作れる時代なのですね。

ロボットが身近な世界。 ロボットが身近な世界。

また、今回は2軸だったので嬉しさが伝わりにくかったかもしれませんが、シリアルサーボは比較的簡単に制御することができます。このノウハウを活かすことで、6軸ロボットアームや、2足歩行ロボットといった、より高性能なロボット作りもきっと夢じゃありませんね。

おすすめ記事

 

コメント

ニュース

編集部のおすすめ

連載・シリーズ

注目のキーワード

もっと見る