Funny Snowman

FunnySnowman > Geek<ギーク>なコトをやってみよっと

目指す姿は、R2D2みたいな人工知能(AI)ロボット。

ゴール設定(ロボットを作ってみよっと)

ラズパイを使って色々なコトが出来ると知ったので、いよいよロボットを作ってみることにした。目指す姿は、R2D2みたいなロボット。実装する機能は、遠隔でカメラ画像を取得できて、音声でコマンドを認識できて、機械語?を喋って、動く、光るとか?

組み立て手順(R2D2みたいなロボットを作る)

ロボットの胴体を制作する

ラズパイ本体を収納する「ダイソーの木箱(108円)」を購入。ちょうど取っ手の部分に頭を動かすためのサーボモータを取り付けすることが出来た。ケーブル収納用に粘着テープ付きのケーブルタイを固定。

R2D2の胴体

ロボットの頭を制作する

ゴミ箱から適当なプラスチックプレートを拾ってきて、これにサーボモータと連結する歯車部品をセンターに装着。フルカラーLED点灯実験で作った回路を基盤にハンダ付けしたものをプレートに装着。USBカメラは上下に稼働するパーツが付属していたのでそのままプレートに装着。いいぞ、メカメカしくなってきた。

R2D2の頭, マイク内蔵USBカメラ

ロボットが喋るためのスピーカーを取り付け

スピーカーを木箱に固定し、ボリューム調整付きのアンプは、マイナスドライバーで音量調整できるような場所に配線した。

音量調整付きアンプとスピーカーを木箱に装着

ロボットの頭をマウント

木箱に装着したサーボモータに、USBカメラ頭部をマウントした。LEDは、濁った透明プラスチックを取り付けしてフルカラーの混合色が表現できるようにした。

USBカメラ頭部を本体サーボモータに取り付け

ロボットの頭脳(ラズパイ)を取り付け

R2D2の頭脳となるRaspberry pi3をダイソーの100円木箱に内蔵させる。USBケーブルのコネクタ部分の長さを考慮しなかったため、若干サイズが合わない。メンテナンス期間は、AC-DCケーブル接続だが、iPhoneでも利用できるモバイルバッテリー(TEC TMB-4K 4000mAh)に換装して、外に持ち出すことも可能。

ラズパイ本体を取り付け

Raspberry Pi3のGPIO配線図

Raspberry Pi3 GPIO配線図

ロボットの手?足?を作る

R2D2の横についている足みたいなパーツって、腕だよね?でも本体からライターのアームが出てくるのを映画で見たから、これは足なのかな。家で余っていた木材を整形して足部分を作った。

R2D2の手?足?

ロボットの足をドッキング

たぶん足部分のパーツをネジで取り付けしたので、多少は角度を変更できるようになった。ラズパイは結局、木箱から飛び出す設置になってしまった。裏側は見せないようにしよう。

ロボットの足をドッキング

ロボットが完成した?

全ての部品を取り付けたけれど、うーん、何となくカッコよくない。何かいい部品ないかなー。

なんとなくロボット完成

ロボットの頭も108円

再びダイソーでタッパー2個で108円を調達。ニッパーで切り込みを入れてみた。

ダイソー100円タッパー

ロボット完成!!

じゃーん。R2D2みたいなロボットがついに完成しました。箱型ロボット2号機なので、名付けて BB-2 (ビービーツー:Box roBot Twoの略だよ)。

ロボット完成形

青空の下に飛び出そう「モバイルモード」

iPhone用のモバイルバッテリーを借りてきた。無理矢理、本体に詰め込んだら、青空の下に飛び出せるモバイルバッテリー仕様になった。

AC電源モードとモバイルモード

横から見るとこんな出っ張り。

モバイルモード

動作プログラミング(頭部分を、サーボモーターで左右に回転)

頭部分は角度指定とランダムの2つの方式とした。角度指定の場合は「python servo4.py angle 4」というように数字の部分に2.0から6.0の間の数字を指定する[小数点で細かく指定も可]。ランダムの場合は、「python servo4.py random」で動きます。これを他のpythonプログラムにimportして、音声認識でコマンドを与えてアクション動作をさせてみる。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# servo4.py

import RPi.GPIO as GPIO
import sys
import time
import os
import random

contPIN = 18
GPIO.setmode( GPIO.BCM )
GPIO.setup( contPIN, GPIO.OUT )
servo = GPIO.PWM( contPIN, 50 )  #50Hz
servo.start( 0.0 )  

####################
# サーボの移動(角度指定)
####################
def move( intAng ):
  try:
    servo.ChangeDutyCycle( intAng ) # angle
    print(str(intAng))
    time.sleep(0.3)
    servo.ChangeDutyCycle( 0.0 ) # to be stable

  except KeyboardInterrupt:
    print("\nStop servo4.")
    servo.ChangeDutyCycle(2.0)
    servo.stop()
    GPIO.cleanup()
    sys.exit(0)

####################
# サーボの移動(ランダム)
####################
def rand():
    intAng = random.randint(2,6)
    servo.ChangeDutyCycle( intAng ) # random angle
    time.sleep(0.3)
    servo.ChangeDutyCycle( 0.0 ) # to be stable

####################
# スタート:処理の分岐
####################
if __name__ == '__main__':

    if (len(sys.argv) <=2):
        print("Syntax: servo4.py [cmd] [var]")
        print("        cmd = 'angle', var = [angle from '2.0' to '6.0']")
        print("        cmd = 'random', var = [times from 1 to 10]")
        sys.exit()
    strCMD = sys.argv[1]
    floatVAR = float(sys.argv[2])

    if ( strCMD == "angle" ):
        if ( floatVAR < 2 or floatVAR > 6 ):
            init()
        else:
            move(floatVAR)

    elif ( strCMD == "random" ):
        rand()
  

まとめ(ロボットを作ってみよっと)

動き回ったり、戦ったりするロボットでは無いけれど、ラズパイで制御する「R2D2みたいなロボット」を約1万円で作ることが出来た。見た目はしっかり手作り感満載のR2D2みたいなロボットですよね。言い換えると、おんぼろロボットではあるが、実装している機能は意外と凄いぞ。どんな機能を実装しているのかは、次の記事で書くことにする。

▼「BB-1」ロボットのレシピ

Raspberry pi 3 Model B約5,500円
スピーカー(50mm)たぶん180円
超小型アンプモジュールたぶん500円未満
マイク内蔵USBカメラ約1,500円
AC-DCアダプター約1,500円
ダイソー木箱108円
ダイソー丸型タッパー108円
モバイルバッテリー980円
その他:ネジ、端材???円
合計約10,380円

見た目が「R2D2みたいなロボット」が出来たので、今度は機能を実装しよう。まずは「音声合成」で何か喋らせるよう

▲上に戻る