Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Doxyfile
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ PROJECT_NAME = "DynamixelSDK c++"
# could be handy for archiving the generated documentation or if some version
# control system is used.

PROJECT_NUMBER = 4.0.2
PROJECT_NUMBER = 4.0.3

# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
Expand Down
5 changes: 5 additions & 0 deletions ReleaseNote.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Dynamixel SDK Release Notes

4.0.3 (2025-12-17)
------------------
* Dynamixel Easy SDK supports Linux SBC environments, Linux 32-bit platforms, and ROS 2 based build and deployment workflows
* Contributors: Hyungyu Kim

4.0.2 (2025-11-24)
------------------
* Easy SDK Python update
Expand Down
24 changes: 21 additions & 3 deletions c++/build/linux32/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,12 @@ SYMLINK = ln -s
MKDIR = mkdir
CC = gcc
CX = g++
CCFLAGS = -O2 -O3 -DLINUX -D_GNU_SOURCE -Wall -c $(INCLUDES) $(FORMAT) -fPIC -g
CXFLAGS = -O2 -O3 -DLINUX -D_GNU_SOURCE -Wall -c $(INCLUDES) $(FORMAT) -fPIC -g
FORMAT = -m32
CONTROL_TABLE_PATH_FLAG = -DCONTROL_TABLE_PATH=\"$(INSTALL_ROOT)/share/dynamixel_sdk/control_table\"
CCFLAGS = -O2 -O3 -DLINUX -D_GNU_SOURCE -Wall -c $(INCLUDES) $(FORMAT) -fPIC -g $(CONTROL_TABLE_PATH_FLAG)
CXFLAGS = -O2 -O3 -DLINUX -D_GNU_SOURCE -Wall -c $(INCLUDES) $(FORMAT) -fPIC -g $(CONTROL_TABLE_PATH_FLAG)
FORMAT = -m32 -std=c++17
INCLUDES += -I$(DIR_DXL)/include/dynamixel_sdk
INCLUDES += -I$(DIR_DXL)/include

#---------------------------------------------------------------------
# Required external libraries
Expand All @@ -60,6 +62,11 @@ SOURCES = src/dynamixel_sdk/group_bulk_read.cpp \
src/dynamixel_sdk/protocol1_packet_handler.cpp \
src/dynamixel_sdk/protocol2_packet_handler.cpp \
src/dynamixel_sdk/port_handler_linux.cpp \
src/dynamixel_easy_sdk/connector.cpp \
src/dynamixel_easy_sdk/control_table.cpp \
src/dynamixel_easy_sdk/motor.cpp \
src/dynamixel_easy_sdk/dynamixel_error.cpp \
src/dynamixel_easy_sdk/group_executor.cpp


OBJECTS=$(addsuffix .o,$(addprefix $(DIR_OBJS)/,$(basename $(notdir $(SOURCES)))))
Expand Down Expand Up @@ -88,6 +95,12 @@ install: $(TARGET)
# copy the headers into the include directory
@$(CHK_DIR_EXISTS) $(INSTALL_ROOT)/include/dynamixel_sdk || $(MKDIR) $(INSTALL_ROOT)/include/dynamixel_sdk
$(CP_ALL) $(DIR_DXL)/include/dynamixel_sdk/* $(INSTALL_ROOT)/include/dynamixel_sdk/
@$(CHK_DIR_EXISTS) $(INSTALL_ROOT)/include/dynamixel_easy_sdk || $(MKDIR) $(INSTALL_ROOT)/include/dynamixel_easy_sdk
$(CP_ALL) $(DIR_DXL)/include/dynamixel_easy_sdk/* $(INSTALL_ROOT)/include/dynamixel_easy_sdk

# copy the control_table directory into the share directory
@$(CHK_DIR_EXISTS) $(INSTALL_ROOT)/share/dynamixel_sdk || $(MKDIR) -p $(INSTALL_ROOT)/share/dynamixel_sdk
$(CP_ALL) $(DIR_DXL)/../control_table $(INSTALL_ROOT)/share/dynamixel_sdk/

$(LD_CONFIG)

Expand All @@ -99,6 +112,8 @@ uninstall:

$(RM) $(INSTALL_ROOT)/include/dynamixel_sdk/dynamixel_sdk.h
$(RM_ALL) $(INSTALL_ROOT)/include/dynamixel_sdk/*
$(RM_ALL) $(INSTALL_ROOT)/include/dynamixel_easy_sdk/*
$(RM_ALL) $(INSTALL_ROOT)/share/dynamixel_sdk/control_table

reinstall: uninstall install

Expand All @@ -119,6 +134,9 @@ $(DIR_OBJS)/%.o: $(DIR_DXL)/src/dynamixel_sdk/%.c
$(DIR_OBJS)/%.o: $(DIR_DXL)/src/dynamixel_sdk/%.cpp
$(CX) $(CXFLAGS) -c $? -o $@

$(DIR_OBJS)/%.o: $(DIR_DXL)/src/dynamixel_easy_sdk/%.cpp
$(CX) $(CXFLAGS) -c $? -o $@

#---------------------------------------------------------------------
# END OF MAKEFILE
#---------------------------------------------------------------------
2 changes: 1 addition & 1 deletion c++/build/linux64/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ CX = g++
CONTROL_TABLE_PATH_FLAG = -DCONTROL_TABLE_PATH=\"$(INSTALL_ROOT)/share/dynamixel_sdk/control_table\"
CCFLAGS = -O2 -O3 -DLINUX -D_GNU_SOURCE -Wall -c $(INCLUDES) $(FORMAT) -fPIC -g $(CONTROL_TABLE_PATH_FLAG)
CXFLAGS = -O2 -O3 -DLINUX -D_GNU_SOURCE -Wall -c $(INCLUDES) $(FORMAT) -fPIC -g $(CONTROL_TABLE_PATH_FLAG)
FORMAT = -m64
FORMAT = -m64 -std=c++17
INCLUDES += -I$(DIR_DXL)/include/dynamixel_sdk
INCLUDES += -I$(DIR_DXL)/include

Expand Down
25 changes: 22 additions & 3 deletions c++/build/linux_sbc/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,11 @@ SYMLINK = ln -s
MKDIR = mkdir
CC = gcc
CX = g++
CCFLAGS = -O2 -O3 -DLINUX -D_GNU_SOURCE -Wall -c $(INCLUDES) -fPIC -g
CXFLAGS = -O2 -O3 -DLINUX -D_GNU_SOURCE -Wall -c $(INCLUDES) -fPIC -g
CONTROL_TABLE_PATH_FLAG = -DCONTROL_TABLE_PATH=\"$(INSTALL_ROOT)/share/dynamixel_sdk/control_table\"
CCFLAGS = -O2 -O3 -DLINUX -D_GNU_SOURCE -Wall -c $(INCLUDES) -fPIC -g $(CONTROL_TABLE_PATH_FLAG)
CXFLAGS = -O2 -O3 -DLINUX -D_GNU_SOURCE -Wall -c $(INCLUDES) -fPIC -g $(CONTROL_TABLE_PATH_FLAG)
INCLUDES += -I$(DIR_DXL)/include/dynamixel_sdk
INCLUDES += -I$(DIR_DXL)/include

#---------------------------------------------------------------------
# Required external libraries
Expand All @@ -59,6 +61,11 @@ SOURCES = src/dynamixel_sdk/group_bulk_read.cpp \
src/dynamixel_sdk/protocol1_packet_handler.cpp \
src/dynamixel_sdk/protocol2_packet_handler.cpp \
src/dynamixel_sdk/port_handler_linux.cpp \
src/dynamixel_easy_sdk/connector.cpp \
src/dynamixel_easy_sdk/control_table.cpp \
src/dynamixel_easy_sdk/motor.cpp \
src/dynamixel_easy_sdk/dynamixel_error.cpp \
src/dynamixel_easy_sdk/group_executor.cpp


OBJECTS=$(addsuffix .o,$(addprefix $(DIR_OBJS)/,$(basename $(notdir $(SOURCES)))))
Expand Down Expand Up @@ -86,7 +93,14 @@ install: $(TARGET)

# copy the headers into the include directory
@$(CHK_DIR_EXISTS) $(INSTALL_ROOT)/include/dynamixel_sdk || $(MKDIR) $(INSTALL_ROOT)/include/dynamixel_sdk
$(CP_ALL) $(DIR_DXL)/include/dynamixel_sdk/* $(INSTALL_ROOT)/include/dynamixel_sdk/
$(CP_ALL) $(DIR_DXL)/include/dynamixel_sdk/* $(INSTALL_ROOT)/include/dynamixel_sdk

@$(CHK_DIR_EXISTS) $(INSTALL_ROOT)/include/dynamixel_easy_sdk || $(MKDIR) $(INSTALL_ROOT)/include/dynamixel_easy_sdk
$(CP_ALL) $(DIR_DXL)/include/dynamixel_easy_sdk/* $(INSTALL_ROOT)/include/dynamixel_easy_sdk

# copy the control_table directory into the share directory
@$(CHK_DIR_EXISTS) $(INSTALL_ROOT)/share/dynamixel_sdk || $(MKDIR) -p $(INSTALL_ROOT)/share/dynamixel_sdk
$(CP_ALL) $(DIR_DXL)/../control_table $(INSTALL_ROOT)/share/dynamixel_sdk/

$(LD_CONFIG)

Expand All @@ -98,6 +112,8 @@ uninstall:

$(RM) $(INSTALL_ROOT)/include/dynamixel_sdk/dynamixel_sdk.h
$(RM_ALL) $(INSTALL_ROOT)/include/dynamixel_sdk/*
$(RM_ALL) $(INSTALL_ROOT)/include/dynamixel_easy_sdk/*
$(RM_ALL) $(INSTALL_ROOT)/share/dynamixel_sdk/control_table

reinstall: uninstall install

Expand All @@ -118,6 +134,9 @@ $(DIR_OBJS)/%.o: $(DIR_DXL)/src/dynamixel_sdk/%.c
$(DIR_OBJS)/%.o: $(DIR_DXL)/src/dynamixel_sdk/%.cpp
$(CX) $(CXFLAGS) -c $? -o $@

$(DIR_OBJS)/%.o: $(DIR_DXL)/src/dynamixel_easy_sdk/%.cpp
$(CX) $(CXFLAGS) -c $? -o $@

#---------------------------------------------------------------------
# END OF MAKEFILE
#---------------------------------------------------------------------
5 changes: 3 additions & 2 deletions python/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@ build-backend = "setuptools.build_meta"

[project]
name = "dynamixel-sdk"
version = "4.0.2"
version = "4.0.3"
description = "Dynamixel SDK 4. python package"
readme = "README.txt"
license = { text = "Apache 2.0" }
authors = [
{ name = "Leon Jung", email = "rwjung@robotis.com" },
{ name = "Wonho Yun", email = "ywh@robotis.com" }
{ name = "Wonho Yun", email = "ywh@robotis.com" },
{ name = "Hyungyu Kim", email = "kimhg@robotis.com" }
]
dependencies = [
"pyserial",
Expand Down
3 changes: 2 additions & 1 deletion python/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@
authors_info = [
('Leon Jung', 'rwjung@robotis.com'),
('Wonho Yun', 'ywh@robotis.com'),
('Hyungyu Kim', 'kimhg@robotis.com'),
]

authors = ', '.join(author for author, _ in authors_info)
author_emails = ', '.join(email for _, email in authors_info)

setup(
name='dynamixel_sdk',
version='4.0.2',
version='4.0.3',
packages=['dynamixel_sdk'],
package_dir={'': 'src'},
license='Apache 2.0',
Expand Down
5 changes: 5 additions & 0 deletions ros/dynamixel_sdk/CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@
Changelog for package dynamixel_sdk
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

4.0.3 (2025-12-17)
------------------
* Dynamixel Easy SDK supports Linux SBC environments, Linux 32-bit platforms, and ROS 2 based build and deployment workflows
* Contributors: Hyungyu Kim

4.0.2 (2025-11-24)
------------------
* None
Expand Down
21 changes: 21 additions & 0 deletions ros/dynamixel_sdk/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ find_package(ament_cmake_python REQUIRED)
################################################################################
include_directories(
include/${PROJECT_NAME}
include
)

set(DYNAMIXEL_SDK_SOURCES
Expand All @@ -39,6 +40,14 @@ set(DYNAMIXEL_SDK_SOURCES
src/dynamixel_sdk/port_handler.cpp
)

set(DYNAMIXEL_EASY_SDK_SOURCES
src/dynamixel_easy_sdk/connector.cpp
src/dynamixel_easy_sdk/control_table.cpp
src/dynamixel_easy_sdk/dynamixel_error.cpp
src/dynamixel_easy_sdk/group_executor.cpp
src/dynamixel_easy_sdk/motor.cpp
)

if(APPLE)
add_library(dynamixel_sdk SHARED
${DYNAMIXEL_SDK_SOURCES}
Expand All @@ -52,6 +61,7 @@ elseif(WIN32)
else()
add_library(dynamixel_sdk SHARED
${DYNAMIXEL_SDK_SOURCES}
${DYNAMIXEL_EASY_SDK_SOURCES}
src/dynamixel_sdk/port_handler_linux.cpp
)
endif()
Expand All @@ -73,10 +83,21 @@ install(
INCLUDES DESTINATION include
)

install(
DIRECTORY control_table/
DESTINATION share/${PROJECT_NAME}/control_table
)

target_compile_definitions(dynamixel_sdk
PUBLIC
CONTROL_TABLE_PATH="${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}/control_table"
)

################################################################################
# Install Python Package
################################################################################
ament_python_install_package(${PROJECT_NAME} PACKAGE_DIR "src/dynamixel_sdk")
ament_python_install_package(dynamixel_easy_sdk PACKAGE_DIR "src/dynamixel_easy_sdk")

################################################################################
# Macro for ament package
Expand Down
70 changes: 70 additions & 0 deletions ros/dynamixel_sdk/control_table/2xc430_w250.model
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
[type info]
name value
value_of_zero_radian_position 2048
value_of_max_radian_position 4095
value_of_min_radian_position 0
min_radian -3.14159265
max_radian 3.14159265

[unit info]
Data Name value unit Sign Type
Present Velocity 0.0239691227 rad/s signed
Goal Velocity 0.0239691227 rad/s signed

[control table]
Address Size Data Name
0 2 Model Number
2 4 Model Information
6 1 Firmware Version
7 1 ID
8 1 Baud Rate
9 1 Return Delay Time
10 1 Drive Mode
11 1 Operating Mode
12 1 Secondary(Shadow) ID
13 1 Protocol Type
20 4 Homing Offset
24 4 Moving Threshold
31 1 Temperature Limit
32 2 Max Voltage Limit
34 2 Min Voltage Limit
36 2 PWM Limit
44 4 Velocity Limit
48 4 Max Position Limit
52 4 Min Position Limit
63 1 Shutdown
64 1 Torque Enable
65 1 LED
68 1 Status Return Level
69 1 Registered Instruction
70 1 Hardware Error Status
76 2 Velocity I Gain
78 2 Velocity P Gain
80 2 Position D Gain
82 2 Position I Gain
84 2 Position P Gain
88 2 Feedforward 2nd Gain
90 2 Feedforward 1st Gain
98 1 Bus Watchdog
100 2 Goal PWM
104 4 Goal Velocity
108 4 Profile Acceleration
112 4 Profile Velocity
116 4 Goal Position
120 2 Realtime Tick
122 1 Moving
123 1 Moving Status
124 2 Present PWM
126 2 Present Load
128 4 Present Velocity
132 4 Present Position
136 4 Velocity Trajectory
140 4 Position Trajectory
144 2 Present Input Voltage
146 1 Present Temperature
168 2 Indirect Address 1
224 1 Indirect Data 1
168 2 Indirect Address Write
224 1 Indirect Data Write
578 2 Indirect Address Read
634 1 Indirect Data Read
70 changes: 70 additions & 0 deletions ros/dynamixel_sdk/control_table/2xl430_w250.model
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
[type info]
name value
value_of_zero_radian_position 2048
value_of_max_radian_position 4095
value_of_min_radian_position 0
min_radian -3.14159265
max_radian 3.14159265

[unit info]
Data Name value unit Sign Type
Present Velocity 0.0239691227 rad/s signed
Goal Velocity 0.0239691227 rad/s signed

[control table]
Address Size Data Name
0 2 Model Number
2 4 Model Information
6 1 Firmware Version
7 1 ID
8 1 Baud Rate
9 1 Return Delay Time
10 1 Drive Mode
11 1 Operating Mode
12 1 Secondary(Shadow) ID
13 1 Protocol Type
20 4 Homing Offset
24 4 Moving Threshold
31 1 Temperature Limit
32 2 Max Voltage Limit
34 2 Min Voltage Limit
36 2 PWM Limit
44 4 Velocity Limit
48 4 Max Position Limit
52 4 Min Position Limit
63 1 Shutdown
64 1 Torque Enable
65 1 LED
68 1 Status Return Level
69 1 Registered Instruction
70 1 Hardware Error Status
76 2 Velocity I Gain
78 2 Velocity P Gain
80 2 Position D Gain
82 2 Position I Gain
84 2 Position P Gain
88 2 Feedforward 2nd Gain
90 2 Feedforward 1st Gain
98 1 Bus Watchdog
100 2 Goal PWM
104 4 Goal Velocity
108 4 Profile Acceleration
112 4 Profile Velocity
116 4 Goal Position
120 2 Realtime Tick
122 1 Moving
123 1 Moving Status
124 2 Present PWM
126 2 Present Load
128 4 Present Velocity
132 4 Present Position
136 4 Velocity Trajectory
140 4 Position Trajectory
144 2 Present Input Voltage
146 1 Present Temperature
168 2 Indirect Address 1
224 1 Indirect Data 1
168 2 Indirect Address Write
224 1 Indirect Data Write
578 2 Indirect Address Read
634 1 Indirect Data Read
Loading