自動走行する車じゃなくて、ロボットが自動で運転する。ラピロの歩く速さは、亀よりちょっとだけ速い程度なので、遠くまで速く移動するために自動車の運転を教え込む。ロボットを運ぶ自動車といえば、思いつくのはGファイターとかドダイとか...。ド、ドダイなら作れるかも。早速、ラピロのガンタンク化を諦めて「ド・ダイYS型プロジェクト」をスタート!

百聞は一見に如かず。こちらの動画でラピロの雄姿をどうぞ。仮免許ですけど。
タミヤのトラック&ホイールやリモコンボックスを組み合わせたら、ちょうどラピロにピッタリな大きさだった。ダブルギヤボックスは、ラピロの重量と加速時のバランス取りを考えて、一番低いギヤ(タイプD)を選択した。加速時にラピロが転げ落ちないようにスピードを遅くしたのは正解かも。これでも時々、キャタピラ部分が外れることもある。リモコンボックスには、乾電池2個を搭載し、キャタピラ駆動の電力となる。リモコンボックスには、2つのレバーがあって、レバーを両方(↑)(↑)上に倒すと前に進み、両方(↓)(↓)下へ倒すと後ろに進む。レバーは左右独立しており、左(↑)・右(↓)に移動した場合、右回転し、その逆なら左回転。これだけでも操作させる楽しみは十分だが、これをロボット(Rapiro)に運転させる。

ロボットに運転させるための位置合わせをする。前進、後進、右回転、左回転、静止の5パターン。今回は、走行ルートもスクリプトで書いちゃうけれど、次回は音波センサーとか赤外線モーションセンサーとか、あとカメラの画像を使って、AI風な完全自動運転にもチャレンジしてみようと思う。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import serial
import time
import sys
glbCom = serial.Serial('/dev/ttyAMA0', 57600, timeout = 10) # connect to RAPIRO
# -------------------------------
# ラピロが「ド・ダイ」を運転する。
# -------------------------------
def autodrive():
time.sleep(10)
drive_front( 5 )
drive_right( 3 )
drive_back( 5 )
drive_left( 3 )
drive_front( 3 )
drive_back( 2 )
drive_stop()
# -------------------------------
# 前進
# -------------------------------
def drive_front( intTime ):
# 安全ポジ(下)
glbCom.write( "#PS00A090S01A090S02A040S03A090S04A090S05A100S06A090S07A090S08A090S09A090S10A090S11A090R102G000B153T001" )
time.sleep(0.5)
# 前進 準備
glbCom.write( "#PS00A090S01A090S02A055S03A130S04A080S05A088S06A050S07A100S08A090S09A090S10A090S11A090R000G102B255T001" )
time.sleep(0.2)
# 前進 ゴー
glbCom.write( "#PS00A090S01A090S02A068S03A130S04A080S05A073S06A050S07A100S08A090S09A090S10A090S11A090R000G000B255T001" )
time.sleep( intTime )
# 前進 ストップ
glbCom.write( "#PS00A090S01A090S02A055S03A130S04A080S05A088S06A050S07A100S08A090S09A090S10A090S11A090R000G102B255T001" )
time.sleep(0.2)
# 安全ポジ(下)
glbCom.write( "#PS00A090S01A090S02A040S03A090S04A090S05A100S06A090S07A090S08A090S09A090S10A090S11A090R102G000B153T001" )
time.sleep(0.5)
# -------------------------------
# 後進(バック)
# -------------------------------
def drive_back( intTime ):
# 安全ポジ(上)
glbCom.write( "#PS00A090S01A090S02A110S03A090S04A090S05A030S06A090S07A090S08A090S09A090S10A090S11A090R102G000B153T001" )
time.sleep(0.5)
# バック 準備
glbCom.write( "#PS00A090S01A090S02A095S03A130S04A075S05A043S06A050S07A105S08A090S09A090S10A090S11A090R204G102B255T001" )
time.sleep(0.2)
# バック ゴー
glbCom.write( "#PS00A090S01A090S02A082S03A130S04A075S05A054S06A050S07A105S08A090S09A090S10A090S11A090R204G102B255T001" )
time.sleep( intTime )
# バック ストップ
glbCom.write( "#PS00A090S01A090S02A095S03A130S04A075S05A043S06A050S07A105S08A090S09A090S10A090S11A090R204G102B255T001" )
time.sleep(0.2)
# 安全ポジ(上)
glbCom.write( "#PS00A090S01A090S02A110S03A090S04A090S05A030S06A090S07A090S08A090S09A090S10A090S11A090R102G000B153T001" )
time.sleep(0.5)
# -------------------------------
# 左回転
# -------------------------------
def drive_left( intTime ):
# 安全ポジ
glbCom.write( "#PS00A120S01A090S02A040S03A090S04A120S05A030S06A090S07A070S08A090S09A090S10A090S11A090R102G000B153T001" )
time.sleep(0.5)
# 左回転 準備
glbCom.write( "#PS00A140S01A090S02A055S03A130S04A080S05A043S06A050S07A100S08A090S09A090S10A090S11A090R000G102B255T001" )
time.sleep(0.2)
# 左回転 ゴー
glbCom.write( "#PS00A140S01A090S02A068S03A130S04A080S05A054S06A050S07A100S08A090S09A090S10A090S11A090R000G000B255T001" )
time.sleep( intTime )
# 左回転 ストップ
glbCom.write( "#PS00A140S01A090S02A055S03A130S04A080S05A043S06A050S07A100S08A090S09A090S10A090S11A090R000G102B255T001" )
time.sleep(0.2)
# 安全ポジ
glbCom.write( "#PS00A120S01A090S02A040S03A090S04A120S05A030S06A090S07A070S08A090S09A090S10A090S11A090R102G000B153T001" )
time.sleep(0.5)
# -------------------------------
# 右回転
# -------------------------------
def drive_right( intTime ):
# 安全ポジ
glbCom.write( "#PS00A070S01A090S02A110S03A090S04A120S05A100S06A090S07A070S08A090S09A090S10A090S11A090R102G000B153T001" )
time.sleep(0.5)
# 右回転 準備
glbCom.write( "#PS00A050S01A090S02A095S03A130S04A080S05A088S06A050S07A100S08A090S09A090S10A090S11A090R000G102B255T001" )
time.sleep(0.2)
# 右回転 ゴー
glbCom.write( "#PS00A050S01A090S02A082S03A130S04A080S05A073S06A050S07A100S08A090S09A090S10A090S11A090R000G000B255T001" )
time.sleep( intTime )
# 右回転 ストップ
glbCom.write( "#PS00A050S01A090S02A095S03A130S04A080S05A088S06A050S07A100S08A090S09A090S10A090S11A090R000G102B255T001" )
time.sleep(0.2)
# 安全ポジ
glbCom.write( "#PS00A070S01A090S02A110S03A090S04A120S05A100S06A090S07A070S08A090S09A090S10A090S11A090R102G000B153T001" )
time.sleep(0.5)
# -------------------------------
# 静止ポジション
# -------------------------------
def drive_stop():
# 安全ポジ
glbCom.write( "#PS00A090S01A090S02A040S03A090S04A120S05A100S06A090S07A070S08A090S09A090S10A090S11A090R102G000B153T001" )
time.sleep(0.5)
glbCom.write( "#X" )
# ======================================
# コマンドラインモードで実行する場合
# ======================================
if __name__ == '__main__':
autodrive()
自動走行する車よりも難しい「運転するロボット」の原型ができた。あとはカメラ画像を分析したり、音波で距離を測ったりすれば、自動運転CAR並みの走行実験ができる。かも。