Dynamixel Wizard vs RoboPlus Manager for Bioloid Premium CM-530 Dynamixel Scan

Hello! I am new to this forum and I would like to ask if it is correct that I would need to use the U2D2 whenever Dynamixel Wizard is used to scan the AX-12A on my Bioloid Premium please?! I tried both the RoboPlus Manager and the Dynamixel Wizard software but only the RoboPlus Manager can show all the 18 AX-12A in the Bioloid Premium via the USB/BT connection between CM-530 of Bioloid Premium and my PC but not Dynamixel Wizard. Therefore, I am wondering if it is because U2D2 will be needed if I want to use the Dynamixel Wizard to scan the AX-12X of the Bioloid Premium?! Or if I am still missing some other points please. Thanks & Regards, Robert

You can use both Manager and DXL Wizard at the same time on your Premium robot.

From the PC, Manager can be using one USB COM Port + BT to access the CM-530 and the DXLs.

On the PC’s second USB COM Port, you can hook up the U2D2 via a USB Micro cable.

Then from the U2D2’s DXL 3-pin TTL connector, you can use a Convertible X3P cable such as this one:

and connect it between the U2D2 and an available DXL 3P connector on the Premium such as at the end of either arm of the Premium. And then you can use DXL Wizard tool to scan all the DXLs on the Premium robot as if you were using Manager Tool. If Wizard is missing some DXLs it would mean that some 3P cables are loose somewhere.
The key point to note is that the U2D2 does not provide power to the DXLs, it can only scan the DXLs. In this case the battery on the Premium powers the CM-530 and all the DXLs for DXL Wizard to work via U2D2.

Thank you very much @roboteer! So I do need the U2D2 to use the Dynamixel Wizard / SDK no matter on Windows / Ubuntu then, correct? But why not RoboPlus Manager pls? Or it is not due to the RoboPlus Manager sending the scan request but the CM-530 FW sending it back automatically to RoboPlus Manager during boot-up pls? I just placed the order of U2D2 and hope to receive it to try out for my school project then. Thanks again!

If you want to control your Premium robot directly from the PC/SBC via Windows/Ubuntu by way of the DXL SDK then you are on the right track with the U2D2 and you can control the DXLs directly - without the need to use the MANAGER tool and the CM-530.

The MANAGER tool is designed to work with ROBOTIS Controllers such as CM-530/550/904 as an entry level DXL Managing Tool. You can also use the more advanced DXL Wizard with U2D2 to do much more beyond the MANAGER tool.

As you want to control a “Humanoid” robot via DXL SDK and U2D2, this approach requires much more difficult programming techniques for “walking” and “moving the arms”, essentially “MOTION PROGRAMMING” as ROBOTIS calls it. You will find that the CM-530 and the TASK V3 tool will still be very useful to use to create appropriate MOTION files via a PC first. Then you can take those MOTION files and convert them into C++/Python data arrays to be used via the DXL SDK + U2D2.

If you are a beginner in using the TASK V3 tool for MOTION PROGRAMMING, you can check out my book about the MINI robot which is a “smaller” version of the Premium robot to learn about the TASK V3 tool

https://www.amazon.com/Programming-Guide-ROBOTIS-MINI-Ngoc/dp/0999391836

And in my book for the ENGINEER kit, I show how to convert those MOTION files from TASK V.3 into C++/Python MOTION Arrays to be used by the DXL SDK on a PC/RPi4B.

https://www.amazon.com/Projects-Guide-ROBOTIS-ENGINEER-Combined-ebook/dp/B09KQCH2FV

I am assuming that you already have a Premium robot to work from already?

It is probably best if you can tell me what is the overall goal for your project, and then I can propose some feasible approaches.

You can also watch my Youtube video discussing various communication and control options between CM-530 and RPi-4B to get an idea of the issues that you need to think about.

Thanks again @roboteer for all the info! I just watched the youtube and it’s quite similar to what my prof asked me to consider for my project. He was more into asking me to learn the ROS2 Jazzy with Ubuntu 24.04 on RPI5 to control the TypeA but I do have concern to bypass the CM-530 completely as I don’t have good knowledge on The .mtn and .tsk files yet. However, I do wanna learn if I can use some of the default .tsk or .mtn files to see if I can convert them into the gazebo&rviz motion display before pushing into the real robot. Do you think that it’s feasible if I have just about a month to work on this project pls? I don’t have any extra AX-12A but yes, I do have the TypeA with the default .tsk/.mtn already and I can try to send the RCONN cmds via serial comm tomorrow while waiting for the RPI5 and U2D2. My concern is if the Jazzy ROS2 and Ubuntu 24.04 would be a stable platform to work with as I find that the limited info of TypeA from github are based on much older ROS and incomplete?! I also have a separate Pi Zero2 with voice cmd module working and the Pi AI Camera which is not working with the Ubuntu version I tried so far but I have experience with the Pi2 Camera on RPi4 for object detection long time ago. Thanks a lot and looking forward to receiving your advices!

As far as I can tell, you are trying to use a Premium Humanoid equipped a Pi2 Camera, and you have only 1 month to work on this project. So my suggestions are as follows:

  1. The Premium already has lots of TASK and MOTION examples for the Premium that you can modify for your needs so I’ll stay with the CM-530 and TASK+MOTION.

  2. If you only need to use a video camera, I have reservations about using the RPi4 or RPi5 because they are “heavy” so you will have issues trying to keep balance for your Premium, when it needs to walk. Because the robot’s CG will be shifted quite a bit due to the weights of the RPi modules, and then you will need to modify the MTN file and several Actuator Offsets of impacted AX-12A. So my suggestion is to use the Arduino Board OpenRB-150 + smart camera such as Pixy2 or HuskyLens if you just need to find objects of specific colors. These equipment are lighter and you can get rid of the Premium’s head to install them on its shoulder, as this configuration will minimize CG shift.

You can check the free Amazon Kindle sample of my Arduino book to have an idea how to use the RB-150

https://www.amazon.com/Using-ARDUINO-ROBOTIS-Systems-Ngoc-ebook/dp/B0BPXGQ6YX

  1. The next issue is about communications between RB-150 and CM-530. As the CM-530 is a ROBOTIS proprietary controller, it will communicate with ROBOTIS Hardware only, i.e. BT-410 modules. The following post has all the details for the reasons and possible solutions.
  1. The last issue is about powering the RB-150 and its camera. I would suggest tapping into the Premium’s battery and use a Voltage Converter to drop the 12V to 5V to power the RB-150, and the lightest one that I use is described at this post

You can power the RB-150 at 12 V also, unless you want to use a pan-tilt module for the camera using the small actuators XL-330s (which operate at 5V).

Lastly, as you are affiliated with a University, you should be able to check Springer-Link via the university’s library for this book which should be free-access for you.

https://www.amazon.com/Exploring-Robotics-ROBOTIS-Systems-Thai-ebook/dp/B074GXWPZ8

This one is about CM-530 and TASK/MOTION/MANAGER tools from back in 2017.

Thanks again for all the information @roboteer! In fact, my prof got some info and asked me to look into the use of OpenCR to replace the CM-530 but I think that it’s quite risky to try the big changes within a month. Therefore, I will have to discuss with him more later. Thanks!

Hello @roboteer , I have received the U2D2 part and it can detect the Dynamixels via CM-530 OK with Dynamixel Wizard 2.0 but when I tried with my older Ubuntu 18.04 Dynamixel Wizard 2.0, 4 IDs became unknowns. Not sure why yet and need to retry later. However, I would like to ask if the LiPo battery of the Bioloid Premium is supposed to be drained quickly please. I bought this new LiPo battery 2 or 3 weeks ago because the old ones were so swollen and I dared not to use anymore. But I find that even with this new one after full charge, after a short time, I would already here the beep sounds like attached. This means, low battery, right?! Or I got a faulty battery?! Thanks.

The Premium has 18 AX-12s to operate so its LiPo battery can only offer about 15-20 minutes of play. When I was developing projects I had to use the regular power supply, i.e. the Premium dragged along a heavy cable so I needed to hold up it with some kind of scaffolding You can also prepare several LiPo batteries in advance. The LiPo for the Engineer kit or the TB3 kit last longer but they are slightly heavier too so the CG shift will need to be compensated for.

When the battery is low, the AX12 in the daisy chain and farthest away from the CM-530/battery receive less voltage so they would start to behave “funny”. Or the various 3P cables are getting loose or squeezed somewhere

Oh, I see. So it is ok for me to plug in power to the CM-530 on top of the battery connection to make it last longer still? I used to have 3 batteries but all got too old and I have now only 1. I should have bought more then. Thank you very much and have a nice weekend!!

You really need to get used to reading the ROBOTIS e-manual information for the operation of the CM-530, so that you do not get the wrong ideas about how ROBOTIS hardware and software should work, for example:

When you use the SMPS, it DOES NOT CHARGE the Battery Pack at all.

Instructions for charging the LiPo battery is at this link

Thanks again for the info @roboteer! Yes, it’s not easy for me to understand well. I finally found out yesterday that the beep sound would be due to overloading the robot with both the battery and the SMPS connection together?! I found that it would be easier if I remove the battery and no SMPS connection but only with the U2D2 power hub like the attached photo, it would be easier to work with. Or if I don’t use the U2D2 power hub but the SMPS connection and the DXL connector of CM-530 as in the other photo, it would be good too. Thanks!

However, after this power and U2D2 connection issue is resolved, I realized that there’s no more Dynamixel Wizard support for ROS2 on Ubuntu 24.04! And even the Dynamixel Workbench would not work for ROS2. Therefore, I am trying hard to figure out how to use the other hardware_interface package but no direct information for Bioloid type of usage yet?! Thanks

Good Find! In this configuration, the PC, U2D2 and AX-12As share into the same Ground, so everything should work smoothly.

The Premium was first released back in 2009, and ROS 1 was released around 2010. So you will be the first user to try to use the Premium with ROS 2 in 2025. I don’t think that you can find much help for your project from any where!

You may be able to use just the plain Dynamixel SDK on Ubuntu 24.04

There is a ROBOTIS video showing how to make ROS 2 work with an XL-430 (which uses DXL Protocol 2) while the AX-12A uses DXL Protocol 1.

So try to see if you can adapt this video to just ONE AX-12A to see what it can do?

There was one user who could not make it work for AX-18A (which is on Protocol 1)

Update. I just tried that video tutorial myself on Ubuntu 24.04. It is outdated. Could not get past the GIT step.

Thanks again, @roboteer! It sounds like that there is no good support for controlling the AX-12A or any other older DXL Protocol 1.0 dynamixel from either the Dynamixel_SDK or dynamixel_hardware_interface while the older Dynamixel Wizard 2.0 is not supported on ROS2, so I am totally stuck now?! Today I tried a lot with the dynamixel_hardware_interface and I got to the same issue as the one you found out. And when I looked into: dynamixel_hardware_interface/param/dxl_model/dynamixel.model at main · ROBOTIS-GIT/dynamixel_hardware_interface · GitHub , there is not any AX model included with the needed number to work with and so it would return that status packet issue! There is also no protocol_version parameter to choose between 1.0 and 2.0 in this git repo and so it’s probably for DXL Protocol 2.0 only too?! I haven’t got time to look into the Dynamixel_SDK yet but I am afraid that it may be the same…Not sure if any other way to bypass the issue now?! Thanks!

So far I have not used ROS 2 so I can’t help you much there. But using plain DXL SDK or Arduino will work for AX-12A. You will need to adjust for Protocol 1.0 and various Control Tables items for AX-12 vs XL-430 because they are different. Have you looked at the e-manual for their Control Tables yet?

@RobertKwan
As an example for using DXL SDK for an AX-12A, please read below.

I am using a Windows 11 PC, Python 3.11 and DXL SDK 3.8.3. When you install DXL SDK 3.8.3 from ROBOTIS, they created a bunch of example programs, for example at this location: D:\DynamixelSDK\DynamixelSDK-3.8.3\python\tests\protocol1_0 In this folder, there is a program read_write.py designed for MX actuators. So I revised it so that it now uses the Control Table of AX-12A.

import os

if os.name == 'nt':
    import msvcrt
    def getch():
        return msvcrt.getch().decode()
else:
    import sys, tty, termios
    fd = sys.stdin.fileno()
    old_settings = termios.tcgetattr(fd)
    def getch():
        try:
            tty.setraw(sys.stdin.fileno())
            ch = sys.stdin.read(1)
        finally:
            termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
        return ch

from dynamixel_sdk import *                    # Uses Dynamixel SDK library

# Control table address
ADDR_AX_TORQUE_ENABLE      = 24               # Control table address for AX-12A
ADDR_AX_GOAL_POSITION      = 30
ADDR_AX_PRESENT_POSITION   = 36

# Protocol version
PROTOCOL_VERSION            = 1.0               # See which protocol version is used in the Dynamixel

# Default setting
DXL_ID                      = 1                 # Dynamixel ID : 1
BAUDRATE                    = 1000000           # Dynamixel default baudrate : 57600
#DEVICENAME                  = '/dev/ttyUSB0'    # Check which port is being used on your controller
DEVICENAME                  = 'COM11'           # ex) Windows: "COM1"   Linux: "/dev/ttyUSB0" Mac: "/dev/tty.usbserial-*"

TORQUE_ENABLE               = 1                 # Value for enabling the torque
TORQUE_DISABLE              = 0                 # Value for disabling the torque
DXL_MINIMUM_POSITION_VALUE  = 0           # Dynamixel will rotate between this value
DXL_MAXIMUM_POSITION_VALUE  = 1023            # and this value (note that the Dynamixel would not move when the position value is out of movable range. Check e-manual about the range of the Dynamixel you use.)
DXL_MOVING_STATUS_THRESHOLD = 20                # Dynamixel moving status threshold

index = 0
dxl_goal_position = [DXL_MINIMUM_POSITION_VALUE, DXL_MAXIMUM_POSITION_VALUE]         # Goal position


# Initialize PortHandler instance
# Set the port path
# Get methods and members of PortHandlerLinux or PortHandlerWindows
portHandler = PortHandler(DEVICENAME)

# Initialize PacketHandler instance
# Set the protocol version
# Get methods and members of Protocol1PacketHandler or Protocol2PacketHandler
packetHandler = PacketHandler(PROTOCOL_VERSION)

# Open port
if portHandler.openPort():
    print("Succeeded to open the port")
else:
    print("Failed to open the port")
    print("Press any key to terminate...")
    getch()
    quit()


# Set port baudrate
if portHandler.setBaudRate(BAUDRATE):
    print("Succeeded to change the baudrate")
else:
    print("Failed to change the baudrate")
    print("Press any key to terminate...")
    getch()
    quit()

# Enable Dynamixel Torque
dxl_comm_result, dxl_error = packetHandler.write1ByteTxRx(portHandler, DXL_ID, ADDR_AX_TORQUE_ENABLE, TORQUE_ENABLE)
if dxl_comm_result != COMM_SUCCESS:
    print("%s" % packetHandler.getTxRxResult(dxl_comm_result))
elif dxl_error != 0:
    print("%s" % packetHandler.getRxPacketError(dxl_error))
else:
    print("Dynamixel has been successfully connected")

while 1:
    print("Press any key to continue! (or press ESC to quit!)")
    if getch() == chr(0x1b):
        break

    # Write goal position
    dxl_comm_result, dxl_error = packetHandler.write2ByteTxRx(portHandler, DXL_ID, ADDR_AX_GOAL_POSITION, dxl_goal_position[index])
    if dxl_comm_result != COMM_SUCCESS:
        print("%s" % packetHandler.getTxRxResult(dxl_comm_result))
    elif dxl_error != 0:
        print("%s" % packetHandler.getRxPacketError(dxl_error))

    while 1:
        # Read present position
        dxl_present_position, dxl_comm_result, dxl_error = packetHandler.read2ByteTxRx(portHandler, DXL_ID, ADDR_AX_PRESENT_POSITION)
        if dxl_comm_result != COMM_SUCCESS:
            print("%s" % packetHandler.getTxRxResult(dxl_comm_result))
        elif dxl_error != 0:
            print("%s" % packetHandler.getRxPacketError(dxl_error))

        print("[ID:%03d] GoalPos:%03d  PresPos:%03d" % (DXL_ID, dxl_goal_position[index], dxl_present_position))

        if not abs(dxl_goal_position[index] - dxl_present_position) > DXL_MOVING_STATUS_THRESHOLD:
            break

    # Change goal position
    if index == 0:
        index = 1
    else:
        index = 0


# Disable Dynamixel Torque
dxl_comm_result, dxl_error = packetHandler.write1ByteTxRx(portHandler, DXL_ID, ADDR_AX_TORQUE_ENABLE, TORQUE_DISABLE)
if dxl_comm_result != COMM_SUCCESS:
    print("%s" % packetHandler.getTxRxResult(dxl_comm_result))
elif dxl_error != 0:
    print("%s" % packetHandler.getRxPacketError(dxl_error))

# Close port
portHandler.closePort()

You need to compare the ADDRESSES used in this code to those listed in the Control Table of the AX-12A. You’ll see that they matched.

I run my Python code from a Developer Command Prompt in Windows 11:

Below is a video clip of my set up and runtime performance of my AX-12A (with U2D2 and its Power Hub).

So ones can use the plain DXL SDK with AX-12A fine. But as you found out, ROS 2 Jazzy only likes Protocol 2.0 actuators.

Thank you very much @roboteer! Yes, I was looking into that last night too but somehow it didn’t work well when I tried to write/read to the goal & present position as it gave Angle limits errors. I think that the problem is that I don’t know what limits I need to set for each dynamixel in the Bioloid Premium for safe access?! Anyway, I spent more time to investigate and I finally got ping all 18 AX-12A like this:

And also able to access the very first one like this: