Difference between revisions of "Raspberry PI Spiderbot"

From BITPlan Wiki
Jump to navigation Jump to search
Line 7: Line 7:
 
|date=2019-08-07
 
|date=2019-08-07
 
}}
 
}}
 +
{{:Self_Driving_RC_Car/Links}}
 +
 
Inspired by the Arduino Project below we'd like to create a Raspberry PI version as in https://github.com/yasaspeiris/aragog
 
Inspired by the Arduino Project below we'd like to create a Raspberry PI version as in https://github.com/yasaspeiris/aragog
 
= Video =
 
= Video =
Line 13: Line 15:
 
* http://pi-q-robot.bitplan.com/
 
* http://pi-q-robot.bitplan.com/
 
* {{Link|target=PI-Q-Robot|title=Simulator documentation}}
 
* {{Link|target=PI-Q-Robot|title=Simulator documentation}}
 
+
== Calibration ==
 +
=== Restful interface ===
 +
<pre>
 +
http://<baseurl>/servo/<servoid>/<angle> will set the angle of a single servo
 +
</pre>
 +
=== Servo numbering scheme  ===
 +
* 0: leg 0 coxa
 +
* 1: leg 0 femur
 +
* 2: leg 0 tibia
 +
* 3: leg 1 coxa
 +
* 4: leg 1 femur
 
= Links =
 
= Links =
 
* [https://www.thingiverse.com/thing:2204279 Spider robot(quad robot, quadruped)-MG90  regishu 2017]
 
* [https://www.thingiverse.com/thing:2204279 Spider robot(quad robot, quadruped)-MG90  regishu 2017]

Revision as of 15:20, 18 January 2020

OsProject
id  PI-Q-Robot
state  
owner  BITPlan
title  Raspberry PI controlled Quadruped Robot with 3D Simulator
url  https://github.com/BITPlan/PI-Q-Robot
version  0.0.1
description  
date  2019-08-07
since  
until  

Click here to comment see Self Driving RC Car

Inspired by the Arduino Project below we'd like to create a Raspberry PI version as in https://github.com/yasaspeiris/aragog

Video

Simulator

Calibration

Restful interface

http://<baseurl>/servo/<servoid>/<angle> will set the angle of a single servo

Servo numbering scheme

  • 0: leg 0 coxa
  • 1: leg 0 femur
  • 2: leg 0 tibia
  • 3: leg 1 coxa
  • 4: leg 1 femur

Links

Other

Parts

# picture part example sources documents ~ price
1 713LX1Z383L. SL1500 .jpg Raspberry PI 3 B+ Raspberry PI 3 B+ en 35 €
2 81UBu4aoQHL. SL1500 .jpg microSD Card SanDisk 16 GB 7 €
3 61Z5yEYfnAL. SL1426 .jpg Raspberry PI Camera 1080 p Camera Module 23 €
4 41smcErJNjL.jpg DC/DC Converter 12 V-> 5V 12 V->5 V Converter Module 7 €
5 31pzC7A3D3L.jpg Micro USB Connector Delock USB 2.0 Micro USB 6 €
6 SpiderBot-Parts-IMG 0033.JPG 3D Printed Parts: Coxa, Tibia, Femur, Hinge parts from regishu's design
7 61B2dK96ysL. SL1000 .jpg Adafruit PCA9685 16 channel PWM controller PCA9685 6.5 €
8 61yfILxEkgL. SX679 .jpg set of small screws set of small screws 8.5 €
9 71a1K3RQuqL. SX679 .jpg 12 x MG90S 12 x MG90s 42 €
Total ~ 135 €
a 71AYEqpWHcL. SL1500 .jpg Breadbord Kit MB102 Breadbord Kit 7 €
b 714Ep9LpwoL. SL1200 .jpg Ulrasound Sensor 5 x HC-SR04 + Cables 10 €

Printing

You might want to make sure that you print your parts with sufficient infill - I used 75%.

SpiderBotParts-IMG 0028.jpeg

Example for broken part

This part was printed with Cura's default infill and broke off:

Broken-IMG 0034.JPG

Assembly

  • Legs and hinges are connected with 1.4x5mm screws
  • Legs and servos are connected with 1.7x6mm screws

Leg IMG 0029.JPG LegConnection-IMG 0030.JPG

We use the raspberry base from https://github.com/yasaspeiris/aragog/blob/master/3d%20printed%20parts/base.STL

Plate-IMG 0033.JPG

Leg Test

sudo python3 testadafruit.py 0 1 2 3  0

Legs0-IMG 0030.JPG

sudo python3 testadafruit.py 0 1 2 3  90

Legs90-IMG 0031.JPG

sudo python3 testadafruit.py 0 1 2 3  180

Legs180-IMG 0032.JPG

testadafruit.py

# Test Adafruit 
# WF 2019-07-09
import sys
import time
from adafruit_servokit import ServoKit
kit = ServoKit(channels=16)

# 
# set the given angle for the given servos
#
def setAngle(servos,angle):
  print (angle)
  for id in servos:
    kit.servo[id].angle=angle
  time.sleep(0.3)

# Test Servo Software
servos=[]
args=len(sys.argv)
fromangle=0
toangle=180
step=1
if args>1:
  for port in range(1,args-1,1):
    servos.append(int(sys.argv[port]))
  anglestr=sys.argv[args-1]
  if "-" in anglestr:
    parts=anglestr.split("-") 
    fromangle=int(parts[0])
    toangle=int(parts[1])
  else:
    fromangle=int(anglestr)
    toangle=fromangle
else:
  servos.append(0)
  servos.append(1)
  servos.append(2)

if fromangle!=toangle:
  try:
    while True:
      for setangle in range(fromangle,toangle+step,step):
        setAngle(servos,setangle)
  except KeyboardInterrupt:
    print("Keyboard interrupt")
else:
  setAngle(servos,fromangle)

Evolution of Base

Since we'd like to use a Raspberry PI we couldn't use the orignal Base by regishu. Trying the one from https://github.com/yasaspeiris/aragog also did not work since our raspberry PI case had a different size. So incrementally a new design was created:

Evolution of Base IMG 0030.JPG

The problems mentioned further below led to this design:

Modified Base-IMG 0036.JPG

Legtest 2

The three parts of a leg have been connected to the ports 10,11 and 12 and then the test was started with:

sudo python3 testadafruit.py 10 11 12 60-120

Wiring

Breadboard - style wiring before designing a proper holder:

Wiring-IMG 0035.JPG

In this state of affairs:

  1. the power input of the raspberry is blocked by a servo - needs to be moved by at least 13 mm
  2. the corner hinges are to close to the corners of the servo holders
  3. the pivots to be used for the next level are blocking e.g. the usb connectors

What Links Here