Based on contributions by dimitar.prisadnikov.
Doosan robots are programmed in DRL, a Python-based scripting language. This article covers the basic motion commands (movej, movel) and their asynchronous counterparts (amovej, amovel), which is the first thing you need to move the robot at all.
What you need
- A Doosan robot, or a RoboDK simulation of one
- A laptop with DRL Studio (Homberger Hub) installed
- Familiarity with joint coordinates (
posj) and Cartesian coordinates (posx) — see the motion concepts guide if these are new to you
Safety: the code examples below use joint and Cartesian coordinates that, depending on your robot’s placement and surroundings, could cause a collision. When running any new movement for the first time, set the speed to a low value and keep your hand near the emergency stop. All examples assume the robot starts from its home position.
Steps
1. Understand synchronous vs. asynchronous movement
Doosan movement commands come in pairs: movej/amovej, movel/amovel, movejx/amovejx, movec/amovec. The a-prefixed versions are asynchronous: the program continues executing the next line immediately, without waiting for the robot to finish moving. The non-a versions block until the move is complete. That is the only functional difference between the two.
2. Move in joint coordinates with movej
# get the current pose of the robot in joint coordinates
current_posj = get_current_posj()
# create a new pose based on the current one
target_posj = addto(current_posj, [0, 0, 135, 45, 45, 0])
# move to the target pose
movej(target_posj, v=20, a=100)
# log a message
tp_log(str("What is the robot doing as this message appears?"))
# move back to the starting pose
movej(current_posj, v=20, a=100)
The current position is read as posj, then addto() creates a new pose by adding offsets to it — here joints 3, 4 and 5 are increased by 135°, 45° and 45° while the rest stay unchanged. The robot moves to the new pose, then back. Because movej is synchronous, the tp_log message only appears after the first move has fully finished.
3. Move in a straight line with movel
# get the current pose in cartesian coordinates
current_posx, _ = get_current_posx()
# transform the current pose by increasing its Y value by 200mm
target_posx = trans(current_posx, posx(0, 200, 0, 0, 0, 0))
# move linearly to the target pose
movel(target_posx, v=20, a=100)
# move linearly back to the starting pose
movel(current_posx, v=20, a=100)
trans() creates a new Cartesian pose by applying an offset to the current one — here the Y value increases by 200 mm relative to the robot base (the default reference frame). movel moves the tool center point there in a straight line, then back.
4. Move without blocking, with amovej
# get the current pose of the robot in joint coordinates
current_posj = get_current_posj()
# create a new pose based on the current one
target_posj = addto(current_posj, [0, 0, 135, 45, 45, 0])
# move to the target pose async
amovej(target_posj, v=20, a=100)
# log a message
tp_log(str("What is the robot doing as this message appears?"))
This is the same move as step 2, but asynchronous. The tp_log message is printed as soon as the move starts, not after it finishes, because the program doesn’t wait for amovej to complete before moving on.
Troubleshooting
- Cobots have physical limits. Joint movements (
movej) are generally reliable. Other move types can run into singularities, which can cause unexpected or erratic motion — test any newmovel/movecpath at low speed first. movej,moveland related functions accept more parameters than shown here (reference coordinates, reach time, blending radius, etc.). Only pose, velocity (v) and acceleration (a) are covered in this article — check the Doosan Robotics Programming Manual for the rest.
Check: some other Doosan how-tos call these same functions with vel=/acc=instead ofv=/a=(see How to rotate the Doosan robot tool and avoid servo lock errors). Both may work as aliases in your DRL Studio version, but if you get a parameter error, check the autocomplete/manual for the exact keyword names your firmware version expects.
Related
- How to rotate the Doosan robot tool and avoid servo lock errors
- How to set up safety area (space) limits on a Doosan robot
Rewritten and consolidated (Sept 2026) from the original student how-to’s: Movements on a Doosan robot.