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

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足歩行ロボットといった、より高性能なロボット作りもきっと夢じゃありませんね。

おすすめ記事

 

コメント

今人気の記事はこちら

  1. 充電10分で約400km走行可能なEV向けリン酸鉄リチウム電池を開発——安全でコバルトを含まず低コスト
  2. 放射冷却と太陽熱暖房を組み合わせたハイブリッドシステムを開発——無電源で室内を冷却し、太陽エネルギーで水を加熱
  3. 自分で作って遊ぶ「ルアープラモ」、金型屋さんのやりがいも爆釣りか
  4. 応募数120件——3Dプリント猛者が集った「もじゃコン」の結果を発表
  5. 芝刈りや水やりもお任せ——スマートガーデニングロボット「Yardroid」
  6. 趣味から仕事まで使える!Raspberry Pi(ラズパイ)の使い方とオススメキット
  7. スイッチサイエンス、ピンのステータスをLEDで表示できる「Raspberry Pi用 GPIOスクリューターミナルHAT」を発売
  8. スイッチサイエンス、「M5Stack用DDSユニット」を発売
  9. スイッチサイエンス、Arm Cortex-M0+搭載のArduino互換マイコン「Seeeduino XIAO」を発売
  10. XYZプリンティングジャパン、オープンレジン対応高性能光造形3Dプリンター「PartPro150xP」発売

ニュース

編集部のおすすめ

連載・シリーズ

注目のキーワード

もっと見る