├── BOM └── Differential bom update.xlsx ├── Example codes └── diferential_test.py ├── Images ├── dif_gif.gif ├── img1.PNG ├── img10.PNG ├── img11.PNG ├── img12.PNG ├── img13.PNG ├── img14.PNG ├── img15.PNG ├── img2.PNG ├── img3.PNG ├── img4.PNG ├── img5.PNG ├── img6.PNG ├── img7.PNG ├── img8.PNG └── img9.PNG ├── LICENSE ├── README.md └── STLS ├── 12_teeth_pulley.STL ├── 1_mm_spacer.STL ├── Magnet_shaft.STL ├── Motor_holder_2.STL ├── big_bevel.STL ├── big_bevel_backplate.STL ├── gear_hub_single_stage.STL ├── outer_shell_part.STL ├── small_bevel.STL ├── small_bevel_backplate.STL └── small_bevel_shaft.STL /BOM/Differential bom update.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/BOM/Differential bom update.xlsx -------------------------------------------------------------------------------- /Example codes/diferential_test.py: -------------------------------------------------------------------------------- 1 | import Spectral_BLDC as Spectral 2 | import time 3 | 4 | 5 | Communication1 = Spectral.CanCommunication(bustype='slcan', channel='COM41', bitrate=1000000) 6 | Motor = [] 7 | 8 | Motor.append(Spectral.SpectralCAN(node_id=0, communication=Communication1)) 9 | Motor.append(Spectral.SpectralCAN(node_id=1, communication=Communication1)) 10 | ž 11 | 12 | timeout_setting = 0.00005 13 | tick_cnt = 0 14 | 15 | while True: 16 | 17 | # Send data to all motors 18 | #Motor[1].Send_data_pack_PD(-6000,0,0) 19 | #Motor[2].Send_data_pack_PD(6000,0,0) 20 | 21 | tick_cnt = tick_cnt + 1 22 | 23 | Motor[0].Send_data_pack_1(None,4500,0) 24 | Motor[1].Send_data_pack_1(None,-4500,0) 25 | 26 | 27 | #Motor[3].Send_Respond_Encoder_data() 28 | #Motor[4].Send_Respond_Encoder_data() 29 | 30 | #Motor[1].Send_Limits(800000,2000) 31 | #Motor[2].Send_Limits(800000,2000) 32 | 33 | #Motor[1].Send_Respond_State_of_Errors() 34 | #Motor[2].Send_Respond_State_of_Errors() 35 | 36 | #Motor[1].Send_PD_Gains(0.012,0.001) 37 | #Motor[2].Send_PD_Gains(0.012,0.001) 38 | 39 | for i in range(1, 7): # Loop 9-1=8 to check for received data 40 | message, UnpackedMessageID = Communication1.receive_can_messages(timeout=timeout_setting) 41 | print(f"unpack {i} is: {UnpackedMessageID}") 42 | 43 | # Check if UnpackedMessageID is not None 44 | if UnpackedMessageID is not None: 45 | #print(Motor) 46 | # Update received id index; meaning that we received response from that CAN ID 47 | Motor[UnpackedMessageID[0]].UnpackData(message,UnpackedMessageID) 48 | print(f"Motor {UnpackedMessageID [0]}, speed is: {Motor[UnpackedMessageID[0]].speed}, current is {Motor[UnpackedMessageID[0]].current },pos is {Motor[UnpackedMessageID[0]].position}") 49 | """ 50 | print(f"Motor {UnpackedMessageID[0]}, speed is: {Motor[UnpackedMessageID[0]].speed}") 51 | print(f"Error is: {Motor[UnpackedMessageID[0]].error}") 52 | print(f"Temperature rror is: {Motor[UnpackedMessageID[0]].temperature_error}") 53 | print(f"Encoder error is: {Motor[UnpackedMessageID[0]].encoder_error}") 54 | print(f"Vbus error is: {Motor[UnpackedMessageID[0]].vbus_error}") 55 | print(f"Driver error is: {Motor[UnpackedMessageID[0]].driver_error}") 56 | print(f"Velocity error is: {Motor[UnpackedMessageID[0]].velocity_error}") 57 | print(f"Current error is: {Motor[UnpackedMessageID[0]].current_error}") 58 | print(f"Estop error is: {Motor[UnpackedMessageID[0]].estop_error}") 59 | print(f"Watchdog error is: {Motor[UnpackedMessageID[0]].watchdog_error}") 60 | print(f"Calibrated is: {Motor[UnpackedMessageID[0]].calibrated}") 61 | print(f"Activated is: {Motor[UnpackedMessageID[0]].activated}") 62 | """ 63 | 64 | 65 | time.sleep(1) -------------------------------------------------------------------------------- /Images/dif_gif.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/Images/dif_gif.gif -------------------------------------------------------------------------------- /Images/img1.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/Images/img1.PNG -------------------------------------------------------------------------------- /Images/img10.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/Images/img10.PNG -------------------------------------------------------------------------------- /Images/img11.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/Images/img11.PNG -------------------------------------------------------------------------------- /Images/img12.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/Images/img12.PNG -------------------------------------------------------------------------------- /Images/img13.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/Images/img13.PNG -------------------------------------------------------------------------------- /Images/img14.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/Images/img14.PNG -------------------------------------------------------------------------------- /Images/img15.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/Images/img15.PNG -------------------------------------------------------------------------------- /Images/img2.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/Images/img2.PNG -------------------------------------------------------------------------------- /Images/img3.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/Images/img3.PNG -------------------------------------------------------------------------------- /Images/img4.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/Images/img4.PNG -------------------------------------------------------------------------------- /Images/img5.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/Images/img5.PNG -------------------------------------------------------------------------------- /Images/img6.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/Images/img6.PNG -------------------------------------------------------------------------------- /Images/img7.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/Images/img7.PNG -------------------------------------------------------------------------------- /Images/img8.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/Images/img8.PNG -------------------------------------------------------------------------------- /Images/img9.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/Images/img9.PNG -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Source robotics 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Differential-robot-wrist 2 | 3 | drawing 4 | 5 | 6 | Due the high demand to built this awesome differential mechanism we decided to open source it even in this early stage.
7 | **Note that this is test fixture that we designed to test the mechanism for our future robots! Also note that this project is based on our motor driver product called [Spectral micro BLDC driver](https://source-robotics.com/products/spectral-micro-bldc-controller)** 8 | 9 | # How to make it? 10 | 11 | Step 1 - Source all the parts from the [BOM](https://github.com/PCrnjak/Differential-robot-wrist/tree/main/BOM)
12 | Step 2 - print all the parts in [STL folder](https://github.com/PCrnjak/Differential-robot-wrist/tree/main/STLS) (Note that some parts need to be printed twice)
13 | Step 3 - Assemble the differential and [calibrate the drivers](https://source-robotics.github.io/Spectral-BLDC-docs/)
14 | Step 4 - Program and test it! [Example code!](https://github.com/PCrnjak/Differential-robot-wrist/tree/main/Example%20codes)
15 | Step 5 - Enjoy your differential mechanisam!
16 | 17 | # Assembly manual 18 | 19 | Manual is TODO. You can follow the images in images folder in order to assemble it at this moment. There are few versions of screws needed. 20 | After attaching every part 21 | 22 | Before attaching the belts you will need to calibrate the motors by following this manual: [calibrate the drivers](https://source-robotics.github.io/Spectral-BLDC-docs/) 23 | 24 | 25 | # More about our projects 26 | 27 | - [Source robotics website](https://www.youtube.com/channel/UCp3sDRwVkbm7b2M-2qwf5aQ) 28 | - [Youtube](https://www.youtube.com/channel/UCp3sDRwVkbm7b2M-2qwf5aQ) 29 | - [Instagram](https://www.instagram.com/source_robotics/) 30 | - [Twitter](https://twitter.com/SourceRobotics) 31 | - [Discord](https://discord.com/invite/prjUvjmGpZ ) 32 | - [Forum](https://discourse.source-robotics.com/) 33 | - [Blog](https://source-robotics.com/blogs/blog) 34 | 35 | 36 | 37 | # Liability 38 | 1. The software and hardware are still in development and may contain bugs, errors, or incomplete features. 39 | 2. Users are encouraged to use this software and hardware responsibly and at their own risk. 40 | 41 | # Support the project 42 | 43 | The majority of this project is open source and freely available to everyone. Your assistance, whether through donations or advice, is highly valued. Thank you! 44 | 45 | [![General badge](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white)](https://paypal.me/PCrnjak?locale.x=en_US) 46 | [![General badge](https://img.shields.io/badge/Patreon-F96854?style=for-the-badge&logo=patreon&logoColor=white)](https://www.patreon.com/PCrnjak) 47 | 48 | -------------------------------------------------------------------------------- /STLS/12_teeth_pulley.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/STLS/12_teeth_pulley.STL -------------------------------------------------------------------------------- /STLS/1_mm_spacer.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/STLS/1_mm_spacer.STL -------------------------------------------------------------------------------- /STLS/Magnet_shaft.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/STLS/Magnet_shaft.STL -------------------------------------------------------------------------------- /STLS/Motor_holder_2.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/STLS/Motor_holder_2.STL -------------------------------------------------------------------------------- /STLS/big_bevel.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/STLS/big_bevel.STL -------------------------------------------------------------------------------- /STLS/big_bevel_backplate.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/STLS/big_bevel_backplate.STL -------------------------------------------------------------------------------- /STLS/gear_hub_single_stage.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/STLS/gear_hub_single_stage.STL -------------------------------------------------------------------------------- /STLS/outer_shell_part.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/STLS/outer_shell_part.STL -------------------------------------------------------------------------------- /STLS/small_bevel.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/STLS/small_bevel.STL -------------------------------------------------------------------------------- /STLS/small_bevel_backplate.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/STLS/small_bevel_backplate.STL -------------------------------------------------------------------------------- /STLS/small_bevel_shaft.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PCrnjak/Differential-robot-wrist/dc0a8bca3363485d0d21a80e2eda08818b894057/STLS/small_bevel_shaft.STL --------------------------------------------------------------------------------