Raspberry Piで4足歩行ロボット作ってみた
なんだかレトロPC復活だのセンサー系の工作だので、気が付いたら大人の喜ぶ(?)物しか作ってませんね。
ということで、Raspberry Piレーダーからごろっと方針転換、今度は子供の喜びそうなものを作ってみました。
先日「Arduinoでロボット工作をたのしもう」買ってみたという記事を書きましたが、あれを読んでたら4足歩行くらいなら簡単に作れるんじゃないかと思いまして。
早速作ってみました。
で、買ったものはこちら。
右のテスターはついでに買っただけで今回は登場しません。
”発泡スチロールカッター”というのが今回使った道具の一つ。何に使ったのかは後ほど。
最低8自由度が必要なので、このSG-90サーボを10個買いました。
10個で4,000円。ほんと安いですね、このサーボ。
これに先日買ったPCA9685を組み合わせて使います。
さて、ロボットを作るにはサーボ同士を結合しなきゃいけません。
その結合用ブラケットをどうやって作るのか!?
先の「Arduinoでロボット工作をたのしもう」ではアルミ板を使ってブラケットを作成。
しかし万力が必要だったり、金鋸でごりごりやるため室内での作業がやりづらいなど、少々敷居が高い。
でいろいろとググって、参考にしたのはこちらのサイト。
プラ版を使ってSG-90用サーボ ブラケットを作成してます。
金属を加工するわけじゃなければ、比較的簡単に作れそう。
てことで、近所のホームセンターで厚さ1mmのアクリル板を購入。
15mm幅の線をマジックで引いてカッターで深さ1/3ほど切れ込みを入れて
曲げるとぱきっときれいに切れます。
これは楽ですね。
こんな感じに寸法を書いておきます。
なお、今回作ったブラケットは上の2種類。
あとは折れ線に沿って曲げるだけなんですが
そこで登場するのがこの発泡スチロールカッター。ホームセンターで購入、約600円。
乾電池でニクロム線を加熱、このニクロム線の熱で曲げ加工します。
なおこの辺がスイッチになってて
ぎゅっと押してる間だけ通電します。
曲げ方ですが、まず5秒通電して過熱 → 折り曲げ線に20秒押し当てる → そこからじわーっと10秒ほどかけて曲げる → スチロールカッターを引き抜き、曲げた状態を5秒ほど保つ。
するときれいに90度曲がった板に成形できます。
とはいえ、最初のうちはなかなかうまくいきません。
これくらいしなってても、何とか支障なく使えました。
ただのコの字のブラケットと、先端5mmを曲げた2種類のブラケット、これらの腹部分を上のようにねじで結合。
ねじを通す前に、1mm径のピンバイスで穴を開けておきます。
なお、今回の工作ではこのねじをSG-90付属のものだけ使いました。
SG-90には長いねじが2本、短いのが1本ありますが、数の関係でなるべく長いのを使います。
端曲げブラケットに、上のようにサーボを固定。
で、もう一方のブラケットに、サーボホーンを取り付けるため9mmの穴を開けようとしたんですが・・・
割っちゃいました・・・
仕方がないので、一方を20mm、もう一方を11mmの長さにカットして、上のように無理やりサーボホーンを取り付け。
もう一方の20mm長さのほうには3mm径の穴を開けて
サーボ底面にSG-90付属の短い方のねじをつけて軸とします。
取り付け後、上のように角をカットしておくと安全です。
さてロボット本体ですが、
タミヤのこういうのを購入。
この穴だらけの板を本体として使います。
こんな感じに軸受け部品を取り付けて
両面テープとバンドで無理やり固定しました(;´Д`)
相変わらず手抜き多いです、このブログ。
さて、脚の部分をどうしようかと思ったんですが、上のように長さ80mm×幅30mmの板を
4枚作成。
これを先のスチロールカッターで曲げて・・・と行きたいところですが、わずかに幅が大きすぎてうまく加工できません。
左右端を交互に暖めて、徐々に曲げていき
なんとか作りました。
あとはこんな感じに無理やりサーボホーンを取り付けて
なんだか、ロボットの足っぽくなりました。
残り3本作る前に、ちゃんと8個のサーボが動作するかどうかチェック。
使ったプログラムは以下の記事のものを使用。
Raspberry Piで10個のサーボモーター動かしてみた: EeePCの軌跡
動作確認をしたサーボを使って残り3本の脚を作成します。
ブラケットですが、上から下にかけて、だんだんと工作精度が上がってるのがわかるかと思います。直角に曲げられるようになってきましたねぇ。
ついに4本の脚完成!
さらっと書いてますが、半日仕事でした。
アクリル板も常にきれいに割れてくれるわけでもなし、時々こうなります。ちゃんと切れ込みをしっかり入れて割らないとだめですね。
こういう失敗をくぐり抜けトライ&エラーしたため、結構時間かかりました。
あとは上にRaspberry Pi B+とPCA9685をぶちまけておき、いよいよ動作チェック・・・
と行きたいところですが、問題が2つ発生。
一つはアクリル板を曲げただけの脚ではつるつる滑って前に進まない恐れあり。
これを解決するため、百均で買った激落ちくんを使います。
こんなくらいの厚さに切って真ん中に切れ込みをいれて
差し込みます。
エッジの怪我対策と、脚部摩擦対策の一石二鳥なアイデアです。
そのままでは簡単に抜けるため、アロンアルファを隙間に流し込み接着します。
もう一つの問題はこれ。
脚とサーボホーンの固定に長めの方のねじを使った結果、サーボに引っかかる場合があります。
ねじの先をカットしなきゃいかんですが、困ったことにサーボホーンが邪魔でペンチでカットできません。
で、編み出した解決策はこれ。
ダイソーで以前買った金鋸でねじの根元を60~70回削り
ペンチでぐりぐりこじって
へし折ります。
ちょっと大変ですが、これで何とかなりました。
Raspberry Piをオンして、サーボを0点にあわせると・・・なんだかゆがんでます。
サーボホーンを抜いて、ちょうどいい位置にあわせます。
がまたしてもトラブル発生!!
ブラケットが一つへし折れました orz
そこはアロンアルファ様を召喚し、強引に固めていただきました。
さて、ハードはほぼ完成、いよいよソフト編。
とその前に、サーボの番号をチェック。
本当は右前足、左前足、右後足、左後足の順に、根元(root)/脚(leg)の順にIDをつけたつもりだったんですが・・・動作チェックしてみると、上のような付き方をしてました。
モーション作成時に気づいたため、このままPCA9685のコネクタの差し替えをせず、そのままコードを組みました。
まずは、前進用コード(Servo_f2.py)。
#!/usr/bin/python
from Adafruit_PWM_Servo_Driver import PWM
import time
# Initialise the PWM device using the default address
pwm = PWM(0x40)
# Note if you'd like more debug output you can instead run:
#pwm = PWM(0x40, debug=True)
servoMin = 150 # Min pulse length out of 4096
servoMax = 600 # Max pulse length out of 4096
servoMid = 375 # Mid pulse length out of 4096
def setServoPulse(channel, pulse):
pulseLength = 1000000 # 1,000,000 us per second
pulseLength /= 60 # 60 Hz
print "%d us per period" % pulseLength
pulseLength /= 4096 # 12 bits of resolution
print "%d us per bit" % pulseLength
pulse *= 1000
pulse /= pulseLength
pwm.setPWM(channel, 0, pulse)
pwm.setPWMFreq(60) # Set frequency to 60 Hz
# Change speed of continuous servo on channel O
# Forward
#Motion 1
for i in range(0,3):
pwm.setPWM(0, 0, 300) # Right front root
pwm.setPWM(1, 0, 450) # Right front leg
pwm.setPWM(2, 0, 375) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 375) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 450) #left rear root
pwm.setPWM(7, 0, 300) #left rear leg
time.sleep(0.1)
#Motion 2
pwm.setPWM(0, 0, 375) # Right front root
pwm.setPWM(1, 0, 450) # Right front leg
pwm.setPWM(2, 0, 375) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 375) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 375) #left rear root
pwm.setPWM(7, 0, 300) #left rear leg
time.sleep(0.1)
#Motion 3
pwm.setPWM(0, 0, 375) # Right front root
pwm.setPWM(1, 0, 375) # Right front leg
pwm.setPWM(2, 0, 450) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 300) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 375) #left rear root
pwm.setPWM(7, 0, 375) #left rear leg
time.sleep(0.1)
#Motion 4
pwm.setPWM(0, 0, 375) # Right front root
pwm.setPWM(1, 0, 375) # Right front leg
pwm.setPWM(2, 0, 450) # Left front leg
pwm.setPWM(3, 0, 450) # Left front root
pwm.setPWM(4, 0, 300) # Right rear leg
pwm.setPWM(5, 0, 300) # Right rear root
pwm.setPWM(6, 0, 375) #left rear root
pwm.setPWM(7, 0, 375) #left rear leg
time.sleep(0.1)
#Motion 5
pwm.setPWM(0, 0, 375) # Right front root
pwm.setPWM(1, 0, 375) # Right front leg
pwm.setPWM(2, 0, 300) # Left front leg
pwm.setPWM(3, 0, 450) # Left front root
pwm.setPWM(4, 0, 450) # Right rear leg
pwm.setPWM(5, 0, 300) # Right rear root
pwm.setPWM(6, 0, 375) #left rear root
pwm.setPWM(7, 0, 375) #left rear leg
time.sleep(0.1)
#Motion 6
pwm.setPWM(0, 0, 375) # Right front root
pwm.setPWM(1, 0, 375) # Right front leg
pwm.setPWM(2, 0, 300) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 450) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 375) #left rear root
pwm.setPWM(7, 0, 375) #left rear leg
time.sleep(0.1)
#Motion 7
pwm.setPWM(0, 0, 375) # Right front root
pwm.setPWM(1, 0, 300) # Right front leg
pwm.setPWM(2, 0, 375) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 375) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 375) #left rear root
pwm.setPWM(7, 0, 450) #left rear leg
time.sleep(0.1)
#Motion 7
pwm.setPWM(0, 0, 300) # Right front root
pwm.setPWM(1, 0, 300) # Right front leg
pwm.setPWM(2, 0, 375) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 375) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 450) #left rear root
pwm.setPWM(7, 0, 450) #left rear leg
time.sleep(0.1)
#Motion 8
pwm.setPWM(0, 0, 300) # Right front root
pwm.setPWM(1, 0, 375) # Right front leg
pwm.setPWM(2, 0, 375) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 375) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 450) #left rear root
pwm.setPWM(7, 0, 375) #left rear leg
time.sleep(0.1)
# Zero Position
pwm.setPWM(0, 0, 375)
pwm.setPWM(1, 0, 375)
pwm.setPWM(2, 0, 375)
pwm.setPWM(3, 0, 375)
pwm.setPWM(4, 0, 375)
pwm.setPWM(5, 0, 375)
pwm.setPWM(6, 0, 375)
pwm.setPWM(7, 0, 375)
time.sleep(0.2)
右ターンのコード(Servo_r2.py)。
#!/usr/bin/python
from Adafruit_PWM_Servo_Driver import PWM
import time
# Initialise the PWM device using the default address
pwm = PWM(0x40)
# Note if you'd like more debug output you can instead run:
#pwm = PWM(0x40, debug=True)
servoMin = 150 # Min pulse length out of 4096
servoMax = 600 # Max pulse length out of 4096
servoMid = 375 # Mid pulse length out of 4096
def setServoPulse(channel, pulse):
pulseLength = 1000000 # 1,000,000 us per second
pulseLength /= 60 # 60 Hz
print "%d us per period" % pulseLength
pulseLength /= 4096 # 12 bits of resolution
print "%d us per bit" % pulseLength
pulse *= 1000
pulse /= pulseLength
pwm.setPWM(channel, 0, pulse)
pwm.setPWMFreq(60) # Set frequency to 60 Hz
# Change speed of continuous servo on channel O
# Right turn
#Motion 1
for i in range(0,8)
pwm.setPWM(0, 0, 375) # Right front root
pwm.setPWM(1, 0, 375) # Right front leg
pwm.setPWM(2, 0, 300) # Left front leg
pwm.setPWM(3, 0, 450) # Left front root
pwm.setPWM(4, 0, 375) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 375) #left rear root
pwm.setPWM(7, 0, 375) #left rear leg
time.sleep(0.1)
#Motion 2
pwm.setPWM(0, 0, 375) # Right front root
pwm.setPWM(1, 0, 375) # Right front leg
pwm.setPWM(2, 0, 300) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 375) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 375) #left rear root
pwm.setPWM(7, 0, 375) #left rear leg
time.sleep(0.1)
#Motion 3
pwm.setPWM(0, 0, 375) # Right front root
pwm.setPWM(1, 0, 375) # Right front leg
pwm.setPWM(2, 0, 375) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 375) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 375) #left rear root
pwm.setPWM(7, 0, 450) #left rear leg
time.sleep(0.1)
#Motion 4
pwm.setPWM(0, 0, 375) # Right front root
pwm.setPWM(1, 0, 375) # Right front leg
pwm.setPWM(2, 0, 375) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 375) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 450) #left rear root
pwm.setPWM(7, 0, 375) #left rear leg
time.sleep(0.1)
# Zero Position
pwm.setPWM(0, 0, 375)
pwm.setPWM(1, 0, 375)
pwm.setPWM(2, 0, 375)
pwm.setPWM(3, 0, 375)
pwm.setPWM(4, 0, 375)
pwm.setPWM(5, 0, 375)
pwm.setPWM(6, 0, 375)
pwm.setPWM(7, 0, 375)
time.sleep(0.1)
左ターンのコード(Servo_l2.py)。
#!/usr/bin/python
from Adafruit_PWM_Servo_Driver import PWM
import time
# Initialise the PWM device using the default address
pwm = PWM(0x40)
# Note if you'd like more debug output you can instead run:
#pwm = PWM(0x40, debug=True)
servoMin = 150 # Min pulse length out of 4096
servoMax = 600 # Max pulse length out of 4096
servoMid = 375 # Mid pulse length out of 4096
def setServoPulse(channel, pulse):
pulseLength = 1000000 # 1,000,000 us per second
pulseLength /= 60 # 60 Hz
print "%d us per period" % pulseLength
pulseLength /= 4096 # 12 bits of resolution
print "%d us per bit" % pulseLength
pulse *= 1000
pulse /= pulseLength
pwm.setPWM(channel, 0, pulse)
pwm.setPWMFreq(60) # Set frequency to 60 Hz
# Change speed of continuous servo on channel O
# Left turn
#Motion 1
for i in range(0,8):
pwm.setPWM(0, 0, 300) # Right front root
pwm.setPWM(1, 0, 450) # Right front leg
pwm.setPWM(2, 0, 375) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 375) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 375) #left rear root
pwm.setPWM(7, 0, 375) #left rear leg
time.sleep(0.1)
#Motion 2
pwm.setPWM(0, 0, 375) # Right front root
pwm.setPWM(1, 0, 450) # Right front leg
pwm.setPWM(2, 0, 375) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 375) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 375) #left rear root
pwm.setPWM(7, 0, 375) #left rear leg
time.sleep(0.1)
#Motion 3
pwm.setPWM(0, 0, 375) # Right front root
pwm.setPWM(1, 0, 375) # Right front leg
pwm.setPWM(2, 0, 375) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 300) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 375) #left rear root
pwm.setPWM(7, 0, 375) #left rear leg
time.sleep(0.1)
#Motion 4
pwm.setPWM(0, 0, 375) # Right front root
pwm.setPWM(1, 0, 375) # Right front leg
pwm.setPWM(2, 0, 375) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 375) # Right rear leg
pwm.setPWM(5, 0, 300) # Right rear root
pwm.setPWM(6, 0, 375) #left rear root
pwm.setPWM(7, 0, 375) #left rear leg
time.sleep(0.1)
# Zero Position
pwm.setPWM(0, 0, 375)
pwm.setPWM(1, 0, 375)
pwm.setPWM(2, 0, 375)
pwm.setPWM(3, 0, 375)
pwm.setPWM(4, 0, 375)
pwm.setPWM(5, 0, 375)
pwm.setPWM(6, 0, 375)
pwm.setPWM(7, 0, 375)
time.sleep(0.1)
後退のコード(Servo_b2.py)
#!/usr/bin/python
from Adafruit_PWM_Servo_Driver import PWM
import time
# Initialise the PWM device using the default address
pwm = PWM(0x40)
# Note if you'd like more debug output you can instead run:
#pwm = PWM(0x40, debug=True)
servoMin = 150 # Min pulse length out of 4096
servoMax = 600 # Max pulse length out of 4096
servoMid = 375 # Mid pulse length out of 4096
def setServoPulse(channel, pulse):
pulseLength = 1000000 # 1,000,000 us per second
pulseLength /= 60 # 60 Hz
print "%d us per period" % pulseLength
pulseLength /= 4096 # 12 bits of resolution
print "%d us per bit" % pulseLength
pulse *= 1000
pulse /= pulseLength
pwm.setPWM(channel, 0, pulse)
pwm.setPWMFreq(60) # Set frequency to 60 Hz
# Change speed of continuous servo on channel O
# Backward
#Motion 1
for i in range(0,3):
pwm.setPWM(0, 0, 300) # Right front root
pwm.setPWM(1, 0, 300) # Right front leg
pwm.setPWM(2, 0, 375) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 375) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 450) #left rear root
pwm.setPWM(7, 0, 450) #left rear leg
time.sleep(0.1)
#Motion 2
pwm.setPWM(0, 0, 375) # Right front root
pwm.setPWM(1, 0, 300) # Right front leg
pwm.setPWM(2, 0, 375) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 375) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 375) #left rear root
pwm.setPWM(7, 0, 450) #left rear leg
time.sleep(0.1)
#Motion 3
pwm.setPWM(0, 0, 375) # Right front root
pwm.setPWM(1, 0, 375) # Right front leg
pwm.setPWM(2, 0, 300) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 450) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 375) #left rear root
pwm.setPWM(7, 0, 375) #left rear leg
time.sleep(0.1)
#Motion 4
pwm.setPWM(0, 0, 375) # Right front root
pwm.setPWM(1, 0, 375) # Right front leg
pwm.setPWM(2, 0, 300) # Left front leg
pwm.setPWM(3, 0, 450) # Left front root
pwm.setPWM(4, 0, 450) # Right rear leg
pwm.setPWM(5, 0, 300) # Right rear root
pwm.setPWM(6, 0, 375) #left rear root
pwm.setPWM(7, 0, 375) #left rear leg
time.sleep(0.1)
#Motion 5
pwm.setPWM(0, 0, 375) # Right front root
pwm.setPWM(1, 0, 375) # Right front leg
pwm.setPWM(2, 0, 450) # Left front leg
pwm.setPWM(3, 0, 450) # Left front root
pwm.setPWM(4, 0, 300) # Right rear leg
pwm.setPWM(5, 0, 300) # Right rear root
pwm.setPWM(6, 0, 375) #left rear root
pwm.setPWM(7, 0, 375) #left rear leg
time.sleep(0.1)
#Motion 6
pwm.setPWM(0, 0, 375) # Right front root
pwm.setPWM(1, 0, 375) # Right front leg
pwm.setPWM(2, 0, 450) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 300) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 375) #left rear root
pwm.setPWM(7, 0, 375) #left rear leg
time.sleep(0.1)
#Motion 7
pwm.setPWM(0, 0, 375) # Right front root
pwm.setPWM(1, 0, 450) # Right front leg
pwm.setPWM(2, 0, 375) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 375) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 375) #left rear root
pwm.setPWM(7, 0, 300) #left rear leg
time.sleep(0.1)
#Motion 7
pwm.setPWM(0, 0, 300) # Right front root
pwm.setPWM(1, 0, 450) # Right front leg
pwm.setPWM(2, 0, 375) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 375) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 450) #left rear root
pwm.setPWM(7, 0, 300) #left rear leg
time.sleep(0.1)
#Motion 8
pwm.setPWM(0, 0, 300) # Right front root
pwm.setPWM(1, 0, 375) # Right front leg
pwm.setPWM(2, 0, 375) # Left front leg
pwm.setPWM(3, 0, 375) # Left front root
pwm.setPWM(4, 0, 375) # Right rear leg
pwm.setPWM(5, 0, 375) # Right rear root
pwm.setPWM(6, 0, 450) #left rear root
pwm.setPWM(7, 0, 375) #left rear leg
time.sleep(0.1)
# Zero Position
pwm.setPWM(0, 0, 375)
pwm.setPWM(1, 0, 375)
pwm.setPWM(2, 0, 375)
pwm.setPWM(3, 0, 375)
pwm.setPWM(4, 0, 375)
pwm.setPWM(5, 0, 375)
pwm.setPWM(6, 0, 375)
pwm.setPWM(7, 0, 375)
time.sleep(0.2)
どうやって動いているのかは、動画をご覧ください(前進、左ターンのみですが)。
あまりきれいなコードではありませんが、一応動作するようになりました。
こんな感じに有線LANのまま、しかもモバイルバッテリーを引きずってます。完成形には程遠い。
しかも、現状では前進するたびに
sudo python Servo_f2.py
などとコマンドを実行しなきゃいけません。
出来ればリモコンのようなものや、ブラウザ操作できるようにしたいですね。
まだまだ、先は長そうです。
しかし、意外と簡単にできました、4足歩行ロボット。
でもそろそろ3Dプリンター、欲しいですねぇ。部品加工が大変です。
« シャープのRoBoHoN 6月発売! | トップページ | Apple IIのソフト500本が動くサイト »
「おもちゃ系」カテゴリの記事
- 最近買った小物類(2024.06.23)
- 東京オートサロン、CARGO BASE & 秋葉原へ行ってきました(2024.01.13)
- 毎年恒例のヴィレッジヴァンガード福袋を買ってきました(2024.01.02)
- 大須に行ってきました(2023.12.23)
- 人生初、幕張メッセに行ってきた(2023.10.28)
「Raspberry Pi・Arduino・電子工作」カテゴリの記事
- 名古屋 大須へ行ってきました(2024.04.28)
- Raspberry Pi 5用電源購入(2024.04.19)
- Interface 2024年5月号はRaspberry Pi 5特集(2024.03.26)
- Raspberry Pi 5とPCがつながらなかった理由は「プライバシーセパレーター機能」のせいでした(2024.03.12)
- Raspberry Pi 5に日本語LLM(ELYZA-Japanese-Llama-2-7b-fast-Instruct)を入れてみた(2024.03.10)
お疲れさまです
いつもながら工作記事は楽しまれながら書かれてますねw
アクリルブラケットの穴加工ですが、下に木片を当てた状態で行うと割らずに済みます。
Cチャンネルみたいな形に成型してしまい、後で木片を噛ませるのが困難なら、
平のまま予め穴を開けてから折り曲げ加工すると楽です。
いずれも下にダメにしていい木材を敷い(当て)て、対象をたわませないようにするのがミソです。
タッピングビスはそのやり方でもいいですが、切る時にどうしても周囲に傷を付けてしまいます。
なのでこれも予め短くしたビスを作っておいた方がいいでしょう。
5mm厚ぐらいのベニヤなんかに先端が飛び出すように打ってあげれば、今回同様の工程で加工出来ます。
実際の固定時には下穴の空いてる樹脂相手ならそのままでもねじ込めると思いますし、
固いようならちょっと手間ですが未加工のビスを1本打ってタップを切り、
それを抜いてから改めて短くしたビスで固定すると良いかと思います。
それにしてもWDが専用HDDなんてのまで出してきましたし、
どこまでいくんでしょうね、ラズパイ
投稿: 緋呂々 | 2016年3月18日 (金) 00時00分
こんにちは、緋呂々さん。
今思えば準備不足も甚だしいですね。ネジもあらかじめ切っておけばよかったんですが、最初のやつがなんとなくうまくいったため、そのままにしてたんですよね。
一旦つけてから外し、カットしてからもう一度付けるというのをやってもよかったんですが、横着しました。反省。
こんな道具でもロボットを作ろうと思えば作れるというのが証明できただけでも収穫でしょうか?もうちょっと改良していきます。
投稿: arkouji | 2016年3月18日 (金) 12時20分
はじめまして。
面白い記事をありがとうございます。
ブラケットもタミヤのユニバーサルプレートで作ったほうが
手間・強度・精度の面で良いのではないでしょうか。
また、アルミ製のブラケットを制作する場合はアルミ板を万力で直角に曲げるのではなく、
アルミ角パイプを電ノコなどで輪切りにした方が手間をかけずに精度よく作れます。
(この方法なら曲げ加工の必要も無いので強度も上がります)
投稿: 吹雪改二 | 2016年3月18日 (金) 16時38分
こんにちは、吹雪改二さん。
おっしゃるとおりですね。アクリル板の方が安かったのでついこちらの方法で強行してしまいました。不器用なくせに、貧乏臭い方法を選んでしまうもので。
次に作る機会があるときは、アルミ角パイプも考えてみます。まずは電ノコを買わなきゃいけないでしょうが・・・まあ、いずれ使う道具ならば、買っておくのも手でしょうけど。
投稿: arkouji | 2016年3月18日 (金) 20時55分
arkoujiさん
こんばんは。
電ノコは工具レンタルで借りるのもアリだと思います。
四足歩行ロボットの更なる進化を楽しみにしております。
投稿: 吹雪改二 | 2016年3月18日 (金) 21時48分