OPEN-RB 150 ROS Interface

Hi, I’m building a robot with Pi, OpenRB 150 and Dynamixel motor.
I have communicated Pi with laptop but i encountered a problems: I can’t interface ROS with OpenRB.
When I use Rosserial, it have same issue no matter what i change like baudrate, reinstall, arduino_hardware:
rosrun rosserial_arduino serial_node.py /dev/ttyACM0 _baud:=9600
[INFO] [1744858121.813781]: ROS Serial Python Node
[INFO] [1744858121.818576]: Connecting to /dev/ttyACM0 at 9600 baud
[INFO] [1744858123.926246]: Requesting topics…
[ERROR] [1744858138.929707]: Unable to sync with device; possible link problem or link software version mismatch such as hydro rosserial_python with groovy Arduino
I think rosserial might not work on OpenRB and I want to use Dynamixel SDK on OpenRB but I don’t know how to use because dynamixel git use U2D2.
Help me how can I fix or use SDK to interface OpenRB with ROS.

First I have never used ROS myself, but as far as OpenRB-150 is concerned, there is an example Arduino Sketch named “usb_to_dynamixel.ino” (available after you installed the OpenRB-150 in the regular Arduino IDE of course). Once you compiled and downloaded this sketch to the OpenRB-150, it will act like a “little brother” to the U2D2 but it can only go to 1 Mbps baud rate.

Then you can concentrate on installing and using DXL SDK + ROS on the Pi, which then just sees the OpenRB-150 as another ttyUSB or ttyACM Port.

Recently ROBOTIS released some new version of the DXL SDK for ROS 2

But i don’t have U2D2 Hub. I put openrb 150 straight to USB-C of Pi, can Dynamixel SDK still work?

Once you converted the OpenRB-150 into a mini U2D2 using the mentioned sketch. You can connect any USB port A on the RPi via a USB cable to the USB C connector of the converted OpenRB-150. This USB cable needs to be of a good quality capable of data transfer and not just power charging only.

Then on the RPi, if you use dmesg it should discover the OpenRB-150 as “ttyUSBx” or “ttyACMx” (like a real U2D2). You can verify this also using DXL Wizard 2 on Windows or Linux.

As far as powering your DXLs, you better use the Terminal Board input and put the jumper to VIN/DXL as shown below:

So actual connections can be

or

The actual DXLs still connect to the 3-pin DXL connectors on the OpenRB-150 as normal.

Study the details in the ROBOTIS e-manual at this link

Essentially the OpenRB-150 becomes a mini U2D2 + DXL Power Hub!

One last thing, once you got all the above working, you need to adjust the USB Latency Timer on the RPi side (inside DXL SDK) to 1 ms to get the maximum communication throughput. See link below.

rosservice call /get_position “id: 1”
position: 2628
rostopic pub -1 /set_position dynamixel_sdk_examples/SetPosition “{id: 1, position: 2048}”
publishing and latching message for 3.0 seconds
After I upload usb_to_dynamixel on OpenRB and change device name as ttyACM0, baudrate, ID and control table of dynamixel motor, seem dynamixel SDK worked.
I can use getPosition to get Dynamixel position, when I change motor by hand, position work right.
But I can’t setPosition. Terminal work exactly like youtube tutorial but my motor don’t move. I changed battery input but it still don’t work.

Glad you are making progress. But now you are getting into the ROS part and I don’t use ROS so I can’t help much now.
Can you temporarily use just plain DXL SDK to see if everything works OK?

The reason your motor isn’t moving is most likely because the torque is OFF.
Try turning torque ON with this command

rosservice call /torque_enable "id: 1 torque_enable: 1"

After that, try set_position again your motor should move!
If it still doesn’t work, let me know