Cannot read or write to the Dynamixel's control table

DYNAMIXEL Actuator

XL430-w250, Attempted control with Dynamixel Shield and OpenRB-150

Issue Description

I can’t seem to read or write to the Dynamixel’s control table. I have tried with both the Dynamixel Shield and OpenRB-150 board using example sketch’s from the Arduino library.
I am able to scan the Dynamixel and get the ID and baud rate, but haven’t had any luck with setting goal positions, reading present Voltage, Temperature etc.

Additional Information/Attachments

I have been operating the servos for the last few week and only just ran into this issue this week. I have tried to connect to the Dynamixel Wizard with the OpenRB-150 board but I couldn’t connect the servos.

Sounds bad!

Just to be clear, by “Dynamixel Shield” you meant the Dynamixel Shield library right? Not the physical Dynamixel Shield MKR board + some Arduino MKR board? Also in a previous post, you mentioned that you could not scan your DXLs with the OpenRB-150, but you can do that now?

Do you happen to have a U2D2 or CM-550 so that you can independently check on the XL430?

Also on the OpenRB-150, can you still download plain old “Blink.ino” and it is still working OK?
Have you tried the sketch usb_to_dynamixel.ino on the OpenRB-150 - which turns it into a U2D2 with a maximum baud rate of 1 Mbps, and then use Dynamixel Wizard 2 to see if you can access your Dynamixels?

Were there any compile or download error messages when you use the Arduino example sketches? Can you share your non-working code also?

By Dynamixel shield I mean the shield compatible with the arduino Uno or Mega seen here, DYNAMIXEL Shield. I can only scan the dynamixels using the dynamixel shield, not the OpenRB-150 board.

I’m not sure what you mean by U2D2 or CM-550, so no.

I can upload any arduino sketch fine, I havent gotten any error. The scripts run fine, but I just cant receive or send info to the servos. I have tried the usb_to_dynamixel.ino, but could not connect the servos to the Dynamixel wizard.

Here is the code that I am trying to run:
#include <Dynamixel2Arduino.h>

#define DXL_SERIAL Serial1
#define DEBUG_SERIAL Serial

const uint8_t DXL_ID = 2;

Dynamixel2Arduino dxl(DXL_SERIAL);

int target;
//This namespace is required to use Control table item names
using namespace ControlTableItem;

void setup() {
// put your setup code here, to run once:
DEBUG_SERIAL.begin(115200);
while(!Serial);

dxl.setPortProtocolVersion(2.0);
dxl.begin(1000000);

dxl.torqueOff(DXL_ID);
dxl.setOperatingMode(DXL_ID, OP_VELOCITY);
dxl.writeControlTableItem(VELOCITY_LIMIT, DXL_ID, 1000);
dxl.torqueOn(DXL_ID);

DEBUG_SERIAL.print("ID: "); DEBUG_SERIAL.println(dxl.readControlTableItem(ID, DXL_ID));
DEBUG_SERIAL.print("Acc. Profile: "); DEBUG_SERIAL.println(dxl.readControlTableItem(PROFILE_ACCELERATION, DXL_ID));
DEBUG_SERIAL.print("Acc. Limit: "); DEBUG_SERIAL.println(dxl.readControlTableItem(ACCELERATION_LIMIT, DXL_ID));

DEBUG_SERIAL.print("PWM_LIMIT: "); DEBUG_SERIAL.println(dxl.readControlTableItem(PWM_LIMIT, DXL_ID));
DEBUG_SERIAL.print("PRESENT_PWM: "); DEBUG_SERIAL.println(dxl.readControlTableItem(PRESENT_PWM, DXL_ID));

DEBUG_SERIAL.print("Vel Limit: "); DEBUG_SERIAL.println(dxl.readControlTableItem(VELOCITY_LIMIT, DXL_ID));
DEBUG_SERIAL.print("Goal Velocity: "); DEBUG_SERIAL.println(dxl.readControlTableItem(GOAL_VELOCITY, DXL_ID));
DEBUG_SERIAL.print("Current Velocity: "); DEBUG_SERIAL.println(dxl.readControlTableItem(PRESENT_VELOCITY, DXL_ID));

DEBUG_SERIAL.print("Present Load: "); DEBUG_SERIAL.println(dxl.readControlTableItem(PRESENT_LOAD, DXL_ID));
}

I know that the baud rate and ID are correct since I could scan the servo using the scan_dynamixel sketch with the Dynamixel Shield.

@ajohns10

Thanks for sharing this detailed post. I can see that you are experienced in using Arduino.

I do not see any problem in your shared sketch except for the setting of VELOCITY_LIMIT:

dxl.writeControlTableItem(VELOCITY_LIMIT, DXL_ID, 1000);

1000 is awfully high for the XL430, use 265 as recommended per ROBOTIS e-manual info

image

You said that this XL430 had worked for you before for 1+ week? If you had been using Goal Velocity higher than 265 for a while for this particular XL430, I am not sure what it did to this XL430. ROBOTIS folks may have a better idea (i.e. @Jonathon).

Just to check, right now, when you connect this XL430 to the Dynamixel Shield (and what Arduino Controller are you using with this setup?). Can you still access this DXL OK? This is to check that your DXL is still working NOW. If you do, then I am stomped!

Especially, when you mentioned that the sketch usb_to_dynamixel did not work with Dynamixel Wizard for you - assuming that you exited from Arduino completely, before running Dynamixel Wizard via the same COM Port?

I am going to try your setup tomorrow on my OpenRB-150 and XL430 and will update you further.

@ajohns10

When I tried to run your code on my OpenRB-150 powered and controlled via the standard setup as shown on the ROBOTIS e-manual:

image

I had no problem compiling your code but downloading it via USB Port was a problem.

But I think that I have figured out your problem and that your OpenRB-150 must have been from an early batch used for Beta Testers which had some issues between its USB Port and when using DXLs that require 12 V (like XL430). I discovered this problem some months back, and I posted here

In that post, Will Son proposed one solution, but I prefer to power my DXLs separately at 12V and control them via the OpenRB-150 set at 5 V. See my setup below:

Setup_2_12_23

You can see that the OpenRB-150 Jumper is set on 5V (using Power from USB Port ), and I do not use the Power Terminal Block on the OpenRB-150. I used a separate Power Supply (via a U2D2 Power Hub) to power my DXLs at 12 V. From the U2D2 Power Hub to the XL-430s and between the DXLs, regular X3P cables are used. Please make sure to note that the last X3P cable (that connects to the X3P Hub on the OpenRB-150) has its VDD Line cutoff (hidden inside that white tape area). Essentially, the OpenRB-150 controls the DXLs at 5V and this Control Circuit is separate from the 12V Power Circuit of the DXLs, but both circuits have the same Ground.

Then your code worked fine for my setup, but I did reduce VELOCITY_LIMIT to 265:

TestRun

If all this is a hassle to you and you recently bought your OpenRB-150 from ROBOTIS, you should try to ask for a replacement so that you get one from the regular commercial batch which does not have this problem. See setup below with a commercial OpenRB-150 and I have verified that your code worked fine on this commercial setup (with no cut-up X3P cable and the Jumper is on the VIN-DXL setting).

New_SetUp

This “commercial” one has a QC tag number 2234. Which QC number do you have on yours OpenRB-150?