...
More than 360 degrees in joint mode
2018-07-05 05:39:14 mauriciopena

Hi Robotis.


I have an XL430-W250-T and I need to control the servo over 0 ~ 800 degrees or more, not only 0 ~ 360, in joint mode. It is possible? If so, how?


Thanks!

Mauricio


2018-07-05 05:39:14
mauriciopena
2018-07-05 06:07:00 Kurt

I have not tried it, but have you tried using extended position control mode? http://emanual.robotis.com/docs/en/dxl/x/xl430-w250/#operating-mode11


2018-07-05 06:07:00
Kurt
2018-07-05 09:35:55 Will Son

Hello,


You can set Operating Mode to "4" which will setup your XL430 Dynamixel to Extended Position Control Mode(AKA Multi-turn Mode).
Please be aware that in Extended Position Control Mode, you cannot configure the Minimum and Maximum Position Limit.

Thank you!

2018-07-05 09:35:55
Will Son
2018-07-06 04:29:00 Mauricio de O. Pena

Hi!


I'm trying to do it on Arduino IDE. So:


Mode 3 (joint mode) works:

dxl_wb.jointMode(DXL_ID);

dxl_wb.goalPosition(DXL_ID, 0);  // values between 0 - 4095



Mode 4 do not accept values above 4095:

dxl_wb.jointMode(DXL_ID);

dxl_wb.itemWrite(DXL_ID, "Operating_Mode", 4);  //  multi-turn mode
dxl_wb.goalPosition(DXL_ID, 0); 



I think there is not a specific function similar to goalPosition in mode 4...


Thanks!

Mauricio


2018-07-06 04:29:00
Mauricio de O. Pena
2018-07-06 09:17:21 Kurt

My guess is that dxl_wb.itemWrite(DXL_ID, "Operating_Mode", 4);  //  multi-turn mode

failed to operate as this tries to change values in the EEPROM area, which can only be done when the torque is not enabled. 


You might be able to do it something like:

dxl_wb.jointMode(DXL_ID);

dxl_wb.torque(DXL_ID, false);

dxl_wb.itemWrite(DXL_ID, "Operating_Mode", 4);  //  multi-turn mode

dxl_wb.torque(DXL_ID, false);

dxl_wb.goalPosition(DXL_ID, 0); 

 Or maybe you can combine the calls to maybe something like:

dxl_wb.torque(DXL_ID, false);

dxl_wb.setPositionControlMode(DXL_ID);

dxl_wb.itemWrite(DXL_ID, "Operating_Mode", 4);  //  multi-turn mode

dxl_wb.torque(DXL_ID, false);

dxl_wb.goalPosition(DXL_ID, 0); 

 And I would also assume you would not need to do it more than once as this is setting EEPROM setting

2018-07-06 09:17:21
Kurt
2018-07-06 11:16:25 Mauricio de O. Pena

Hi folks.


I found the answer: "current mode", as you can see in https://github.com/ROBOTIS-GIT/OpenCR/blob/master/arduino/opencr_arduino/opencr/libraries/OpenCR/examples/08.%20DynamixelWorkbench/n_Current/n_Current.ino


I'm not sure why its called that but... job done.


Thanks!!!


2018-07-06 11:16:25
Mauricio de O. Pena
2018-07-06 11:54:25 Will Son

Hi Mauricio,


I need to check the details about the code you used(Current Mode) because XL430 does not support current control mode.

It may seem the Dynamixel is working now, but your code might contain unexpected bug so please be aware of this when using.

I'd recommend Kurt's example for now.

I'll update this thread when more information is acquired.

Thank you.

2018-07-06 11:54:25
Will Son
2018-07-06 13:06:13 Mauricio de O. Pena

Hi Will Son.


Please take a look at http://emanual.robotis.com/docs/en/dxl/x/xl430-w250/#goal-position116 It shows current-mode AND extended mode. But I've no idea whats is the difference. 


Kurts example do not work. It seems that dxl_wb.torque and dxl_wb.setPositionControlMode are private methods.



Thanks!

Mauricio

2018-07-06 13:06:13
Mauricio de O. Pena
2018-07-06 15:16:36 Will Son

Please keep using below GitHub Issue thread for this question.

https://github.com/ROBOTIS-GIT/OpenCR/issues/112

Thank you.

2018-07-06 15:16:36
Will Son
Reply
웹에디터 시작 웹 에디터 끝