A recommended way to identify which serial port the uArm is connected to
I told my colleagues don't forget to change the default String Descriptors of the USB device,
but when I start write pyuf, I found that all info report by USB is still the original from Arduino,
and there are no serial number to distinguish different arms.
It's not possible to upgrade the firmware of the USB to serial chip without disassembly the arm.
So, we can only identify the serial port by Arduino's vid, pid, manufacturer and product strings.
(A few days ago I added the identification code to the pyuf.)
I will keep tracking this issue and hope fix it in follow shipment.
Identification of joint IDs (I had to find this in the uArm metal docs, and must assume it's the same)
Yes, they are same.
Identified as Left and Right servo in:
Identified as servo 0, 1, 2, 3 in:
SERVO_BOTTOM = 0
SERVO_LEFT = 1
SERVO_RIGHT = 2
SERVO_HAND = 3 # or wrist
Which instructions tell the suction cup to pick up/release? I assume it's the pump, but it's non-obvious how this works
Follow steps (step 2 is optional):
1. pick up: M2231 V1
2. check if anything grabbed: P2231
return: V0: stop, V1: working, V2: grabbed
(known bug: sometimes even nothing grabbed, it still return V2)
3. release: M2231 V0
Will a move in cartesian co-ordinates be in a straight line by default? If not, is there a trivial way specify that it should be in a straight line?
According to G-code standard, it must be straight line.
How do I rotate the wrist joint?
G2202 N3 V0~180
Can I "detach" and/or read the angle wrist joint?
Normally, all joint could be attach by command:
M17 # for all, or
M2201 N0~3 # for specified joint
M2019 # for all, or
M2202 N0~3 # for specified joint
read attach status:
M2203 N0~3 # return V0: not attach, V1: attached
But wrist joint not support attach by now.
Read the angle wrist:
What's the min/max for any of the motor positions?
How to control the feed system for 3D printing
It's same as other 3D printings, there is an E value in G0/1 command.
Reset the E value to zero by command:
Can the laser power be set, or can it be pulse width modulated? If so, how do we do this given the asynchronous nature of the protocol, and what's the maximum possible frequency for modulating
The laser power is close by G0 command, open by G1 command
(I think it's should change to a value argument instead),
pulse width modulated controlled by P value in G1 command.
frequency is fixed to 490 Hz, may changed in the future.
Unfortunately, the laser module already shipped don't support modulate. (or don't support well)
How to talk to any of the grove or IIC modules. Is grove/IIC via EEPROM access? If so, is it SYS or USR, and how is the corresponding memory space mapped to various modules?
Grove modules are controlled by there own command, which could be found in the last document:
What else is EEPROM used/usable for?
I thought SYS and USR is different partition on the EEPROM chip,
but the trues is that they are different chips,
and the SYS is not even exist for Swift Pro,
so, only the USR could be used.
(there is a INTERNAL EEPROM instead of SYS for Swift Pro, but not opened for users)
The USR default used by offline teaching, there is no header or anything special,
all space are filled by recording points:
EEPROM default data format, each item is one offline record data:
[p0, p1, p2, p3, p4, p5 ... p_end]
each record data is 10 bytes, and each item inside is 2 bytes:
[a0, a1, a2, a3, accessories_state]
a0~3: unsigned fixed point of servos' angle (multiply by 100)
bit0: pump on/off
bit4: griper on/off
p_end indicate the end of records, filled by 0xffff
You can use USR EEPROM for any other propose.
What is the M2240 command (Set the digital IO output) used/usable for?
Control all GPIO output if you want, for 30P Base Extension, Accessory Port and Front Extension Port.
The firmware not support digital IO as input currently.
I hope the document would be migrate to LaTeX or similar,
that's much easier for collaborative work and version control.