Xiaomi Cyber dog geared motor ~$60

Hello, I will check theremino, but one question is of general interest I think:
Does it support various kinematics, like 4- or 5 axis (palletized) robot arms or is it a solution for one motor?

Hi,
actually we have an unconventional approach that aims at low cost and low level of expertise for fairly simple automations.
Referring to the control of the movement of multiple motors, in theory we have no limits, better to say, we have the limit related to the number of motors and the speed and complexity of the protocol.
So far we have used compatible Dynamixel (https://www.dynamixel.com/) smart motors, produced in China to make prototypes of small robotic arms.
We use the -try, fail and learn- methodology for -pick and place- applications exactly as kids learn to mall claw machine.
Where no type of knowledge is needed to manage a Cartesian robot.
To get a real idea of ā€‹ā€‹what we are talking about go here:

www.youtube.com/@TWinGo_arm

We want to make a leap in quality by using CyberGear.
If you think this explanation is not enough, just ask and I will be happy to provide you with more details on the Theremino system.

Ciao

Leonardo

Hello friends,
the CyberGear is arrived, I prepare the mechanical support and now begin to play.

Someone know if all the documentation is stiil in Chinese or there are an official version in English?

Leo

Good luck! An English translation was posed earlier in the thread here. The rest of his GitHub repository has some useful links and information as well.

Dear friends,

I have write some software using Theremino Automationd and I have published on YouTube the tests:

Any comment, suggestion, criticism or questions are welcome.

Leo

1 Like

Hi,

I carried out repeatability measurements and as you can see in the video, they are not exactly optimal.
I measured it in a somewhat empirical way, which on the 200 mm long arm is just under 1.5 mm.
https://youtu.be/1IwWmNGTGVg
I believe that the cause is to be found in the backlash that exists between the reduction gears.

Leo

Nice work! What library are you using to handle the communication with the motor?

Please excuse my delayed response; Iā€™m currently moving and planning an international trip.

Our team at the THEREMINO SYSTEM takes a different approach to automation, specifically targeting users who arenā€™t professional programmers but want to solve practical problems. Weā€™ve found that using Arduino and standard C++ cannot be challenging for many persons.

Consider this scenario:

Imagine someone wants to:
Turn on a fan when the temperature reaches a certain threshold.
Turn off the fan when the temperature drops below that threshold.
Log these events, including date, time, and temperature, to a text file on their PC.
Implementing this with Arduino and standard libraries can be quite complex or ā€œmission impossibleā€ for non professional programmers.

Our Solution: THEREMINO AUTOMATION
Weā€™ve developed an interpreted language called THEREMINO AUTOMATION under Visual Studio and OPEN SOURCE.

It simplifies interaction with sensors and actuators using a PIC microcontroller (Microchip) as a Master.

Also we rewrite how to communicate in ultrafast way over USB in HID mode to the Master.
This allows users with basic programming knowledge (like understanding ā€œif-then-elseā€ or ā€œfor-nextā€) to create automation projects easily.

We prioritize accessibility for users familiar with tools like Microsoft Office and basic programming concepts.
Instead of relying on complex libraries, we focus on direct serial communication.
This approach leverages the PCā€™s processing power.

Example: Controlling a Motor
Here is the way where we control the CyberGear motor:

Label Angle90
TTS Speak ā€œgo to 90 degreesā€ 'use text to speak to inform the user about the actiom done
FrameAngle(90)
Return

Label FrameAngle
Numeric Angle
Numeric Destination = Rad(Angle)
String DestHex
Slot(slot_DestAngle) = Angle
DestHex = ConvertToIEEE754(Destination, True, False)
s1 = ā€œ41 54 90 07 e8 0c 08 16 70 00 00 "
s1 = s1 + DestHex
s1 = s1 + " 0d 0aā€
SendCommand
Return

Label SendCommand
COM WriteStringHEX s1
'Print ā€œTx=ā€ + s1 + CRLF
Return

String Port = 5
Numeric Bauds = 921600
Essentially, we send hexadecimal strings over the serial port to control devices.
We aim to provide a straightforward automation solution for individuals who may not have extensive programming expertise.

Thanks for your time.

Iā€™ve just published a comprehensive Python library to control the motor and a complimentary desktop GUI app similar to theirs.

I work on a mac and havenā€™t been able to get their Windows program to work on my system, so I built my own cross-platform desktop app. I hope itā€™s useful to someone. Itā€™s not as feature-rich as theirs yet, but I hope to build it out more.

The CyberGear CAN interface is pretty good, but it would be even better if SimpleFOC could be installed on this board. I know some people are working on it. Good luck!

2 Likes

Hi, I currently have exactly the same problem as you, concerning this zero position which is lost each time the power supply is cut. Have you been able to find a solution?

The documentation (section 4.1.6 ) states that the custom zero position is lost after power down.

Iā€™m not sure how other people deal with this, but I assume the solution would be to have a secondary absolute encoder on the output shaft or limit switches to zero the motor on power-up.

Depending on your application, saving the zero position using the motorā€™s internal encoder isnā€™t practical. The encoder tracks the absolute position of one full rotation of the motor before the planetary gearbox. This means it tracks ~8 rotations per output shaft rotation. So if you turn the power off and move the shaft manually, it wonā€™t know how to return to the absolute position it was at when the power was on.

You can see this yourself by turning the motor on and instructing it to move to the default zero position. Then, turn the motor off and manually turn the shaft a quarter turn. Now, turn the motor back on and instruct it to move to the default zero position. Youā€™ll see that it doesnā€™t move it back to the position it was at on power down.

1 Like

Thank you very much for your reply. Itā€™s really annoying, I thought that on such recent motors, adapted for robotics, this problem was integrated. How do they do this for their mass-produced robot dogs, they also use additional sensors? Iā€™ve also heard that it might be possible to describe a specific can frame to force this zero position into the motorā€™s memory, has anyone ever used this method or perhaps something else? But if the encoder follows the logic you describe, it might not be much use either. For information, I use an ESP32 and the Arduino library.

Great work! I wrote my own python library but had trouble getting velocity to work in Operation Control and Position modes. Trying out both your libraries now.

Let me know if it works for you. Iā€™m still finding a few bugs here and there and am trying to clean them up as I go.

Hi everyone,
Iā€™m using the arduino library with the esp32 XIAO, Iā€™m desperately trying to assign a new zero position as soon as the program starts. Iā€™ve tried with the CMD_SET_MECH_POSITION_TO_ZERO function. But all my attempts have failed. Do any of you have an example of code to do this? Thank you !