Skip to content

Commit a222a15

Browse files
committed
0329
1 parent ba4b6b1 commit a222a15

File tree

7 files changed

+100
-8
lines changed

7 files changed

+100
-8
lines changed

README.md

Lines changed: 100 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,17 @@ The design was heavily inspired by these following projects:
99

1010
[I made a DUMMY ROBOTIC ARM from scratch! (By pengzhihui)](https://www.youtube.com/watch?v=HMSLPefUVeE&ab_channel=JeremyFielding)
1111

12-
Props to them for sharing these amazing projects with all of us!
12+
Props to them for sharing these amazing projects!
1313

1414
![3D_view](image/3D_view.png)
1515

16-
This robotic arm uses harmonic drives(CSF-11, CSF-8) as reducers and steppers(NEMA17, NEMA14) as motors.
16+
This robotic arm uses harmonic drives as reducers(CSF-11, CSF-8) and steppers as motors(NEMA17, NEMA14).
1717

1818
Therefore, the overall precision of the robot is pretty decent for a 3D printed robot, but it is still no match for robotic arm that has fully CNC frames.
1919

20-
The filament I'm using is PLA+, it provides great stiffness and cheap price, but it still has some deformation when big load were apply in TCP, which is acceptable for me.
20+
The filament I'm using is PLA+, it provides great stiffness and cheap price, but it still has some deformation when big loads were apply in TCP, which is acceptable for me.
2121

22-
The controller box has a [STM32F407VG](https://www.st.com/en/evaluation-tools/stm32f4discovery.html"link"), a 12V 100W PSU and a 12V to 5V converter, can be connected to computer via USB and the robotic arm will be identify as a USB device.
22+
The control box of the robot has a [STM32F407VG](https://www.st.com/en/evaluation-tools/stm32f4discovery.html"link"), a 12V 100W PSU, a 12V to 5V converter and a sn65hvd230 CANBUS transceiver, it can be connected to computer via USB and the robotic arm will be identify as a USB device.
2323

2424
![controller](image/controller.png)
2525

@@ -36,18 +36,110 @@ alto_6_axis.Alto_Operate()
3636

3737
![side_view](image/side_view.png)
3838

39+
The design of the robot is reference from generic industrial robot, such as [Yasakawa AR1440](https://www.motoman.com/en-us/products/robots/industrial/welding-cutting/ar-series/ar1440) or [Kuka KR CYBERTECH nano](https://www.kuka.com/en-de/products/robot-systems/industrial-robots/kr-cybertech-nano)
3940

41+
The first 3 joints of the robot used NEMA17 stepper motor and CSF-11 gearbox as their joint unit, and the 3 joints were also installed with crossed roller bearings to reduce to vibration and deformation.
4042

41-
All of the component that you need to build the robot is shown in the BOM(bill of material), including the part's name and quantity.
43+
3 wrist joints used NEMA14 stepper motor and CSF-8 gearbox, which make the wrist joints lighter and more compact.
4244

43-
Some of the part were relatively more expensive then other, like harmonic drives.
45+
Every joint also has its own limit switch, the limit switch is used as a way to calibrate joint's origin(0° of the joint)
46+
47+
The detail of each joint can be found in the table below.
48+
49+
| |Joint1 |Joint2 |Joint3 |Joint4 |Joint5 |Joint6 |
50+
|:----- |:----: |:----: |:----: |:----: |:----: |:----: |
51+
|Reduction ratio|50 |50 |30 |30 |30 |30 |
52+
|Gearbox |CSF-11 |CSF-11 |CSF-11 |CSF-8 |CSF-8 |CSF-8 |
53+
|Stepper motor |NEMA17 |NEMA17 |NEMA17 |NEMA14 |NEMA14 |NEMA14 |
54+
|Stepper length |40mm |48mm |35mm |28mm |28mm |28mm |
55+
|Bearing |Rb-4510 |Rb-4510 |Rb-3510 |None |None |None |
56+
|Rotation limit |-180°~180°|-90°~90° |-90°~90° |-180°~180°|-120°~120°|-180°~180°|
57+
58+
All of the component that you need to build the robot is shown in the **BOM**(bill of material) in **hardware** folder, including the part's name and quantity.
59+
60+
Some of the parts were relatively more expensive, like harmonic drives.
4461

4562
But I've manage to found cheaper alternative in Aliexpress and Taobao, which is a lot cheaper then the original one.
4663

47-
By doing so
64+
By doing so, I've significantly reduced my cost on the robot, I end up spent around 400USD in total.
65+
66+
Which is a pretty good deal in my opinion.
4867

4968
## Firmware
5069

70+
### Preparation
71+
72+
The code of the controll box ([STM32F407VG](https://www.st.com/en/evaluation-tools/stm32f4discovery.html"link")) can be found in the **firmware** folder.
73+
74+
[STM32CubeIDE](https://www.st.com/en/development-tools/stm32cubeide.html) is needed to open the **.project** file.
75+
76+
Once **.project** is opened, all the code, peripheral setting etc... will be shown inside STM32CubeIDE.
77+
78+
The code can also be uploaded or modified in STM32CubeIDE.
79+
80+
### Source Code
81+
82+
The firmware source code can be break down into following sections :
83+
|Section name |Functionality|
84+
|:- |:- |
85+
|alto_config |Robot configuration|
86+
|command |Processing user command|
87+
|Emm_can |Stepper driver CANBUS library|
88+
|FK |Forward kinematics|
89+
|IK |Inverse kinematics|
90+
|main |STM32 main function|
91+
|matmul |matrix calculation library|
92+
|robot_behavior|Robot system core|
93+
|transform |Basic robotic mathematics library|
94+
95+
Further details can be found inside the src files.
96+
5197
## API
5298

53-
## result
99+
### Serial Command
100+
Robot can be connected to computer via USB, so any serial communication tool like [hterm](https://www.der-hammer.info/pages/terminal.html) can be used to control the robot.
101+
102+
The command reference file **alto_command.xlsx** is located inside **software** folder.
103+
104+
### Python API
105+
106+
There is also a Python API module in **software** folder named **alto.py**, which is a much easier way to control the robot.
107+
108+
Simply declare a **Alto** class object with correct COM port, then you can use the object's bulid-in method to operate the robot.
109+
110+
```python
111+
import alto
112+
113+
alto_6_axis = alto.Alto(6, com_port="COM10")
114+
alto_6_axis.Alto_Operate()
115+
alto_6_axis.Alto_Stop()
116+
alto_6_axis.Alto_Set_Speed(100)
117+
alto_6_axis.Alto_Set_Acc(80)
118+
alto_6_axis.Alto_Set_Mov(alto.Joint)
119+
alto_6_axis.Alto_Set_Joint_Angle(1, 0)
120+
alto_6_axis.Alto_Set_Joint_Angle(2, 0)
121+
alto_6_axis.Alto_Set_Joint_Angle(3, 0)
122+
alto_6_axis.Alto_Set_Joint_Angle(4, 0)
123+
alto_6_axis.Alto_Set_Joint_Angle(5, 0)
124+
alto_6_axis.Alto_Set_Joint_Angle(6, 0)
125+
alto_6_axis.Alto_Start()
126+
```
127+
128+
## result
129+
130+
### Videos
131+
132+
[IK Test Demo](https://www.youtube.com/watch?v=VYk2PS6qSJA&ab_channel=%E7%A8%8B)
133+
134+
135+
### Robotic Arm
136+
137+
![preview](image/preview1.jpg)
138+
139+
![preview](image/preview2.jpg)
140+
141+
### Control Box
142+
143+
![preview](image/controller_preview.jpg)
144+
145+
![preview](image/controller_preview_open.jpg)

hardware/alto_bom.xlsx

-124 Bytes
Binary file not shown.

image/controller_preview.jpg

82.6 KB
Loading

image/controller_preview_open.jpg

93.7 KB
Loading
File renamed without changes.

image/preview2.jpg

70.7 KB
Loading

software/alto_command.xlsx

-816 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)