I still have a few Arbotix boards sitting around here somewhere, but I don't use them for much of anything these days...
For low end stuff, would simply use an OpenCM9.04 board... Or pull out one of my USB2AX adapters... To run Robotis software...
Now back to Arbotix. Which version of Arduino are you using? 1.0.4? Note: I personally don't do much (anything) with this version of stuff any more... I only have the Arduino 1.8.x installed and typically only use 1.8.8...
A long time ago, Trossen had a beta version of stuff installed for the 1.6.x releases that works on 1.8.x... That started from my updated version... A member Tician made a boards installer, for the stuff... You can find more in the thread: http://forums.trossenrobotics.com/sh...2249#post82249
Again I have not use Arbotix Boards with Roboplus... or the like so not sure how compatible the Dxl Manager is with Arbotix stuff, it might be able to see some servos running the ROS sketch... But I have my doubts about it handling the firmware upgrades, as I believe the upgrades require the DXL speed to change on the fly and I don't think there is code in place to handle this on these boards/sketch.
That is the sketch would need to know that the USB system told the FTDI that it now wants a baud rate of X and then the sketch would see this and change the DXL Bus that speed. I have done this with Teensy procesors by PJRC, but not with AVR talking through FTDI.
So if I were stuck, I would probably try things like:
Run a sketch to try to find the servo: like I have my ax12test program...
https://github.com/KurtE/AX12_Test
With this there is a simple loop that tries to find any servo at the current baud rate: I think this is command: 5<cr>
Code:
void FindServos(void) {
g_count_servos_found = 0;
int w;
DBGOut_Serial.println("\nSearch for all servos");
DBGOut_Serial.println("Begin Protocol 1: ");
for (int i = 0; i < 254; i++) {
w = ax12GetRegister(i, AX_PRESENT_POSITION_L, 2 );
if (w != (int) - 1) {
g_servo_protocol[i] = SERVO_PROTOCOL1;
g_count_servos_found++;
DBGOut_Serial.print(i, DEC);
DBGOut_Serial.print(" - ");
DBGOut_Serial.println(w, DEC);
} else {
g_servo_protocol[i] = SERVO_NOT_FOUND;
}
delay (5);
}
DBGOut_Serial.println("Done");
DBGOut_Serial.println("Begin Protocol 2: ");
for (int i = 0; i < 254; i++) {
uint32_t model_firmware = dxlP2Ping(i);
if (model_firmware) {
if (g_servo_protocol[i] == SERVO_PROTOCOL1) {
DBGOut_Serial.println("Found both Protocol 1 and Protocol 2 Servo with same ID");
} else {
g_count_servos_found++;
}
g_servo_protocol[i] = SERVO_PROTOCOL2;
DBGOut_Serial.print(i, DEC);
DBGOut_Serial.print(", Model:");
DBGOut_Serial.print(model_firmware & 0xffff, HEX);
DBGOut_Serial.print(", firmware: ");
DBGOut_Serial.print(model_firmware >> 16, HEX);
w = dxlP2GetRegisters(i, DXL_X_PRESENT_POSITION, 4 );
DBGOut_Serial.print(" : ");
DBGOut_Serial.println(w, DEC);
}
delay (5);
}
DBGOut_Serial.println("Done");
}
I believe there is a command: b <baud rate><cr>
I believe this is currently setup to use my own version of the Arbotix libraries BioloidSerial... Also up on my github...
But it is sort of cryptic on commands...
I have versions that run using openCM/CR boards, that simply loops over several different baud rates trying to query each servo ID to see if it gets a match...
If you set the baud rate to 16 for 115200, the actual generated baud is probably about: 117647 which is off by something like 2% and not sure what the Arbotix baud rate is when you try 115200... I remember it is off by a reasonable amount... Which is why people run 8 bit avr boards at 14.77.... If they need 115200. The question is, if these two boards are off by the same amount as maybe both are avr chips... But if they choose to go in oposit directions than may have issues talking...
Sorry not much help
Bookmarks