Stap 1: Mechanische ontwerp van Chefbot
In deze stap, kunnen we een samenvatting van het ontwerpproces van de Chefbot vermeld in het boek zien.
Het ontwerp van de robot gaat uit van een reeks eisen.
Volgende voorwaarden moeten worden voldaan door het ontwerp van de robot.
Hier zijn de vereisten
- De robot moet een bepaling om eten en drinken.
- De robot moet zitten kundig voor voeren een maximaal laadvermogen van 5 kg.
- De robot moet reizen met een snelheid tussen de 0,25 m/s en 1 m/s
- De bodemvrijheid van de robot moet groter zijn dan 3 cm
- De robot moet kunnen werken voor 2 uur continu
- De robot moet kunnen verplaatsen en het verstrekken van voedsel aan een tabel door het vermijden van hindernissen
- De hoogte van de robot moet tussen de 40 cm en 1 meter
- De robot moet voor lage kosten
Na het analyseren van en het ontwerpen van de verplichting komen we tot de conclusie dat, op de volgende parameters op de robot worden moet.
Motor specificatie
- Robot station: Differential wielen rijden
- Gewenste Motor snelheid: 80 RPM
- Wieldiameter: 9 cm
We moeten dus een aandrijfsysteem van robot ontwerpen en kopen van motoren die is matching met deze specs.
Volgende stap is het ontwerpen van de robot chassis.
Robot-chassisontwerp
Wij nemen het 3-gelaagde platformarchitectuur in deze robot die vergelijkbaar met Turtlebot 2 is.
Ik heb gebruikt na free software gereedschappen voor het schetsen en het bekijken van de 2D- en 3D-ontwerp van de robot
- LibreCAD: LibreCAD is een allesomvattende 2D CAD-toepassing die u kunt downloaden en installeren voor gratis.
- Blender: Blender is de gratis en open source 3D modeling tool.
- Meshlab: MeshLab is een open source, draagbare, en uitbreidbaar systeem voor de verwerking en bewerking van ongestructureerde 3D driehoekige netten.
In Ubuntu, die kunt u hulpmiddel dit met behulp van volgende commando
Installeren van LibreCAD
$ sudo apt-get install librecad
Installeren van Blender
$ sudo apt-get install blender
Installeren van Meshlab
$ sudo apt-get install meshlab
Hier ziet u het 2D ontwerp van robot, grondplaat, middelste plaat en bovenplaat van de robot gemodelleerd met behulp van LibreCAD.
De afmetingen van de platen en de afmetingen van elke gaten worden hieronder gegeven.
Afmetingen
Hier zijn de afmetingen van elke plaat
Bodemplaat:
- M1 en M2(motors): 5 x 4 cm
- C1 en C2(caster wheels) Radius : 1.5 cm
- S(Screw) straal : 0,15 cm
- P1-1, P1-2, P1-3, P1-4 : buitenste straal = 0.7 cm, hoogte 3,5 cm =
- Links en rechts wiel secties : 2.5 x 10 cm
- Baseren plaat Radius: 15 cm
De middelste en top plaat hebben dezelfde afmetingen van basisplaat met dezelfde grootte van de schroef en andere dimensies. U kunt deze platen uit de fotogalerij bekijken.
Elke platen worden verbonden met holle buizen met schroeven. U kunt de afmetingen van de beelden zien.
De 3D modeling wordt gedaan met behulp van Python script binnen Blender. U kan screenshot van Blender met robot model uit de beelden zien.
De Python script en Blender 3D-model-bestand wordt bijgevoegd samen met deze stap.
Wij kunnen het model robot exporteren naar STL het in 3D mesh tool genaamd Meshlab die is opgenomen in de beelden bekijken kan bekeken.
Hieronder vindt u de python-script voor het genereren van robot model in de Blender
import bpy<br> #This function will draw base plate def Draw_Base_Plate(): #Added two cubes for cutting sides of base plate bpy.ops.mesh.primitive_cube_add(radius=0.05, location=(0.175,0,0.09)) bpy.ops.mesh.primitive_cube_add(radius=0.05, location=(-0.175,0,0.09)) ################################################ #Adding base plate bpy.ops.mesh.primitive_cylinder_add(radius=0.15,depth=0.005, location=(0,0,0.09)) #Adding booleab difference modifier from first cube bpy.ops.object.modifier_add(type='BOOLEAN') bpy.context.object.modifiers["Boolean"].operation = 'DIFFERENCE' bpy.context.object.modifiers["Boolean"].object = bpy.data.objects["Cube"] bpy.ops.object.modifier_apply(modifier="Boolean") ################################################ #Adding booleab difference modifier from second cube bpy.ops.object.modifier_add(type='BOOLEAN') bpy.context.object.modifiers["Boolean"].operation = 'DIFFERENCE' bpy.context.object.modifiers["Boolean"].object = bpy.data.objects["Cube.001"] bpy.ops.object.modifier_apply(modifier="Boolean") ################################################ #Deselect cylinder and delete cubes 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 function will draw motors and wheels def Draw_Motors_Wheels(): #Create first Wheel bpy.ops.mesh.primitive_cylinder_add(radius=0.045,depth=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 second wheel bpy.ops.mesh.primitive_cylinder_add(radius=0.045,depth=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 motors bpy.ops.mesh.primitive_cylinder_add(radius=0.018,depth=0.06, location=(0.075,0,0.075)) bpy.context.object.rotation_euler[1] = 1.5708 bpy.ops.mesh.primitive_cylinder_add(radius=0.018,depth=0.06, location=(-0.075,0,0.075)) bpy.context.object.rotation_euler[1] = 1.5708 #Adding motor shaft bpy.ops.mesh.primitive_cylinder_add(radius=0.006,depth=0.04, location=(0.12,0,0.075)) bpy.context.object.rotation_euler[1] = 1.5708 bpy.ops.mesh.primitive_cylinder_add(radius=0.006,depth=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(radius=0.015,depth=0.05, location=(0,0.125,0.065)) bpy.ops.mesh.primitive_cylinder_add(radius=0.015,depth=0.05, location=(0,-0.125,0.065)) #Adding Kinect bpy.ops.mesh.primitive_cube_add(radius=0.04, location=(0,0,0.26)) #Draw middle plate def Draw_Middle_Plate(): bpy.ops.mesh.primitive_cylinder_add(radius=0.15,depth=0.005, location=(0,0,0.22)) #Adding top plate def Draw_Top_Plate(): bpy.ops.mesh.primitive_cylinder_add(radius=0.15,depth=0.005, location=(0,0,0.37)) #Adding support tubes def Draw_Support_Tubes(): #################################################### #Cylinders bpy.ops.mesh.primitive_cylinder_add(radius=0.007,depth=0.30, location=(0.09,0.09,0.23)) bpy.ops.mesh.primitive_cylinder_add(radius=0.007,depth=0.30, location=(-0.09,0.09,0.23)) bpy.ops.mesh.primitive_cylinder_add(radius=0.007,depth=0.30, location=(-0.09,-0.09,0.23)) bpy.ops.mesh.primitive_cylinder_add(radius=0.007,depth=0.30, location=(0.09,-0.09,0.23)) #Exporting into 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=True, filepath="/home/lentin/Desktop/exported.stl", filter_glob="*.stl", ascii=False, use_mesh_modifiers=True, axis_forward='Y', axis_up='Z', global_scale=1.0) #Main code if __name__ == "__main__": Draw_Base_Plate() Draw_Motors_Wheels() Draw_Middle_Plate() Draw_Top_Plate() Draw_Support_Tubes() Save_to_STL()