Chefbot: En DIY autonoma mobil robot för att servera mat på Hotell (1 / 11 steg)
Steg 1: Mekanisk konstruktion av Chefbot
I det här steget kan vi se ett referat av designprocessen Chefbot nämns i boken.
Robot design utgår från en uppsättning krav.
Följande villkor måste uppfyllas av robot design.
Här är kraven
- Roboten bör ha en bestämmelse att bära mat och dryck.
- Roboten bör kunna bära en maximal nyttolast på 5 kg.
- Roboten skulle färdas med en hastighet mellan 0.25 m/s och 1 m/s
- Roboten markfrigång bör vara större än 3 cm
- Robot måste kunna arbeta 2 timmar kontinuerligt
- Roboten ska kunna flytta och levererar mat till alla register genom att undvika hinder
- Robot höjden ska vara mellan 40 cm och 1 meter
- Roboten ska vara av låg kostnad
Efter att analysera och utforma från kravet kommer vi fram till att följande parametrar bör på roboten.
Motoriska specifikation
- Robot drive: Differential hjul enhet
- Krävs varvtal: 80 RPM
Så bör vi utforma ett drivsystem av robot och köpa motorer som är att matcha med dessa specifikationer.
Nästa steg är att utforma robot chassi.
Robot chassidesign
Vi tar 3-plattform skiktad arkitektur i denna robot som liknar Turtlebot 2.
Jag har använt efter fri programvaruverktyg för att skissa och Visa 2D- och 3D design av roboten
- LibreCAD: LibreCAD är ett heltäckande 2D CAD-program som du kan ladda ner och installera gratis.
- Blender: Blender är verktyget fri och öppen källkod 3D-modellering.
- Meshlab: MeshLab är en öppen källkod, bärbar, och utbyggbara system för bearbetning och redigering av ostrukturerade 3D trekantiga maskor.
I Ubuntu kan du installera verktyg detta användande följande befalla
Installera LibreCAD
$ sudo lämplig-få installera librecad
Installera Blender
$ sudo lämplig-få installera blender
Installera Meshlab
$ sudo lämplig-få installera meshlab
Du kan se 2D design av roboten, basplatta, mellersta och övre plåt av roboten modelleras med LibreCAD.
Måtten på tallrikar och mått för varje hål ges nedan
Dimensioner
Här är måtten på varje platta
Basplatta:
- M1 och M2(motors): 5 x 4 cm
- C1 och C2(caster wheels) radie : 1,5 cm
- S(Screw) radie : 0.15 cm
- P1-1, P1-2, P1-3, P1-4 : yttre radie = 0.7 cm, höjd = 3,5 cm
- Vänster och höger hjul sektioner : 2,5 x 10 cm
- Basplatta radie: 15 cm
Mellersta och övre plattan har samma dimensioner av bottenplattan med samma skruv storlek och andra dimensioner. Du kan visa dessa plåtar från bildgalleriet.
Varje plattor är anslutna med ihåliga rören med skruvar. Du kan se dess dimensioner från bilder.
3D modellering sker med hjälp av Python skript i mixer. Du kan se skärmdump av Blender med robot modell från bilder.
Python-skript och Blender 3D-modell-fil är bifogad tillsammans med detta steg.
Vi kan exportera robot modellen till STL det kan visas i 3D-nät som tittar på verktyg som kallas Meshlab som ingår i bilderna.
Python-skript för att generera robot modell i mixer är nedanstående
importera bpy < br >
#This funktion kommer att dra basplatta
def Draw_Base_Plate():
#Added två kuber för styckning sidor av bottenplattan
bpy.OPS.mesh.primitive_cube_add (radie = 0,05, location=(0.175,0,0.09))
bpy.OPS.mesh.primitive_cube_add (radie = 0,05, location=(-0.175,0,0.09))
################################################
#Adding bottenplatta
bpy.OPS.mesh.primitive_cylinder_add (radie = 0,15, djup = 0,005, location=(0,0,0.09))
#Adding booleab skillnaden modifier från första kub
bpy.OPS.Object.modifier_add(Type='BOOLEAN')
bpy.context.Object.modifiers["Boolean"].operation = "Skillnad"
bpy.context.Object.modifiers["Boolean"].Object = bpy.data.objects["Cube"]
bpy.OPS.Object.modifier_apply(modifier="Boolean")
################################################
#Adding booleab skillnaden modifier från andra kub
bpy.OPS.Object.modifier_add(Type='BOOLEAN')
bpy.context.Object.modifiers["Boolean"].operation = "Skillnad"
bpy.context.Object.modifiers["Boolean"].Object = bpy.data.objects["Cube.001"]
bpy.OPS.Object.modifier_apply(modifier="Boolean")
################################################
#Deselect cylinder och ta bort kuber
bpy.OPS.Object.select_pattern(Pattern="Cube")
bpy.OPS.Object.select_pattern(Pattern="Cube.001")
bpy.data.Objects['Cylinder'].Select = False
bpy.OPS.Object.Delete(use_global=false)
#This funktion kommer att dra motorer och hjul
def Draw_Motors_Wheels():
#Create första hjul
bpy.OPS.mesh.primitive_cylinder_add (radie = 0.045, djup = 0,01, location=(0,0,0.07))
#Rotate
bpy.context.Object.rotation_euler[1] = 1.5708
#Transalation
bpy.context.Object.location[0] = 0.135
#Create andra hjul
bpy.OPS.mesh.primitive_cylinder_add (radie = 0.045, djup = 0,01, location=(0,0,0.07))
#Rotate
bpy.context.Object.rotation_euler[1] = 1.5708
#Transalation
bpy.context.Object.location[0] =-0.135
#Adding motorer
bpy.OPS.mesh.primitive_cylinder_add (radie = 0,018, djup = 0,06, location=(0.075,0,0.075))
bpy.context.Object.rotation_euler[1] = 1.5708
bpy.OPS.mesh.primitive_cylinder_add (radie = 0,018, djup = 0,06, location=(-0.075,0,0.075))
bpy.context.Object.rotation_euler[1] = 1.5708
#Adding motoraxeln
bpy.OPS.mesh.primitive_cylinder_add (radie = 0,006, djup = 0,04, location=(0.12,0,0.075))
bpy.context.Object.rotation_euler[1] = 1.5708
bpy.OPS.mesh.primitive_cylinder_add (radie = 0,006, djup = 0,04, location=(-0.12,0,0.075))
bpy.context.Object.rotation_euler[1] = 1.5708
################################################
#Addubg caster Wheel
bpy.OPS.mesh.primitive_cylinder_add (radie = 0,015, djup = 0,05, location=(0,0.125,0.065))
bpy.OPS.mesh.primitive_cylinder_add (radie = 0,015, djup = 0,05, location=(0,-0.125,0.065))
#Adding Kinect
bpy.OPS.mesh.primitive_cube_add (radie = 0,04, location=(0,0,0.26))
#Draw mellersta plattan
def Draw_Middle_Plate():
bpy.OPS.mesh.primitive_cylinder_add (radie = 0,15, djup = 0,005, location=(0,0,0.22))
#Adding övre plattan
def Draw_Top_Plate():
bpy.OPS.mesh.primitive_cylinder_add (radie = 0,15, djup = 0,005, location=(0,0,0.37))
#Adding stöd rör
def Draw_Support_Tubes():
####################################################
#Cylinders
bpy.OPS.mesh.primitive_cylinder_add (radie = 0,007, djup = 0,30, location=(0.09,0.09,0.23))
bpy.OPS.mesh.primitive_cylinder_add (radie = 0,007, djup = 0,30, location=(-0.09,0.09,0.23))
bpy.OPS.mesh.primitive_cylinder_add (radie = 0,007, djup = 0,30, location=(-0.09,-0.09,0.23))
bpy.OPS.mesh.primitive_cylinder_add (radie = 0,007, djup = 0,30, location=(0.09,-0.09,0.23))
#Exporting i STL
def Save_to_STL():
bpy.OPS.Object.select_all(action='SELECT')
# bpy.ops.mesh.select_all(action='TOGGLE')
bpy.OPS.export_mesh.stl (check_existing = sant, filepath="/home/lentin/Desktop/exported.stl", filter_glob = "*.stl", ascii = falskt, use_mesh_modifiers = True axis_forward = 'Y', axis_up = "Z", global_scale = 1,0)
#Main kod
om __name__ == "__main__":
Draw_Base_Plate()
Draw_Motors_Wheels()
Draw_Middle_Plate()
Draw_Top_Plate()
Draw_Support_Tubes()
Save_to_STL()