Skip to content

set parameter oplet

JamesNewton edited this page Sep 3, 2021 · 102 revisions

High level Parameters in the Dexter Firmware are set with the "S" Oplet. For direct control of low level FPGA parameters, see the "w" Oplet

Instructions marked as "Queued" are stored in the FPGA in the 16 level internal movement FIFO and executed sequentially.

Description
#, Name
(use either)
min | initial | max
in DDE units
min | initial | max
in Dexter Firmware units
MaxSpeed: Queued. Maximum velocity of next move in "nbits"1. Replaced by AngularSpeed. See also StartSpeed below.
0, MaxSpeed 0.001 | 30 | 45 deg/s 8 | 250000 | 348963 integer nbits
Acceleration: Queued. Maximum acceleration of next move. _To be_ (is not yet) replaced by AngularAcceleration below
1, Acceleration 0.0001 | 0.0001 | 0.1 deg/s2 1 | 3 | 64 integer values
Joint Forces: How hard each joint tries to return to commanded position in force protect modes. Useful for removing the force of gravity. Also used to provide haptic force feedback in teleoperation or VR systems.
2, J1Force
3, J3Force
4, J2Force
5, J4Force
6, J5Force
Joint Frictions: 2 The friction felt during FollowMe mode. Coefficient to scale the position error; feels like friction. Can be negative. Used in most modes, very important in follow mode. Frictions can be fractional, but are limited to a range of +-(256 + 1/256). E.g. 1.1 becomes 1 plus a fractional value of 25/256.
7, J1Friction 5 unitless 0-50 fixed point 8.8
8, J3Friction 5 unitless 0-50 fixed point 8.8
9, J2Friction 5 unitless 0-50 fixed point 8.8
10, J4Friction 15 unitless 0-150 fixed point 8.8
11, J5Friction 15 unitless 0-150 fixed point 8.8
Joint Boundaries: Set all Boundaries at once with "B" Oplet. Maximum position past which the force position override will be reduced for each joint. Injects a negative force opposing the external force to limit the amount the joint will move to avoid external forces. (note order if referencing by number, Joint 3 and 2 are swapped here)
12, J1BoundryHigh -180 | 150 | 180 deg -648000 | 540000 | 648000 integer arcsec
13, J1BoundryLow -150 (-180 to 180) deg -648000 | -540000 | 648000 integer arcsec
14, J3BoundryHigh (150) -180 to 180 deg -648000 | 540000 | 648000 integer arcsec
15, J3BoundryLow -180 | -150 | 180 deg -648000 | -540000 | 648000 integer arcsec
16, J2BoundryHigh -180 | 90 | 180 deg -648000 | 324000 | 648000 integer arcsec
17, J2BoundryLow -180 | -90 | 180 deg -648000 | -324000 | 648000 integer arcsec
18, J4BoundryHigh -180 | 90 | 180 deg -648000 | 324000 | 648000 integer arcsec
19, J4BoundryLow -180 | -90 | 180 deg -648000 | -324000 | 648000 integer arcsec
20, J5BoundryHigh -180 | 90 | 180 deg -648000 | 324000 | 648000 integer arcsec
21, J5BoundryLow -180 | -90 | 180 deg -648000 | -324000 | 648000 integer arcsec
Gripper Motor: Set PWM output on [J19 pin 7](End-Effectors#j19-pin-7) 1st parameter starts PWM with 1, stop with 0. After 2019/05/23: 2nd parameter is PWM on time, 3rd is off time. Originally controlled by W commands 73 - 74.
22, GripperMotor 0|0|1 ON/OFF, 0|0|100 ON_PWM, 0|0|100 OFF_PWM 0=off 1=on,
(0) 0 to 12000 on time,
(0) 0 to 12000 off time
EERoll: Set 6th axis position / Tool Interface Roll (was standard servo, May 29,2018 changed to Dynamixel)
23, EERoll 0-300 deg 0|512|~1023 servo units (0.29*deg)
EESpan: Set 7th axis position / End Effector actuation (was standard servo, May 29,2018 changed to Dynamixel)
24, EESpan 0-300 deg 0|0|~1023 servo units (0.29*deg)
StartSpeed: Queued. Velocity at start (and currently, the end as well) of the next move in "nbits"1. See #36 "AngularSpeed" below.
25, StartSpeed 0.0001|1|? degrees/second 1|7754|? nbits
EndSpeed: (not implemented) Currently StartSpeed is the speed for both the start and end of each move. See #37 "AngularSpeedStartAndEnd" below.
26, EndSpeed
ServoSet2X: Low level servo register write (as of 2018/05/29 was "End") see: Servo
27, ServoSet2X Servo Address (3=J6, 1=J7), Register, Value
ServoSet: Send string to servo 2018/05/29. Needs work see Issue 32 Needed for Screen
28, ServoSet Servo Address, Register, String
RebootServo: Reset servo to default values, clear errros. 2018/05/29. Joint 6 is address 3, Joint 7 is 1
29, RebootServo Servo Address
RunFile: Added 2018/10/12 If it exists, the file will be opened and all instructions from it parsed and executed. By convention, files end with .make_ins extension. Each line should be one instruction just like any sent over the socket connection (the job, instruction, start, and end time values are NOT included; start with the oplet). A sample line might be
S J1_PID_P 0.2 ; set base drive
Anything after a ';' is ignored allowing comments.
Was 2018/08/24 "Ctrl" parms/values for compact setting of values related to operational mode but this was depreciated and replaced with RunFile.
Note: While executing a .make_ins file, Dexter will NOT respond to any input.
30, RunFile FilePathName FilePathName
Joint PID: 2018/08/12 Set Joint PID P with a floating point number. Helps with Issue #33
31, J1_PID_P 0 | 0.2 | 1 unitless 0 | 0.2 | 1 float
32, J2_PID_P 0 | 0.2 | 1 unitless 0 | 0.2 | 1 float
33, J3_PID_P 0 | 2 | 4 unitless 0 | 2 | 4 float
34, J4_PID_P 0 | 0.1 | 0.5 unitless 0 | 0.1 | 0.5 float
35, J5_PID_P 0 | 0.1 | 0.5 unitless 0 | 0.1 | 0.5 float
AngularSpeed: Speed to ramp up to at given acceleration. Same as MaxSpeed but with human readable units.
36, AngularSpeed 1 | 30 | 45 deg/s 3600 | 108000 | 162000 integer arcsec/s
Angular Speed Start And End: Speed to ramp up from and down to. Same as StartSpeed but with human readable units.
37, AngularSpeedStartAndEnd 1 | 30 | 45 float deg/s 3600 | 108000 | 162000 integer arcsec/s
Angular Acceleration: WILL replace Acceleration, specifying with human readable units. This is NOT yet implemented.
38, AngularAcceleration 0.0003 | 0.1 | 0.1? float deg/s2 1 | 360 | 360? integer arcsec/s2
Cartesian Parameters: These affect the onboard kinematics.
39, CartesianSpeed 0.01 | 0.3 | 0.5 meters/s 10000 | 300000 | 500000 integer micron/s
40, CartesianSpeedStart 0 | 0 | 0.5 meters/s 0 | 0 | 500000 integer micron/s
41, CartesianSpeedEnd 0 | 0 | 0.5 meters/s 0 | 0 | 500000 integer micron/s
42, CartesianAcceleration 0 | 0.1 | 0.5 meters/s2 0 | 1000000 | 500000 integer micron/s2
43, CartesianStepSize 0.000001 | 0.00001 | 0.01 meter 1 | 10 | 10000 integer micron
Cartesian Pivot Parameters: The angular speed of rotation around a fixed point by the end effector. The start and ending speeds, and acceleration can also be set. Step Size is the granularity of rotation around a fixed point by the end effector, and is not yet implemented
44, CartesianPivotSpeed 0.00027777 | 30 | 100 float deg 1 | 108000 | 360000 integer arcsec/s
45, CartesianPivotSpeedStart 0 | 0 | 100 deg/s 0 | 0 | 360000 integer arcsec/s
46, CartesianPivotSpeedEnd 0 | 0 | 100 deg/s 0 | 0 | 360000 |integer arcsec/s
47, CartesianPivotAcceleration deg/s2 1 | 10800000 | 10800000 integer arcsec/s2
48, CartesianPivotStepSize deg? ? / ? | arcsec integer
Eye Numbers: Sets which Eye Dexter thinks it is at. Where it is within an eye is calculated with encoder measurements and effectively cannot be set. Takes 5 signed integer arguments where 0 is the circle that contains 0 degrees. See read_from_robot, #EyeNumbers.
49, EyeNumbers 0 | 255 | 512 (5 integers) 0 | 255 | 512 (5 integers)
Commanded Angles: Sets where Dexter thinks it is without actually moving the robot. Takes 5 angles in integer arcseconds. These are the same values that are returned in the robot status under *_AT. See boundaries for limits.
50, CommandedAngles degrees arcsec (5 integers)
Link Lengths: Added 2019/05/29 Sets the lengths of each link in the arm for the onboard kinematics. Parameters:
L1: Base mount to Joint 2 pivot.
L2: Joint 2 pivot to Joint 3 pivot.
L3: Joint 3 pivot to Joint 4 pivot.
L4: Joint 4 pivot to axis of tool interface.
L5: Axis of Joint 4 to end effector (note: this depends on the end effector and is most likely to change).
Note: Order of parameters is L5 to L1 so that if only 1 is specified, it changes L5 vs L1. NEVER change anything but the first number, L5, unless you have actually rebuilt the robot. E.g. if you added an end effector which reached 7.1 inches from the center of joint 5, (instead of 3.25 inches) you might send `S LinkLengths 180340;`
51, LinkLengths meters (5 floats, L5 to L1) For HD: 82551, 50801, 330201, 320676, 228600 microns (5 integers, L5 to L1)
For HDI: 82551, 50950, 307500, 339092, 235200
Raw Encoder Error Limits: Added 2019/04/22 The largest error allowed between the raw encoder reading of position and the expected position for each joint. Part of the status monitor. Will inject a returned error status on the next command and write out and entry with more information to /srv/samba/share/errors.log. Default values set in Defaults.make_ins.
52, RawEncoderErrorLimits deg 0 | 3600 | 1296000 arcsec (5 integers)
Raw Velocity Limits: Added 2019/04/22 The largest velocity allowed between subsequent readings of the raw encoder position. Part of the status monitor. Will inject a returned error status on the next command and write out and entry with more information to /srv/samba/share/errors.log and will switch to open loop mode. Default values set in Defaults.make_ins.
53, RawVelocityLimits 0 | 100 | deg/s 0 | 360000 | 1296000 | arcsec/s (5 integers)
Max Torque: Not yet released, don't use. Maximum Torque before each joint stops trying.
54, MaxTorque
AxisCal: Added 2019/10/10 on StepAngles branch. Set JointsCal and ANGLE_END_RATIO via SetParameter instead of via AxisCal.txt. This allows it to be in the Defaults.make_ins file which then holds all the unique data about each robot. Values are the number of steps per joint rotation and can be calculated as gear ratio times the steps per revolution times the microstepping mode.
;S, AxisCal, -332800, -332800, -332800, -36000, -36000 ;Defaults for Dexter HD
S, AxisCal, -332800, -332800, -332800, -86400, -86400 ;Defaults for Dexter HDI
55, AxisCal Gear_Ratio * Motor_Steps_per_Revolution * Microstepping
Interpolation: Added 2019/10/10. Set interpolation factors for each joint. This defaults to `1 1 1 16 16` for the Dexter 1 and HD and is changed to all 1's for the HDI. Primarily to maintain backwards compatibility; the DexRun.C code will continue to work on the prior version, but can be set to work with the HDI by using this parameter.
56, Interpolation 1 | 1 | 16 sub-ustep per ustep 1 | 1 | 16 sub-ustep per ustep
HomeOffset: Added 2019/10/10. Set an offset for each joint. This defaults to zero. The values are _subtracted_ before any PID movement ('P' or 'C' oplet) and are added back into measured angles or step angles when reporting status. So a positive offset moves the joint in the negative direction. Experimental. [Example](https://github.com/HaddingtonDynamics/Dexter/commit/4c506d60a42ed31d4acc35f74e6f6262ac6a78e5#commitcomment-43499390)
57, HomeOffset N/A 0 | 360000 | 1296000 | arcsec/s (5 integers)
ServoSetX: Since 2020/08/10 to close #94. The parameters are ID Addr Len [Data]:
  • Servo ID: The expected ID number of the servo on the Dynamixel bus
  • Address: The address in the header or ram table in the servo
  • Data/Length: This can either be a single byte of data (which makes ServoSetX work just like ServoSet) or, if the next parameter is specified, then this is the length of the data string
  • Data String: (optional) If specified, this is a string of data. Because 0x00 (nulls), and 0x3B (;) can't pass initial parse, these are esc'd w/ 0x25 (%). And of course, that means the % must be escaped as well. For example: 0x00,0x3B,0x25 would become %00%3B%25 and have a Length parameter of 9 but would end up writing 3 bytes to the servo. Another example: AB%20 would become AB%2520 (the % is replaced with %25) and would have a length of 7 but would actually send 5 bytes.
Examples:
  • S ServoSetX 1 116 12 %64%00%00%00; Move XC-420 servo 1 on Span / J7 to 100
  • S ServoSetX 1 64 1; Turn XC430 torque on
  • S ServoSetX 1 64 3 %01; Turn XC430 torque on
58, ServoSetX ID Addr Len [Data]

Note 1 nbits are a value added to a register every clock cycle for a 128Khz clock such that once it overflows, an action will be taken. Converted automatically by DDE in the socket communications code for the "MaxSpeed", "StartSpeed", and "Acceleration" parameters. The global constant "_nbits_cf" is 7754.73550222 and the values given are multiplied by that constant. This converts degrees / second (or degrees / second / second in the case of Acceleration) into nbits. Setting these values too low with effectively lockup the FPGA as it will take far too long to complete a movement.

Note 2 Frictions can be fractional, but are limited to a range of +-(256 + 1/256). E.g. 1.1 becomes 1 plus a fractional value of 25/256

Clone this wiki locally