diff --git a/_data/navigation.yml b/_data/navigation.yml index 4e7a404ff..09c3a6029 100644 --- a/_data/navigation.yml +++ b/_data/navigation.yml @@ -29628,7 +29628,6 @@ robotis_manipulator_libs: - title: "Step4 Use it" url: /software/robotis_manipulator_libs/#step4-use-it - #DYNAMIXEL SDK sidebar dynamixel_sdk: - title: "Overview" @@ -29646,7 +29645,6 @@ dynamixel_sdk: url: /software/dynamixel/dynamixel_sdk/overview/#supported-operating-systems - title: "Supported Languages" url: /software/dynamixel/dynamixel_sdk/overview/#supported-languages -## - title: "Quick Start Guide" url: /software/dynamixel/dynamixel_sdk/quick_start_guide/#quick-start-guide children: @@ -29657,40 +29655,20 @@ dynamixel_sdk: - title: "Library Setup" url: /software/dynamixel/dynamixel_sdk/library_setup/#library-setup children: - - title: "C Windows" - url: /software/dynamixel/dynamixel_sdk/library_setup/c_windows/#c-windows - - title: "C Linux" - url: /software/dynamixel/dynamixel_sdk/library_setup/c_linux/#c-linux - - title: "C macOS" - url: /software/dynamixel/dynamixel_sdk/library_setup/c_macos/#c-macos - - title: "CPP Windows" - url: /software/dynamixel/dynamixel_sdk/library_setup/cpp_windows/#cpp-windows - - title: "CPP Linux" - url: /software/dynamixel/dynamixel_sdk/library_setup/cpp_linux/#library-setup-cpp-linux - - title: "CPP macOS" - url: /software/dynamixel/dynamixel_sdk/library_setup/cpp_macos/#cpp-macos - - title: "Csharp Windows" - url: /software/dynamixel/dynamixel_sdk/library_setup/csharp_windows/#csharp-windows - - title: "Python Windows" - url: /software/dynamixel/dynamixel_sdk/library_setup/python_windows/#python-windows - - title: "Python Linux" - url: /software/dynamixel/dynamixel_sdk/library_setup/python_linux/#python-linux - - title: "Python macOS" - url: /software/dynamixel/dynamixel_sdk/library_setup/python_macos/#python-macos - - title: "Java Windows" - url: /software/dynamixel/dynamixel_sdk/library_setup/java_windows/#java-windows - - title: "Java Linux" - url: /software/dynamixel/dynamixel_sdk/library_setup/java_linux/#java-linux - - title: "Java macOS" - url: /software/dynamixel/dynamixel_sdk/library_setup/java_macos/#java-macos - - title: "MATLAB Windows" - url: /software/dynamixel/dynamixel_sdk/library_setup/matlab_windows/#matlab-windows - - title: "MATLAB Linux" - url: /software/dynamixel/dynamixel_sdk/library_setup/matlab_linux/#matlab-linux - - title: "MATLAB macOS" - url: /software/dynamixel/dynamixel_sdk/library_setup/matlab_macos/#matlab-macos - - title: "LabVIEW Windows" - url: /software/dynamixel/dynamixel_sdk/library_setup/labview_windows/#labview-windows + - title: "C" + url: /software/dynamixel/dynamixel_sdk/library_setup/c/#library-setup-c-linux + - title: "CPP" + url: /software/dynamixel/dynamixel_sdk/library_setup/cpp/#library-setup-cpp-linux + - title: "Python" + url: /software/dynamixel/dynamixel_sdk/library_setup/python/#library-setup-python-linux + - title: "Csharp" + url: /software/dynamixel/dynamixel_sdk/library_setup/csharp/#library-setup-csharp-windows + - title: "Java" + url: /software/dynamixel/dynamixel_sdk/library_setup/java/#library-setup-java-linux + - title: "MATLAB" + url: /software/dynamixel/dynamixel_sdk/library_setup/matlab/#library-setup-matlab-linux + - title: "LabVIEW" + url: /software/dynamixel/dynamixel_sdk/library_setup/labview/#library-setup-labview-windows - title: Basic Read/Write tutorial url: /software/dynamixel/dynamixel_sdk/basic_read_write_tutorial/ children: @@ -30131,6 +30109,17 @@ dynamixel_sdk: url: /software/dynamixel/dynamixel_sdk/quick_start_video/ - title: "FAQ" url: /software/dynamixel/dynamixel_sdk/faq/ + - title: "Dynamixel API" + url: /software/dynamixel/dynamixel_sdk/dynamixel_api/introduction + children: + - title: "Introduction" + url: /software/dynamixel/dynamixel_sdk/dynamixel_api/introduction + - title: "API Reference" + url: /software/dynamixel/dynamixel_sdk/dynamixel_api/api_reference + - title: "Tutorials" + url: /software/dynamixel/dynamixel_sdk/dynamixel_api/tutorials + - title: "Examples" + url: /software/dynamixel/dynamixel_sdk/dynamixel_api/examples #DYNAMIXEL Workbench sidebar dynamixel_workbench: diff --git a/_includes/en/software/dynamixel_sdk/library_setup/c_linux.md b/_includes/en/software/dynamixel_sdk/library_setup/c_linux.md new file mode 100644 index 000000000..58ed3e84b --- /dev/null +++ b/_includes/en/software/dynamixel_sdk/library_setup/c_linux.md @@ -0,0 +1,114 @@ +{::options parse_block_html="true" /} + +
+

Library Setup <C Linux>

+
+ + +This tutorial is written assuming you are using the latest version of Ubuntu. Commands may not be the same for alternative distributions of Linux. + +# [Install requirements](#install-requirements) + +- The DYNAMIXEL SDK requires GNU gcc ver. 5.4.0 20160609 or higher +- To check the version of your gcc compiler +``` bash +$ gcc -v +``` + +- Download the requirements +``` bash +$ sudo apt-get install gcc +$ sudo apt-get install build-essential +$ sudo apt-get install gcc-multilib g++-multilib # For cross-compiling +``` + +# [Build the SDK](#build-the-SDK) +- Check your system architecture +``` bash +$ uname -m +``` + +- Enter the appropriate build folder depending on your system and build the SDK +``` bash +$ cd DynamixelSDK/c/build/linux64 # for 64-bit systems +$ sudo make install +``` +- make sure to enter the correct folder according to your system architecture. + - `linux64` for 64-bit systems + - `linux32` for 32-bit systems + - `linux_sbc` for ARM-based SBCs like Raspberry Pi + +- If the build completes successfully, you should see the .so file generated inside the build folder. +``` bash +$ ls +libdxl_x86_c.so Makefile +``` + +- Grant permission to access the port +``` bash +$ sudo chmod 666 /dev/ttyUSB0 +``` + +
+- Common `make` commands for building the SDK +``` bash +$ make # Compile the source code and generate binaries +$ make install # Install the library files to the system +$ make clean # Remove all build files and reset the build environment +$ make uninstall # Remove files installed by 'make install' from the system +$ make reinstall # Reinstall by cleaning, rebuilding, and installing again +``` +{: .notice--success} + +# [Building and Running the Sample Code](#building-and-running-the-sample-code) + +The DYNAMIXEL SDK example code for C uses a .so (Linux Shared Object) library built in C. +The previous instructions walk you through building the latest library files in `[DynamixelSDK folder]/c/build/[linuxXX]/libdxl_xYY_c.so` built by its own source code. + +* Go to the Makefile's directory using `cd`: + + ``` bash + $ cd [DynamixelSDK folder]/c/example/protocol1.0/read_write/linux32 + ``` + + OR + + ``` bash + $ cd [DynamixelSDK folder]/c/example/protocol1.0/read_write/linux64 + ``` + + ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/linux/sample_code/exc4.png) + +* Build the executable file: + + ``` bash + $ make + ``` + + ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/linux/sample_code/exc1.png) + +* If there is an error, `$ make clean` then `$ make` again. + +* To delete the executable file, `$ make clean`. + + ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/linux/sample_code/exc2.png) + +* Access the port you will be using to communicate with DYNAMIXEL: + + ``` bash + $ sudo chmod a+rw /dev/ttyUSB0 + ``` + + ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/linux/sample_code/exc3.png) + +* Run the executable file: + + ``` bash + $ ./read_write + ``` + + ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/linux/sample_code/exc5.png) diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/c_macos.md b/_includes/en/software/dynamixel_sdk/library_setup/c_macos.md similarity index 100% rename from docs/en/software/dynamixel/dynamixel_sdk/library_setup/c_macos.md rename to _includes/en/software/dynamixel_sdk/library_setup/c_macos.md diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/c_macos_dummy.md b/_includes/en/software/dynamixel_sdk/library_setup/c_macos_dummy.md similarity index 66% rename from docs/en/software/dynamixel/dynamixel_sdk/library_setup/c_macos_dummy.md rename to _includes/en/software/dynamixel_sdk/library_setup/c_macos_dummy.md index aff32e45c..d68e3e439 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/c_macos_dummy.md +++ b/_includes/en/software/dynamixel_sdk/library_setup/c_macos_dummy.md @@ -1,24 +1,20 @@ ---- -layout: archive -lang: en -ref: c_macos -read_time: true -share: true -author_profile: false -permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/c_macos/ -sidebar: - title: DYNAMIXEL SDK - nav: "dynamixel_sdk" ---- - - -
+ -## [C macOS](#c-macos) +{::options parse_block_html="true" /} + +
+

Library Setup <C macOS>

+
+ {% include en/maintenance_is_in_progress.md %} diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/c_windows.md b/_includes/en/software/dynamixel_sdk/library_setup/c_windows.md similarity index 60% rename from docs/en/software/dynamixel/dynamixel_sdk/library_setup/c_windows.md rename to _includes/en/software/dynamixel_sdk/library_setup/c_windows.md index fa2ab75a5..c920378e0 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/c_windows.md +++ b/_includes/en/software/dynamixel_sdk/library_setup/c_windows.md @@ -1,44 +1,35 @@ ---- -layout: archive -lang: en -ref: c_windows -read_time: true -share: true -author_profile: false -permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/c_windows/ -sidebar: - title: DYNAMIXEL SDK - nav: "dynamixel_sdk" ---- +{::options parse_block_html="true" /} - +
+

Library Setup <C Windows>

+
+ -# [Library Setup](#library-setup) - -## [C Windows](#c-windows) - -### [Compiler and Builder](#compiler-and-builder) - -* [Download Visual Studio Community for Windows Desktop](https://www.visualstudio.com/en-us/products/visual-studio-express-vs.aspx) +# [Install requirements](#install-requirements) +- [Download Visual Studio Community for Windows Desktop](https://www.visualstudio.com/en-us/products/visual-studio-express-vs.aspx) ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/vs.png) -### [Building the Library](#building-the-library) +# [Build the SDK](#build-the-SDK) -* Open the project solution file (.sln) located in the `[DynamixelSDK folder]/c/build/win32` directory OR `[DynamixelSDK folder]/c/build/win64` directory). +- Open the project solution file (.sln) located in the `[DynamixelSDK folder]/c/build/win32` directory OR `[DynamixelSDK folder]/c/build/win64` directory). ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/windows/library_file/1.png) -* In the Solution Explorer, right click on the project and select Properties. +- In the Solution Explorer, right click on the project and select Properties. ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/windows/library_file/2.png) -* Under General Configuration Properties, confirm that the paths and file extensions are set to the following: +- Under General Configuration Properties, confirm that the paths and file extensions are set to the following: - * Output Directory: `$(SolutionDir)output\` - * Intermediate Directory: `$(Configuration)\` - * Platform Toolset: `Visual Studio 20XX (v000)` - * Configuration Type: `Dynamic Library (.dll)`. + - Output Directory: `$(SolutionDir)output\` + - Intermediate Directory: `$(Configuration)\` + - Platform Toolset: `Visual Studio 20XX (v000)` + - Configuration Type: `Dynamic Library (.dll)`. {% capture notice_01 %} **WARNING**: @@ -49,66 +40,66 @@ If the library file needs to be built in a lower or higher version of Visual Stu ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/windows/library_file/3.png) -* Confirm that the Additional Include Directories path under the General C/C++ Configuration Properties tree is as follows: +- Confirm that the Additional Include Directories path under the General C/C++ Configuration Properties tree is as follows: `..\..\..\include\dynamixel_sdk` ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/windows/library_file/4.png) -* Right click on the project and select Build to build the library. +- Right click on the project and select Build to build the library. ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/windows/library_file/5.png) -* The built library file will be saved to `[DynamixelSDK folder]/c/build/[winXX]/output/dxl_xYY_c.dll`. +- The built library file will be saved to `[DynamixelSDK folder]/c/build/[winXX]/output/dxl_xYY_c.dll`. -### [Building and Running the Sample Code](#building-and-running-the-sample-code) +# [Building and Running the Sample Code](#building-and-running-the-sample-code) The DYNAMIXEL SDK sample code for C uses the library files (.dll for Windows) compiled from the C language source. By following the instructions above, The compiled .dll files are output to `[DynamixelSDK folder]/c/build/[winXX]/output/dxl_xYY_c.dll` after being built from the included source code. -* Run the .sln file located in the `[DynamixelSDK folder]/c/example/protocol2.0/read_write/win32` folder if you have a 32-bit platform OR the `[DynamixelSDK folder]/c/example/protocol2.0/read_write/win64` folder if you have a 64-bit platform. +- Run the .sln file located in the `[DynamixelSDK folder]/c/example/protocol2.0/read_write/win32` folder if you have a 32-bit platform OR the `[DynamixelSDK folder]/c/example/protocol2.0/read_write/win64` folder if you have a 64-bit platform. ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/windows/sample_code/1.png) -* Right click on the project and select Properties. +- Right click on the project and select Properties. ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/windows/sample_code/2.png) -* In the resulting Property Pages window, under Configuration Properties --> General, check that the directories and file extensions are set as follows: +- In the resulting Property Pages window, under Configuration Properties --> General, check that the directories and file extensions are set as follows: - * Output Directory: `$(SolutionDir)$(Configuration)\` - * Intermediate Directory: `$(Configuration)\` - * Target Extension: `.exe` - * Configuration Type: `Application (.exe)` + - Output Directory: `$(SolutionDir)$(Configuration)\` + - Intermediate Directory: `$(Configuration)\` + - Target Extension: `.exe` + - Configuration Type: `Application (.exe)` ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/windows/sample_code/3.png) -* Under Configuration Properties --> Debugging add the following path to your Environment: +- Under Configuration Properties --> Debugging add the following path to your Environment: - win32: `PATH=%PATH%;..\..\..\..\..\build\win32\output;` - win64: `PATH=%PATH%;..\..\..\..\..\build\win64\output;` ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/windows/sample_code/4.png) -* Under Configuration Properties --> VC++ Directories, add the following path to Library Directories: +- Under Configuration Properties --> VC++ Directories, add the following path to Library Directories: - win32: `..\..\..\..\..\build\win32\output;` - win64: `..\..\..\..\..\build\win64\output;` ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/windows/sample_code/5.png) -* Under Configuration Properties --> C/C++ --> General, add the following path to Additional Include Directories: +- Under Configuration Properties --> C/C++ --> General, add the following path to Additional Include Directories: `..\..\..\..\..\include\dynamixel_sdk` ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/windows/sample_code/6.png) -* Under Configuration Properties --> Linker --> Input, add the following file to Additional Dependencies: +- Under Configuration Properties --> Linker --> Input, add the following file to Additional Dependencies: - win32: `dxl_x86_c.lib;` - win64: `dxl_x64_c.lib;` ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/windows/sample_code/7.png) -* Click on the Local Windows Debugger button to run the program. +- Click on the Local Windows Debugger button to run the program. ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/windows/sample_code/8.png) diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/cpp_linux.md b/_includes/en/software/dynamixel_sdk/library_setup/cpp_linux.md similarity index 85% rename from docs/en/software/dynamixel/dynamixel_sdk/library_setup/cpp_linux.md rename to _includes/en/software/dynamixel_sdk/library_setup/cpp_linux.md index 21dad9db5..4b33cc468 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/cpp_linux.md +++ b/_includes/en/software/dynamixel_sdk/library_setup/cpp_linux.md @@ -1,20 +1,7 @@ ---- -layout: archive -lang: en -ref: cpp_linux -read_time: true -share: true -author_profile: false -permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/cpp_linux/ -sidebar: - title: DYNAMIXEL SDK - nav: "dynamixel_sdk" ---- - {::options parse_block_html="true" /}
-

Library Setup

+

Library Setup <C++ Linux>

-
+ -## [CPP macOS](#cpp-macos) +{::options parse_block_html="true" /} + +
+

Library Setup <C++ macOS>

+
+ {% include en/maintenance_is_in_progress.md %} diff --git a/_includes/en/software/dynamixel_sdk/library_setup/cpp_windows.md b/_includes/en/software/dynamixel_sdk/library_setup/cpp_windows.md new file mode 100644 index 000000000..39902481e --- /dev/null +++ b/_includes/en/software/dynamixel_sdk/library_setup/cpp_windows.md @@ -0,0 +1,68 @@ +{::options parse_block_html="true" /} + +
+

Library Setup <C++ Windows>

+
+ + +This section provides instructions on building the SDK. + +# [Install requirements](#install-requirements) +- In this section, we used visual studio as the IDE for building the SDK. + + [Download Visual Studio Community for Windows Desktop](https://www.visualstudio.com/en-us/products/visual-studio-express-vs.aspx) + + ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/visualstudio.png) + +# [Build the SDK](#build-the-SDK) +**NOTE**: This instruction assumes a 64-bit Windows system. If you are using 32-bit Windows, simply follow the same steps using the 32-bit version instead. +{: .notice} +- Open the project solution file (`dxl_x64_cpp.sln`) located in the `[DynamixelSDK folder]/c++/build/win64` directory. + + ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/visualstudio1.png) + +- If below dialog appears, select `OK`. This will adjust the toolset settings depending on your version of Visual Studio and Windows. + + ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/upgradetoolset.png) + + +- In the Solution Explorer on the right side, right-click the dxl_x64_cpp solution and select Build. + + ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/buildprocess.png) + +
+ +- **The SDK build is complete.** +- **If the build was successful, the compiled library file will be saved at :** `[DynamixelSDK folder]/c++/build/[win64]/output/dxl_x64_cpp.dll` + ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/buildoutput.png) + +
+ +![](/assets/images/icon_unfold.png) **Check Build Properties** + + +- You can check or change the build properties through right-clicking on the project in the Solution Explorer and selecting Properties. + + ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/buildproperties1.png) + +- Build properties is shown as below + + ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/buildproperties2.png) + - Output Directory: `$(SolutionDir)output\` + - Intermediate Directory: `$(Configuration)\` + - Platform Toolset: `Visual Studio 20XX (v000)` + - Configuration Type: `Dynamic Library (.dll)` + + ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/buildproperties3.png) + - Additional Include Directories: `..\..\..\include\dynamixel_sdk` +
+ +{% capture notice_01 %} +**WARNING**: +If the library file needs to be built in a lower or higher version of Visual Studio, change the `Platform Toolset` into the needed value. (ex: To use the DynamixelSDK c ver. library file in the MATLAB 2010 or LabVIEW 2010, the `Platform Toolset` should be changed to `Visual Studio 2009` lower.) +{% endcapture %} +
{{ notice_01 | markdownify }}
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/csharp_windows.md b/_includes/en/software/dynamixel_sdk/library_setup/csharp_windows.md similarity index 66% rename from docs/en/software/dynamixel/dynamixel_sdk/library_setup/csharp_windows.md rename to _includes/en/software/dynamixel_sdk/library_setup/csharp_windows.md index 10a6272fa..9903d37ce 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/csharp_windows.md +++ b/_includes/en/software/dynamixel_sdk/library_setup/csharp_windows.md @@ -1,40 +1,29 @@ ---- -layout: archive -lang: en -ref: csharp_windows -read_time: true -share: true -author_profile: false -permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/csharp_windows/ -sidebar: - title: DYNAMIXEL SDK - nav: "dynamixel_sdk" ---- - - -
- - - -## [CSharp Windows](#csharp-windows) +{::options parse_block_html="true" /} + +
+

Library Setup <CSharp Windows>

+
+ For C# source code is only provided for Windows. -### [Compiler and Builder](#compiler-and-builder) +# [Compiler and Builder](#compiler-and-builder) * [Download Visual Studio Community for Windows Desktop](https://www.visualstudio.com/en-us/products/visual-studio-express-vs.aspx) ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/csharp/vs.png) -#### [Function References](#function-references) +# [Function References](#function-references) * The function reference file is located in `[DynamixelSDK folder]/c#/dynamixel_functions_csharp/[winXX]/dynamixel.cs` ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/csharp/windows/library_file/1.png) -### [Building and Running the Sample Code](#building-and-running-the-sample-code) +# [Building and Running the Sample Code](#building-and-running-the-sample-code) The DYNAMIXEL SDK sample code for C# uses the library files (.dll for Windows) compiled from the C# language source. diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/java_linux.md b/_includes/en/software/dynamixel_sdk/library_setup/java_linux.md similarity index 84% rename from docs/en/software/dynamixel/dynamixel_sdk/library_setup/java_linux.md rename to _includes/en/software/dynamixel_sdk/library_setup/java_linux.md index 26fd5cc1a..a80aa9a8a 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/java_linux.md +++ b/_includes/en/software/dynamixel_sdk/library_setup/java_linux.md @@ -1,34 +1,25 @@ ---- -layout: archive -lang: en -ref: java_linux -read_time: true -share: true -author_profile: false -permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/java_linux/ -sidebar: - title: DYNAMIXEL SDK - nav: "dynamixel_sdk" ---- - - -
- - - -## [Java Linux](#java-linux) - -### [Compiler and Builder](#compiler-and-builder) +{::options parse_block_html="true" /} +
+

Library Setup <Java Linux>

+
+ + +# [Install requirements](#install-requirements) + + +## [Compiler and Builder](#compiler-and-builder) ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/java/eclipse.png) * [Download the Eclipse IDE for Java (`Linux 32-bit` or `Linux 64-bit`)](http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/neonr) ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/java/linux/library_file/a1.png) -### [Required Packages](#required-packages) +## [Required Packages](#required-packages) * [Download Java Development Kit (JDK) (`Linux 32-bit` or `Linux 64-bit`)](http://www.oracle.com/technetwork/java/javase/downloads/index.html) @@ -42,7 +33,7 @@ sidebar: ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/java/linux/library_file/b3.png) -### [Java Native Access(JNA)](#java-native-accessjna) +## [Java Native Access(JNA)](#java-native-accessjna) ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/java/jna.jpg) @@ -54,7 +45,7 @@ sidebar: ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/java/linux/library_file/b5.png) -### [Function Reference](#function-reference) +# [Function Reference](#function-reference) * The function reference file is located in `[DynamixelSDK folder]/java/dynamixel_functions_java/x86 or x64/Dynamixel.java` @@ -64,13 +55,13 @@ sidebar: ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/java/linux/library_file/1.png) -### [Building and Running the Sample Code](#building-and-running-the-sample-code) +# [Building and Running the Sample Code](#building-and-running-the-sample-code) The DYNAMIXEL SDK example code for Java uses the library files(.so for Linux) built in C language. Each released DYNAMIXEL SDK have latest library files in `[DynamixelSDK folder]/c/build/[linuxXX]/libdxl_xYY_c.so` which should be built by its own source code. -#### Make Java Project +## Make Java Project * Set workspace @@ -88,7 +79,7 @@ Each released DYNAMIXEL SDK have latest library files in `[DynamixelSDK folder]/ ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/java/linux/sample_code/4.png) -#### Import function reference +## Import function reference * Click `Link Additional Source to Project` @@ -108,7 +99,7 @@ Each released DYNAMIXEL SDK have latest library files in `[DynamixelSDK folder]/ ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/java/linux/sample_code/8.png) -#### Import DynamixelSDK library +## Import DynamixelSDK library * Click `Link Additional Source to Project` @@ -127,7 +118,7 @@ Each released DYNAMIXEL SDK have latest library files in `[DynamixelSDK folder]/ ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/java/linux/sample_code/13.png) -#### Import JNA +## Import JNA * Go to Libraries on the screen. @@ -146,7 +137,7 @@ Each released DYNAMIXEL SDK have latest library files in `[DynamixelSDK folder]/ ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/java/linux/sample_code/17.png) -#### Run example +# Run example * Make the port be able to be used diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/java_macos.md b/_includes/en/software/dynamixel_sdk/library_setup/java_macos.md similarity index 100% rename from docs/en/software/dynamixel/dynamixel_sdk/library_setup/java_macos.md rename to _includes/en/software/dynamixel_sdk/library_setup/java_macos.md diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/java_macos_dummy.md b/_includes/en/software/dynamixel_sdk/library_setup/java_macos_dummy.md similarity index 65% rename from docs/en/software/dynamixel/dynamixel_sdk/library_setup/java_macos_dummy.md rename to _includes/en/software/dynamixel_sdk/library_setup/java_macos_dummy.md index 5965b43e1..5c3d45d6f 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/java_macos_dummy.md +++ b/_includes/en/software/dynamixel_sdk/library_setup/java_macos_dummy.md @@ -1,25 +1,21 @@ ---- -layout: archive -lang: en -ref: java_macos -read_time: true -share: true -author_profile: false -permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/java_macos/ -sidebar: - title: DYNAMIXEL SDK - nav: "dynamixel_sdk" ---- - - -
+{::options parse_block_html="true" /} + +
+

Library Setup <Java macOS>

+
+ + + -## [Java macOS](#java-macos) - {% include en/maintenance_is_in_progress.md %} - -## [Java Windows](#java-windows) - -### [Compiler and Builder](#compiler-and-builder) +{::options parse_block_html="true" /} + +
+

Library Setup <Java Windows>

+
+ + +# [Install requirements](#install-requirements) + +## [Compiler and Builder](#compiler-and-builder) ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/java/eclipse.png) @@ -28,7 +19,7 @@ sidebar: ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/java/windows/library_file/a1.png) -### [Required Packages](#required-packages) +## [Required Packages](#required-packages) * [Download Java Development Kit (JDK) (`Windows 32-bit` or `Windows 64-bit`)](http://www.oracle.com/technetwork/java/javase/downloads/index.html) @@ -42,7 +33,7 @@ sidebar: ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/java/windows/library_file/b3.png) -### [Java Native Access(JNA)](#java-native-accessjna) +## [Java Native Access(JNA)](#java-native-accessjna) ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/java/jna.jpg) @@ -54,7 +45,7 @@ sidebar: ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/java/windows/library_file/b5.png) -## [Function Reference](#function-reference) +# [Function Reference](#function-reference) * The function reference file is located in `[DynamixelSDK folder]/java/dynamixel_functions_java/x86 or x64/Dynamixel.java` @@ -62,13 +53,13 @@ sidebar: ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/java/windows/library_file/1.png) -### [Building and Running the Sample Code](#building-and-running-the-sample-code) +# [Building and Running the Sample Code](#building-and-running-the-sample-code) The DYNAMIXEL SDK example code for Java uses the library files(.dll for Windows) built in C language. Each released DYNAMIXEL SDK have latest library files in `[DynamixelSDK folder]/c/build/[winXX]/output/dxl_xYY_c.dll` which were built by its own source code. -#### Make Java Project +## Make Java Project * Set workspace @@ -86,7 +77,7 @@ Each released DYNAMIXEL SDK have latest library files in `[DynamixelSDK folder]/ ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/java/windows/sample_code/5.png) -#### Import function reference +## Import function reference * Open `Configure Build Path` @@ -109,7 +100,7 @@ Each released DYNAMIXEL SDK have latest library files in `[DynamixelSDK folder]/ ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/java/windows/sample_code/10.png) -##### Import DynamixelSDK library +## Import DynamixelSDK library * Click `Link Additional Source to Project` @@ -128,7 +119,7 @@ Each released DYNAMIXEL SDK have latest library files in `[DynamixelSDK folder]/ ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/java/windows/sample_code/14.png) -#### Import JNA +## Import JNA * Go to `Libraries` tap and Click `Add External JARs`. @@ -142,7 +133,7 @@ Each released DYNAMIXEL SDK have latest library files in `[DynamixelSDK folder]/ ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/java/windows/sample_code/17.png) -#### Run example +# Run example * Put `ReadWrite.java` source into the folder `src` on the screen diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/labview_windows.md b/_includes/en/software/dynamixel_sdk/library_setup/labview_windows.md similarity index 83% rename from docs/en/software/dynamixel/dynamixel_sdk/library_setup/labview_windows.md rename to _includes/en/software/dynamixel_sdk/library_setup/labview_windows.md index ab9751e7f..e6d8c246e 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/labview_windows.md +++ b/_includes/en/software/dynamixel_sdk/library_setup/labview_windows.md @@ -1,26 +1,15 @@ ---- -layout: archive -lang: en -ref: labview_windows -read_time: true -share: true -author_profile: false -permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/labview_windows/ -sidebar: - title: DYNAMIXEL SDK - nav: "dynamixel_sdk" ---- - - -
- - - -## [LabVIEW Windows](#labview-windows) - -### [Compiler and Builder](#compiler-and-builder) +{::options parse_block_html="true" /} + +
+

Library Setup <LabVIEW Windows>

+
+ + +# [Compiler and Builder](#compiler-and-builder) ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/labview/labview_logo.png) @@ -28,7 +17,7 @@ sidebar: ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/labview/windows/library_file/a1.png) -### [Building the Library](#building-the-library) +# [Building the Library](#building-the-library) Note that if following procedure imports the DYNAMIXEL SDK c ver. 32bit library, the built library for LabVIEW only can be used by LabVIEW 32bit. Choose the platform target to either 32bit or 64bit, at first. @@ -86,7 +75,7 @@ Besides, when some error that are related with `.dll file version is higher than ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/labview/windows/library_file/b12.png) -### [Function Reference](#function-reference) +# [Function Reference](#function-reference) * The function reference file is located in `[DynamixelSDK folder]/labview/dxl_x86_c.lvlib/dxl_x86_c.lvlib` @@ -96,7 +85,7 @@ Besides, when some error that are related with `.dll file version is higher than ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/labview/windows/library_file/1.png) -### [Building and Running the Sample Code](#building-and-running-the-sample-code) +# [Building and Running the Sample Code](#building-and-running-the-sample-code) DYNAMIXEL SDK example code for LabVIEW uses the library files(.dll for Windows) built in C language. diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/matlab_linux.md b/_includes/en/software/dynamixel_sdk/library_setup/matlab_linux.md similarity index 79% rename from docs/en/software/dynamixel/dynamixel_sdk/library_setup/matlab_linux.md rename to _includes/en/software/dynamixel_sdk/library_setup/matlab_linux.md index e0f586f5b..a312b264c 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/matlab_linux.md +++ b/_includes/en/software/dynamixel_sdk/library_setup/matlab_linux.md @@ -1,26 +1,15 @@ ---- -layout: archive -lang: en -ref: matlab_linux -read_time: true -share: true -author_profile: false -permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/matlab_linux/ -sidebar: - title: DYNAMIXEL SDK - nav: "dynamixel_sdk" ---- - - -
- - - -## [Matlab Linux](#matlab-linux) - -### [Compiler and Builder](#compiler-and-builder) +{::options parse_block_html="true" /} + +
+

Library Setup <Matlab Linux>

+
+ + +# [Compiler and Builder](#compiler-and-builder) ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/matlab/matlab.png) @@ -30,7 +19,7 @@ sidebar: ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/matlab/linux/library_file/a2.png) -### [Function Reference](#function-reference) +# [Function Reference](#function-reference) * The function reference file is located in `[DynamixelSDK folder]/matlab/m_basic_function/` @@ -40,13 +29,13 @@ sidebar: ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/matlab/linux/library_file/1.png) -### [Building and Running the Sample Code](#building-and-running-the-sample-code) +# [Building and Running the Sample Code](#building-and-running-the-sample-code) DYNAMIXEL SDK example code for Python uses the library files(.so for Linux) built in C language. Each released DYNAMIXEL SDK have latest library files in `[DynamixelSDK folder]/c/build/[linuxXX]/libdxl_xYY_c.so` which should be built by its own source code. -#### Import libraries +# Import libraries * Click `Set Path` @@ -70,7 +59,7 @@ Each released DYNAMIXEL SDK have latest library files in `[DynamixelSDK folder]/ ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/matlab/linux/sample_code/5.png) -#### Import function reference +# Import function reference * Click `Add with Subfolders...` @@ -85,7 +74,7 @@ Each released DYNAMIXEL SDK have latest library files in `[DynamixelSDK folder]/ ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/matlab/linux/sample_code/8.png) -#### Run example +# Run example * Make the port be able to be used diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/matlab_macos.md b/_includes/en/software/dynamixel_sdk/library_setup/matlab_macos.md similarity index 100% rename from docs/en/software/dynamixel/dynamixel_sdk/library_setup/matlab_macos.md rename to _includes/en/software/dynamixel_sdk/library_setup/matlab_macos.md diff --git a/_includes/en/software/dynamixel_sdk/library_setup/matlab_macos_dummy.md b/_includes/en/software/dynamixel_sdk/library_setup/matlab_macos_dummy.md new file mode 100644 index 000000000..a4ba4ef21 --- /dev/null +++ b/_includes/en/software/dynamixel_sdk/library_setup/matlab_macos_dummy.md @@ -0,0 +1,24 @@ +{::options parse_block_html="true" /} + +
+

Library Setup <Matlab macOS>

+
+ + +{% include en/maintenance_is_in_progress.md %} + + diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/matlab_windows.md b/_includes/en/software/dynamixel_sdk/library_setup/matlab_windows.md similarity index 77% rename from docs/en/software/dynamixel/dynamixel_sdk/library_setup/matlab_windows.md rename to _includes/en/software/dynamixel_sdk/library_setup/matlab_windows.md index 64644a15c..1d9287bd6 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/matlab_windows.md +++ b/_includes/en/software/dynamixel_sdk/library_setup/matlab_windows.md @@ -1,26 +1,15 @@ ---- -layout: archive -lang: en -ref: matlab_windows -read_time: true -share: true -author_profile: false -permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/matlab_windows/ -sidebar: - title: DYNAMIXEL SDK - nav: "dynamixel_sdk" ---- - - -
- - - -## [Matlab Windows](#matlab-windows) - -### [Compiler and Builder](#compiler-and-builder) +{::options parse_block_html="true" /} + +
+

Library Setup <Matlab Windows>

+
+ + +# [Compiler and Builder](#compiler-and-builder) ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/matlab/matlab.png) @@ -30,7 +19,7 @@ sidebar: ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/matlab/windows/library_file/a2.png) -### [Function Reference](#function-reference) +# [Function Reference](#function-reference) {% capture notice_01 %} **WARNING**: When some error that are related with `.dll file version is higher than the MATLAB's version` is appeared, the `.dll` file should be rebuilt in lower version Visual Studio. @@ -47,13 +36,13 @@ When some error that are related with `.dll file version is higher than the MATL ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/matlab/windows/library_file/1.png) -### [Building and Running the Sample Code](#building-and-running-the-sample-code) +# [Building and Running the Sample Code](#building-and-running-the-sample-code) DYNAMIXEL SDK example code for MATLAB uses the library files(.dll for Windows) built in C language. Each released DYNAMIXEL SDK have latest library files in `[DynamixelSDK folder]/c/build/[winXX]/output/dxl_xYY_c.dll` which were built by its own source code. -#### Import libraries +# Import libraries * Click `Set Path` @@ -76,7 +65,7 @@ Each released DYNAMIXEL SDK have latest library files in `[DynamixelSDK folder]/ ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/matlab/windows/sample_code/5.png) -#### Import function reference +# Import function reference * Click `Add with Subfolders...` @@ -91,7 +80,7 @@ Each released DYNAMIXEL SDK have latest library files in `[DynamixelSDK folder]/ ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/matlab/windows/sample_code/8.png) -#### Run example +# Run example * Click `Browse for folder` diff --git a/_includes/en/software/dynamixel_sdk/library_setup/python_linux.md b/_includes/en/software/dynamixel_sdk/library_setup/python_linux.md new file mode 100644 index 000000000..632c974ab --- /dev/null +++ b/_includes/en/software/dynamixel_sdk/library_setup/python_linux.md @@ -0,0 +1,44 @@ +{::options parse_block_html="true" /} + +
+

Library Setup <Python Linux>

+
+ + +# [Install requirements](#install-requirements) + +- Install python3 and pip3. +```bash +$ sudo apt update +$ sudo apt install python3 python3-pip python3-serial +``` + +- You can also install in web browser using the following link: + [Download Python3 for Linux](https://www.python.org/downloads/) + +# [Build and Install the SDK](#build-and-install-the-SDK) + +- If you downloaded the SDK as source code, you should install it using pip3 (excluding those who installed via pip3 install). +```bash +$ cd DynamixelSDK/python +$ pip install . +``` + +- You can check whether pip recognizes the SDK by running the following command: +```bash +$ pip show dynamixel_sdk +Name: dynamixel-sdk +Version: *.*.* +Summary: UNKNOWN +Home-page: UNKNOWN +Author: +Author-email: +License: UNKNOWN +Location: location your sdk installed in # ex. /home/robotis/.local/lib/python3.10/site-packages OR /opt/ros/humble/local/lib/python3.10/dist-packages +Requires: +Required-by: +``` diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/python_macos.md b/_includes/en/software/dynamixel_sdk/library_setup/python_macos.md similarity index 100% rename from docs/en/software/dynamixel/dynamixel_sdk/library_setup/python_macos.md rename to _includes/en/software/dynamixel_sdk/library_setup/python_macos.md diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/python_macos_dummy.md b/_includes/en/software/dynamixel_sdk/library_setup/python_macos_dummy.md similarity index 64% rename from docs/en/software/dynamixel/dynamixel_sdk/library_setup/python_macos_dummy.md rename to _includes/en/software/dynamixel_sdk/library_setup/python_macos_dummy.md index 5cea2f526..e37703575 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/python_macos_dummy.md +++ b/_includes/en/software/dynamixel_sdk/library_setup/python_macos_dummy.md @@ -1,24 +1,20 @@ ---- -layout: archive -lang: en -ref: python_macos -read_time: true -share: true -author_profile: false -permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/python_macos/ -sidebar: - title: DYNAMIXEL SDK - nav: "dynamixel_sdk" ---- - - -
+ -## [Python macOS](#python-macos) +{::options parse_block_html="true" /} + +
+

Library Setup <Python macOS>

+
+ {% include en/maintenance_is_in_progress.md %} diff --git a/_includes/en/software/dynamixel_sdk/library_setup/python_windows.md b/_includes/en/software/dynamixel_sdk/library_setup/python_windows.md new file mode 100644 index 000000000..f6623b8d6 --- /dev/null +++ b/_includes/en/software/dynamixel_sdk/library_setup/python_windows.md @@ -0,0 +1,38 @@ +{::options parse_block_html="true" /} + +
+

Library Setup <Python Windows>

+
+ + +# [Install requirements](#install-requirements) + +- [Install Python3 for WINDOWS](https://www.python.org/downloads/) + +# [Build and Install the SDK](#build-and-install-the-SDK) + +- Open the `{$Dynamixel_SDK}/python` folder. +- Right click on the folder and select `Open in terminal`. +- Build and install Dynamixel_SDK through below command. +```bash +$ pip install . +``` + +- You can check whether pip recognizes the SDK by running the following command: +```bash +$ pip show dynamixel_sdk +Name: dynamixel-sdk +Version: *.*.* +Summary: ~ +Home-page: ~ +Author: ~ +Author-email: ~ +License: ~ +Location: ~ +Requires: +Required-by: +``` diff --git a/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/buildandrun.png b/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/buildandrun.png new file mode 100755 index 000000000..47b2cb3ba Binary files /dev/null and b/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/buildandrun.png differ diff --git a/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/buildproperties.png b/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/buildproperties.png new file mode 100755 index 000000000..fece1f219 Binary files /dev/null and b/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/buildproperties.png differ diff --git a/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/buildproperties2.png b/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/buildproperties2.png new file mode 100755 index 000000000..9d501f9f9 Binary files /dev/null and b/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/buildproperties2.png differ diff --git a/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/makeproject.png b/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/makeproject.png new file mode 100644 index 000000000..4ab0e99a2 Binary files /dev/null and b/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/makeproject.png differ diff --git a/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/runbutton.png b/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/runbutton.png new file mode 100755 index 000000000..78a7ff15e Binary files /dev/null and b/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/runbutton.png differ diff --git a/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/vscodepython.png b/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/vscodepython.png new file mode 100755 index 000000000..7610ff0ea Binary files /dev/null and b/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/vscodepython.png differ diff --git a/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/vs.png b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/vs.png deleted file mode 100644 index 93c44f4b0..000000000 Binary files a/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/vs.png and /dev/null differ diff --git a/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/1.png b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/1.png deleted file mode 100644 index e48c3b7de..000000000 Binary files a/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/1.png and /dev/null differ diff --git a/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/2.png b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/2.png deleted file mode 100644 index fba1cb44b..000000000 Binary files a/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/2.png and /dev/null differ diff --git a/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/3.png b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/3.png deleted file mode 100644 index 380f55320..000000000 Binary files a/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/3.png and /dev/null differ diff --git a/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/4.png b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/4.png deleted file mode 100644 index 5031c829d..000000000 Binary files a/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/4.png and /dev/null differ diff --git a/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/5.png b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/5.png deleted file mode 100644 index 72cbbe537..000000000 Binary files a/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/5.png and /dev/null differ diff --git a/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/buildoutput.png b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/buildoutput.png new file mode 100755 index 000000000..58fb0d7dc Binary files /dev/null and b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/buildoutput.png differ diff --git a/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/buildprocess.png b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/buildprocess.png new file mode 100755 index 000000000..463ea4cd2 Binary files /dev/null and b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/buildprocess.png differ diff --git a/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/buildproperties1.png b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/buildproperties1.png new file mode 100755 index 000000000..2db0c327c Binary files /dev/null and b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/buildproperties1.png differ diff --git a/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/buildproperties2.png b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/buildproperties2.png new file mode 100755 index 000000000..74c470f00 Binary files /dev/null and b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/buildproperties2.png differ diff --git a/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/buildproperties3.png b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/buildproperties3.png new file mode 100755 index 000000000..2eda2ce44 Binary files /dev/null and b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/buildproperties3.png differ diff --git a/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/upgradetoolset.png b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/upgradetoolset.png new file mode 100755 index 000000000..26a38b4e6 Binary files /dev/null and b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/upgradetoolset.png differ diff --git a/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/visualstudio.png b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/visualstudio.png new file mode 100755 index 000000000..7093dc195 Binary files /dev/null and b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/visualstudio.png differ diff --git a/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/visualstudio1.png b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/visualstudio1.png new file mode 100755 index 000000000..12f017a49 Binary files /dev/null and b/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/visualstudio1.png differ diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_groupbulkread.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_groupbulkread.md index a09995e16..3e0d318e2 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_groupbulkread.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_groupbulkread.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_groupbulkwrite.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_groupbulkwrite.md index 96c238055..11c6f678d 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_groupbulkwrite.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_groupbulkwrite.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_groupsyncread.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_groupsyncread.md index 44cc90755..51d34aae5 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_groupsyncread.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_groupsyncread.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_groupsyncwrite.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_groupsyncwrite.md index f4ddc49b1..5d52c82fa 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_groupsyncwrite.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_groupsyncwrite.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_packethandler.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_packethandler.md index fce7c4e71..20ad61292 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_packethandler.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_packethandler.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_porthandler.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_porthandler.md index 3eb083e84..5d848a9fb 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_porthandler.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/c/c_porthandler.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - + # [API Reference](#api-reference) diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_groupbulkread.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_groupbulkread.md index 674bc230f..bd65a4f15 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_groupbulkread.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_groupbulkread.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_groupbulkwrite.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_groupbulkwrite.md index 140e7b983..55d210f67 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_groupbulkwrite.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_groupbulkwrite.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_groupsyncread.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_groupsyncread.md index efcc56ee4..fba39640b 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_groupsyncread.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_groupsyncread.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_groupsyncwrite.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_groupsyncwrite.md index b754e6cab..8ac74d1d6 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_groupsyncwrite.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_groupsyncwrite.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_packethandler.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_packethandler.md index 4e75194ae..794af5399 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_packethandler.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_packethandler.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_porthandler.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_porthandler.md index 041167e40..f14c3bc36 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_porthandler.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/cpp/cpp_porthandler.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_groupbulkread.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_groupbulkread.md index ac462af06..c590f9c94 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_groupbulkread.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_groupbulkread.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_groupbulkwrite.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_groupbulkwrite.md index 1dfcbe8b5..eb14a3c5f 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_groupbulkwrite.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_groupbulkwrite.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_groupsyncread.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_groupsyncread.md index 800869e8e..f7c31e5a6 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_groupsyncread.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_groupsyncread.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_groupsyncwrite.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_groupsyncwrite.md index 54d4a02d5..ca7df940d 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_groupsyncwrite.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_groupsyncwrite.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_packethandler.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_packethandler.md index 150857671..c25c76869 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_packethandler.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_packethandler.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_porthandler.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_porthandler.md index 12b075548..47bf3ace7 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_porthandler.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/csharp/csharp_porthandler.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_groupbulkread.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_groupbulkread.md index 5673e3984..0294a4780 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_groupbulkread.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_groupbulkread.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_groupbulkwrite.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_groupbulkwrite.md index 333aec4b9..72b1245e2 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_groupbulkwrite.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_groupbulkwrite.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_groupsyncread.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_groupsyncread.md index 66fa730f4..9dd103627 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_groupsyncread.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_groupsyncread.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_groupsyncwrite.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_groupsyncwrite.md index f1a1fa513..5b278e968 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_groupsyncwrite.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_groupsyncwrite.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_packethandler.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_packethandler.md index 8b33f0bd3..15ea77d7e 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_packethandler.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_packethandler.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_porthandler.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_porthandler.md index f4886c3c0..0926ad6c5 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_porthandler.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/java/java_porthandler.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_groupbulkread.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_groupbulkread.md index cda56f832..52a006cba 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_groupbulkread.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_groupbulkread.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_groupbulkwrite.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_groupbulkwrite.md index f96ccce28..836d48932 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_groupbulkwrite.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_groupbulkwrite.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_groupsyncread.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_groupsyncread.md index 46fe5a37d..b0dc8273b 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_groupsyncread.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_groupsyncread.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_groupsyncwrite.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_groupsyncwrite.md index c2cc1bf1a..b9caf2b37 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_groupsyncwrite.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_groupsyncwrite.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_packethandler.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_packethandler.md index 3d5f50df8..1da5e6735 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_packethandler.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_packethandler.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_porthandler.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_porthandler.md index 1e21232f9..5ea30a7e7 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_porthandler.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/labview/labview_porthandler.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_groupbulkread.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_groupbulkread.md index 2070c87a7..e1a8d70c6 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_groupbulkread.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_groupbulkread.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_groupbulkwrite.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_groupbulkwrite.md index ca0837782..e1e9424a2 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_groupbulkwrite.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_groupbulkwrite.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_groupsyncread.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_groupsyncread.md index 5aad264f2..4e78ca335 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_groupsyncread.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_groupsyncread.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_groupsyncwrite.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_groupsyncwrite.md index 157fae7b5..67da3937f 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_groupsyncwrite.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_groupsyncwrite.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_packethandler.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_packethandler.md index 865217ff7..e36adff49 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_packethandler.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_packethandler.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_porthandler.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_porthandler.md index cc3298d6d..241ac947a 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_porthandler.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/matlab/matlab_porthandler.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_groupbulkread.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_groupbulkread.md index e11795ed1..1266a54f5 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_groupbulkread.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_groupbulkread.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_groupbulkwrite.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_groupbulkwrite.md index 528f35f45..f805bd32c 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_groupbulkwrite.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_groupbulkwrite.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_groupsyncread.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_groupsyncread.md index fea547108..fb034a629 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_groupsyncread.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_groupsyncread.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_groupsyncwrite.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_groupsyncwrite.md index 19139e245..a20cc3eca 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_groupsyncwrite.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_groupsyncwrite.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_packethandler.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_packethandler.md index 910ac55ac..05a491ac6 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_packethandler.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_packethandler.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_porthandler.md b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_porthandler.md index 30c640110..bac7df6c3 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_porthandler.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/api_reference/python/python_porthandler.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/basic_read_write_tutorial/basic_read_write_tutorial_cpp.md b/docs/en/software/dynamixel/dynamixel_sdk/basic_read_write_tutorial/basic_read_write_tutorial_cpp.md index 068dcce76..f387cc700 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/basic_read_write_tutorial/basic_read_write_tutorial_cpp.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/basic_read_write_tutorial/basic_read_write_tutorial_cpp.md @@ -6,6 +6,9 @@ read_time: true share: true author_profile: false permalink: /docs/en/software/dynamixel/dynamixel_sdk/basic_read_write_tutorial/basic_read_write_tutorial_cpp/ +tabs: "OS" +tab_title1: Linux +tab_title2: Windows sidebar: title: DYNAMIXEL SDK nav: "dynamixel_sdk" @@ -27,34 +30,57 @@ This section provides examples of how to write code in C++ to read and write dat **NOTE**: This tutorial is based on **XL-430-W250** DYNAMIXEL motors and uses **Protocol 2.0**. {: .notice--warning} -# [Read/Write Example](#read-write-example) +# [Make cpp file](#make-cpp-file) + +
-## [Make cpp file](#make-cpp-file) - Create a CPP file and open it in a text editor. In this case, we use visual studio code, but you can use any text editor you prefer. ```bash $ mkdir -p my_dxl_project/src $ cd my_dxl_project/src $ code my_read_write.cpp ``` +
+ +
+ +- Open Visual Studio and create a new project as a Console Application. + ![](/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/makeproject.png) + +
-## [Source Code](#source-code) +# [Source Code Description](#source-code-description) -### [Add Header Files](#add-header-files) +## [Add Header Files](#add-header-files) - Add `dynamixel_sdk/dynamixel_sdk.h` to the top of your CPP file. This header file includes all necessary functions and classes from the DYNAMIXEL SDK. ```cpp #include "dynamixel_sdk/dynamixel_sdk.h" #include ``` -### [Initialize Handler Objects](#make-objects) +## [Initialize Handler Objects](#make-objects) + +
+ - Make main function and initialize the `PortHandler` and `PacketHandler`. Set the `port name` and `protocol version` according to your DYNAMIXEL setup. The example below uses `/dev/ttyUSB0` as the port name and `2.0` as the protocol version. ```cpp int main(){ dynamixel::PortHandler *portHandler = dynamixel::PortHandler::getPortHandler("/dev/ttyUSB0"); // your dxl port name dynamixel::PacketHandler *packetHandler = dynamixel::PacketHandler::getPacketHandler(2.0); //protocol version ``` +
+ +
-### [Open Port and Set Baud Rate](#open-port-and-set-baud-rate) +- Make main function and initialize the `PortHandler` and `PacketHandler`. Set the `port name` and `protocol version` according to your DYNAMIXEL setup. The example below uses `COM3` as the port name and `2.0` as the protocol version. +```cpp + int main(){ + dynamixel::PortHandler *portHandler = dynamixel::PortHandler::getPortHandler("COM3"); // your dxl port name + dynamixel::PacketHandler *packetHandler = dynamixel::PacketHandler::getPacketHandler(2.0); //protocol version +``` +
+ +## [Open Port and Set Baud Rate](#open-port-and-set-baud-rate) - Open the port and set the baud rate. The example below uses `57600` as the baud rate. ```cpp portHandler->openPort(); @@ -83,7 +109,7 @@ $ code my_read_write.cpp ``` -### [Write data to enable torque](#write-data-to-enable-torque) +## [Write data to enable torque](#write-data-to-enable-torque) - Turn on the torque of the DYNAMIXEL. ```cpp uint8_t dxl_id = 1; @@ -119,7 +145,7 @@ The `dxl_comm_result`, `dxl_error` variable should be declared beforehand. ``` -### [Get User Input](#get-user-input-and-write-data) +## [Get User Input](#get-user-input-and-write-data) - Get user input for the target position. ```cpp int target_position; @@ -134,7 +160,7 @@ The `dxl_comm_result`, `dxl_error` variable should be declared beforehand. } ``` -### [Write data to set target position](#write-data-to-set-target-position) +## [Write data to set target position](#write-data-to-set-target-position) - Write the target position to the DYNAMIXEL. ```cpp uint16_t goal_position_address = 116; @@ -162,7 +188,7 @@ The `dxl_comm_result`, `dxl_error` variable should be declared beforehand. ``` -### [Read data from DYNAMIXEL](#read-data-from-dynamixel) +## [Read data from DYNAMIXEL](#read-data-from-dynamixel) - Read the current position from the DYNAMIXEL. ```cpp uint16_t present_position_address = 132; @@ -170,7 +196,7 @@ The `dxl_comm_result`, `dxl_error` variable should be declared beforehand. do { packetHandler->read4ByteTxRx(portHandler, dxl_id, present_position_address, &present_position); std::cout << "Current Position: " << present_position << std::endl; - } while (abs(target_position - present_position) > 10); + } while (abs(static_cast(target_position - present_position)) > 10); } ```
@@ -205,18 +231,45 @@ The `dxl_comm_result`, `dxl_error` variable should be declared beforehand. } ``` -## [Compile and Run](#compile-and-run) +# [Compile and Run](#compile-and-run) + +
+ - Compile the code using g++. ```bash $ g++ my_read_write.cpp -o my_read_write -ldxl_x64_cpp $ ./my_read_write ``` +
-- You will see the following output if the build is successful. -```bash -``` +
+ +- Set build properties. + + ![](/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/buildproperties.png) + - `C/C++ → Additional Include Directories` : `{$Dynamixel_SDK_PATH\c++\include}` + - `Debugging → Environment` : `PATH=%PATH%;{$Dynamixel_SDK_PATH\c++\build\win64\output}` (if you use 32bit architecture, use `{$Dynamixel_SDK_PATH\c++\build\win32\output}`) + + ![](/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/buildproperties2.png) + - `Linker` → `Additional Library Directories` : `{$Dynamixel_SDK_PATH\c++\build\win64\output}` (if you use 32bit architecture, use `{$Dynamixel_SDK_PATH\c++\build\win32\output}`) + - `Linker` → `Input` → `Additional Dependencies` : `dxl_x64_cpp.lib` + +
+ +- **Build properties setup is complete. You can now build and run the project.** + + ![](/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/buildandrun.png) +- **After building, you can find the executable file( .exe ) in the output directory :** `{$YOUR_SLN_DIR\x64\}` + + +**WARNING**: If you execute the .exe file directly(not through the IDE), you might encounter a `missing DLL` error. To fix this, ensure that `dxl_x64_cpp.dll` is either in your system PATH or in the same directory as the application. +{: .notice--warning} +
# [Full Source Code](#full-source-code) + +
+ ```cpp #include "dynamixel_sdk/dynamixel_sdk.h" #include @@ -282,7 +335,86 @@ int main(){ std::cout << packetHandler->getRxPacketError(dxl_error) << std::endl; } std::cout << "Current Position: " << present_position << std::endl; - } while (abs(target_position - present_position) > 10); + } while (abs(static_cast(target_position - present_position)) > 10); + } + + data = 0; + packetHandler->write1ByteTxRx(portHandler, dxl_id, torque_on_address, data); + portHandler->closePort(); + + return 0; +} +``` +
+ +
+ +```cpp +#include "dynamixel_sdk/dynamixel_sdk.h" +#include + +int main(){ + dynamixel::PortHandler *portHandler = dynamixel::PortHandler::getPortHandler("COM3"); + dynamixel::PacketHandler *packetHandler = dynamixel::PacketHandler::getPacketHandler(2.0); + if (portHandler->openPort()) { + std::cout << "Succeeded to open the port!\n"; + } else { + std::cout << "Failed to open the port!\n"; + return 0; + } + + if (portHandler->setBaudRate(57600)) { + std::cout << "Succeeded to change the baudrate!\n"; + } else { + std::cout << "Failed to change the baudrate!\n"; + return 0; + } + + uint8_t dxl_id = 1; + uint16_t torque_on_address = 64; + uint8_t data = 1; + uint8_t dxl_error = 0; + int dxl_comm_result = COMM_TX_FAIL; + + dxl_comm_result = packetHandler->write1ByteTxRx(portHandler, dxl_id, torque_on_address, data, &dxl_error); + if (dxl_comm_result != COMM_SUCCESS) { + std::cout << packetHandler->getTxRxResult(dxl_comm_result) << std::endl; + } else if (dxl_error != 0) { + std::cout << packetHandler->getRxPacketError(dxl_error) << std::endl; + } else { + std::cout << "Dynamixel#1 has been successfully connected \n"; + } + + int target_position; + while(true){ + std::cout << "Enter target position (0 ~ 4095): "; + std::cin >> target_position; + if(target_position == -1){ + break; // Exit on -1 input + } else if(target_position < 0 || target_position > 4095){ + std::cout << "Position must be between 0 and 4095." << std::endl; + continue; + } + + uint16_t goal_position_address = 116; + dxl_comm_result = packetHandler->write4ByteTxRx(portHandler, dxl_id, goal_position_address, uint32_t(target_position), &dxl_error); + if (dxl_comm_result != COMM_SUCCESS) { + std::cout << packetHandler->getTxRxResult(dxl_comm_result) << std::endl; + } else if (dxl_error != 0) { + std::cout << packetHandler->getRxPacketError(dxl_error) << std::endl; + } + + uint16_t present_position_address = 132; + uint32_t present_position; + do { + dxl_comm_result = packetHandler->read4ByteTxRx(portHandler, dxl_id, present_position_address, &present_position, &dxl_error); + if (dxl_comm_result != COMM_SUCCESS) { + std::cout << packetHandler->getTxRxResult(dxl_comm_result) << std::endl; + } else if (dxl_error != 0) { + std::cout << packetHandler->getRxPacketError(dxl_error) << std::endl; + } + std::cout << "Current Position: " << present_position << std::endl; + } while (abs(static_cast(target_position - present_position)) > 10); } data = 0; @@ -292,3 +424,4 @@ int main(){ return 0; } ``` +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/basic_read_write_tutorial/basic_read_write_tutorial_python.md b/docs/en/software/dynamixel/dynamixel_sdk/basic_read_write_tutorial/basic_read_write_tutorial_python.md index 3f903b605..c5633438c 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/basic_read_write_tutorial/basic_read_write_tutorial_python.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/basic_read_write_tutorial/basic_read_write_tutorial_python.md @@ -6,6 +6,9 @@ read_time: true share: true author_profile: false permalink: /docs/en/software/dynamixel/dynamixel_sdk/basic_read_write_tutorial/basic_read_write_tutorial_python/ +tabs: "OS" +tab_title1: Linux +tab_title2: Windows sidebar: title: DYNAMIXEL SDK nav: "dynamixel_sdk" @@ -27,19 +30,28 @@ This section provides examples of how to write code in Python to read and write **NOTE**: This tutorial is based on **XL-430-W250** DYNAMIXEL motors and uses **Protocol 2.0**. {: .notice--warning} -# [Read/Write Example](#read-write-example) +
-## [Make python file](#make-python-file) +# [Make python file](#make-python-file) - Create a python file and open it in a text editor. In this case, we use visual studio code, but you can use any text editor you prefer. ```bash $ mkdir -p my_dxl_project/python $ cd my_dxl_project/python $ code my_read_write.py ``` +
-## [Source Code](#source-code) +
-### [Add Header Files](#add-header-files) +# [Make python file](#make-python-file) +- Open the Visual Studio Code and create a python file in your workspace. + + ![](/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/vscodepython.png) +
+ +# [Source Code Description](#source-code-description) + +## [Add Header Files](#add-header-files) - Add `#!/usr/bin/env python3` and import `dynamixel_sdk` to the top of your py file. This includes all necessary functions and classes from the DYNAMIXEL SDK. ```python #!/usr/bin/env python3 @@ -47,14 +59,27 @@ $ code my_read_write.py from dynamixel_sdk import * ``` -### [Initialize Handler Objects](#make-objects) +## [Initialize Handler Objects](#make-objects) + +
+ - Initialize the `PortHandler` and `PacketHandler`. Set the `port name` and `protocol version` according to your DYNAMIXEL setup. The example below uses `/dev/ttyUSB0` as the port name and `2.0` as the protocol version. ```python portHandler = PortHandler("/dev/ttyUSB0") # your dxl port name packetHandler = PacketHandler(2.0) # protocol version ``` +
+ +
-### [Open Port and Set Baud Rate](#open-port-and-set-baud-rate) +- Initialize the `PortHandler` and `PacketHandler`. Set the `port name` and `protocol version` according to your DYNAMIXEL setup. The example below uses `COM3` as the port name and `2.0` as the protocol version. +```python + portHandler = PortHandler("COM3") # your dxl port name + packetHandler = PacketHandler(2.0) # protocol version +``` +
+ +## [Open Port and Set Baud Rate](#open-port-and-set-baud-rate) - Open the port and set the baud rate. The example below uses `57600` as the baud rate. ```python portHandler.openPort() @@ -81,7 +106,7 @@ else: ```
-### [Write data to enable torque](#write-data-to-enable-torque) +## [Write data to enable torque](#write-data-to-enable-torque) - Turn on the torque of the DYNAMIXEL. ```python dxl_id = 1 @@ -109,7 +134,7 @@ else: ``` -### [Get User Input](#get-user-input-and-write-data) +## [Get User Input](#get-user-input-and-write-data) - Get user input for the target position. ```python while True: @@ -126,7 +151,7 @@ else: continue ``` -### [Write data to set target position](#write-data-to-set-target-position) +## [Write data to set target position](#write-data-to-set-target-position) - Write the target position to the DYNAMIXEL. ```python goal_position_address = 116 @@ -147,7 +172,7 @@ else: ``` -### [Read data from DYNAMIXEL](#read-data-from-dynamixel) +## [Read data from DYNAMIXEL](#read-data-from-dynamixel) - Read the current position from the DYNAMIXEL. ```python while True: @@ -180,13 +205,25 @@ else: portHandler.closePort() ``` -## [Run the Code](#run-the-code) +# [Run the Code](#run-the-code) +
+ - Run the code using python3. ```bash $ python3 my_read_write.py ``` +
+
+ +- Run the code through Visual Studio Code. + + ![](/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/runbutton.png) +
# [Full Source Code](#full-source-code) + +
+ ```python #!/usr/bin/env python3 @@ -255,3 +292,75 @@ data = 0 packetHandler.write1ByteTxRx(portHandler, dxl_id, torque_on_address, data) portHandler.closePort() ``` +
+
+ +```python +#!/usr/bin/env python3 + +from dynamixel_sdk import * + + +portHandler = PortHandler("COM3") +packetHandler = PacketHandler(2.0) + +if portHandler.openPort(): + print("Succeeded to open the port!") +else: + print("Failed to open the port!") + exit() + +if portHandler.setBaudRate(57600): + print("Succeeded to change the baudrate!") +else: + print("Failed to change the baudrate!") + exit() + +dxl_id = 1 +torque_on_address = 64 +data = 1 +dxl_comm_result, dxl_error = packetHandler.write1ByteTxRx(portHandler, dxl_id, torque_on_address, data) +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 True: + try: + target_position = int(input("Enter target position (0 ~ 4095, -1 to exit): ")) + except ValueError: + print("Please enter an integer.") + continue + + if target_position == -1: + break + elif target_position < 0 or target_position > 4095: + print("Position must be between 0 and 4095.") + continue + + goal_position_address = 116 + dxl_comm_result, dxl_error = packetHandler.write4ByteTxRx(portHandler, dxl_id, goal_position_address, target_position) + if dxl_comm_result != COMM_SUCCESS: + print("%s" % packetHandler.getTxRxResult(dxl_comm_result)) + elif dxl_error != 0: + print("%s" % packetHandler.getRxPacketError(dxl_error)) + + while True: + present_position_address = 132 + present_position, dxl_comm_result, dxl_error = packetHandler.read4ByteTxRx(portHandler, dxl_id, present_position_address) + if dxl_comm_result != COMM_SUCCESS: + print("%s" % packetHandler.getTxRxResult(dxl_comm_result)) + elif dxl_error != 0: + print("%s" % packetHandler.getRxPacketError(dxl_error)) + print(f"Current Position: {present_position}") + + if abs(target_position - present_position) <= 10: + break + +data = 0 +packetHandler.write1ByteTxRx(portHandler, dxl_id, torque_on_address, data) +portHandler.closePort() +``` +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/bulk_read_write_tutorial/bulk_read_write_tutorial_cpp.md b/docs/en/software/dynamixel/dynamixel_sdk/bulk_read_write_tutorial/bulk_read_write_tutorial_cpp.md index 9d6b2e394..2eb42e000 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/bulk_read_write_tutorial/bulk_read_write_tutorial_cpp.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/bulk_read_write_tutorial/bulk_read_write_tutorial_cpp.md @@ -6,6 +6,9 @@ read_time: true share: true author_profile: false permalink: /docs/en/software/dynamixel/dynamixel_sdk/bulk_read_write_tutorial/bulk_read_write_tutorial_cpp/ +tabs: "OS" +tab_title1: Linux +tab_title2: Windows sidebar: title: DYNAMIXEL SDK nav: "dynamixel_sdk" @@ -22,34 +25,45 @@ sidebar: } -This section provides examples of how to write code in C++ to bulk_read and bulk_write data to DYNAMIXEL motors. - **NOTE**: This tutorial is based on **XL-430-W250** DYNAMIXEL motors and uses **Protocol 2.0**. {: .notice--warning} -# [Bulk_Read/Write Example](#bulk-read-write-example) +This section provides examples of how to write code in C++ to bulk_read and bulk_write data to DYNAMIXEL motors. **Bulk Read/Write** enables simultaneous control of multiple motors. Unlike **Sync Read/Write**, which can only access the same address across multiple motors, **Bulk Read/Write** can access different addresses on multiple motors in a single instruction. In this example, we need two motors to operate simultaneously. -## [Make cpp file](#make-cpp-file) +# [Make cpp file](#make-cpp-file) + +
+ - Create a CPP file and open it in a text editor. In this case, we use visual studio code, but you can use any text editor you prefer. ```bash $ mkdir -p my_dxl_project/src $ cd my_dxl_project/src $ code my_bulk_read_write.cpp ``` +
-## [Source Code](#source-code) +
-### [Add Header Files](#add-header-files) +- Open Visual Studio and create a new project as a Console Application. + ![](/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/makeproject.png) +
+ +# [Source Code Description](#source-code-description) + +## [Add Header Files](#add-header-files) - Add `dynamixel_sdk/dynamixel_sdk.h` to the top of your CPP file. This header file includes all necessary functions and classes from the DYNAMIXEL SDK. ```cpp #include "dynamixel_sdk/dynamixel_sdk.h" #include ``` -### [Initialize Handler Objects](#make-objects) +## [Initialize Handler Objects](#make-objects) + +
+ - Make main function and initialize the `PortHandler`,`PacketHandler`,`GroupBulkWrite` and `GroupBulkRead`. Set the `port name` and `protocol version` according to your DYNAMIXEL setup. The example below uses `/dev/ttyUSB0` as the port name and `2.0` as the protocol version. ```cpp int main(){ @@ -58,8 +72,21 @@ $ code my_bulk_read_write.cpp dynamixel::GroupBulkWrite groupBulkWrite(portHandler, packetHandler); dynamixel::GroupBulkRead groupBulkRead(portHandler, packetHandler); ``` +
+ +
+ +- Make main function and initialize the `PortHandler`,`PacketHandler`,`GroupBulkWrite` and `GroupBulkRead`. Set the `port name` and `protocol version` according to your DYNAMIXEL setup. The example below uses `COM3` as the port name and `2.0` as the protocol version. +```cpp + int main(){ + dynamixel::PortHandler *portHandler = dynamixel::PortHandler::getPortHandler("COM3"); // your dxl port name + dynamixel::PacketHandler *packetHandler = dynamixel::PacketHandler::getPacketHandler(2.0); //protocol version + dynamixel::GroupBulkWrite groupBulkWrite(portHandler, packetHandler); + dynamixel::GroupBulkRead groupBulkRead(portHandler, packetHandler); +``` +
-### [Open Port and Set Baud Rate](#open-port-and-set-baud-rate) +## [Open Port and Set Baud Rate](#open-port-and-set-baud-rate) - Open the port and set the baud rate. The example below uses `57600` as the baud rate. ```cpp portHandler->openPort(); @@ -88,7 +115,7 @@ $ code my_bulk_read_write.cpp ``` -### [Write data to enable torque](#write-data-to-enable-torque) +## [Write data to enable torque](#write-data-to-enable-torque) - Turn on the torque of the DYNAMIXEL. ```cpp uint8_t dxl_id1 = 1; @@ -134,7 +161,7 @@ The `dxl_comm_result`, `dxl_error` variable should be declared beforehand. ``` -### [Add Parameters to GroupBulkRead](#add-parameters-to-groupbulkread) +## [Add Parameters to GroupBulkRead](#add-parameters-to-groupbulkread) - Add the DYNAMIXEL IDs and addresses to access to the `GroupBulkRead`. ```cpp uint16_t present_position_address = 132; @@ -170,7 +197,7 @@ The `dxl_addparam_result` variable should be declared beforehand. ``` -### [Get User Input and Set Data](#get-user-input-and-write-data) +## [Get User Input and Set Data](#get-user-input-and-write-data) - Get user input for the target position. ```cpp int target_position = 0; @@ -201,7 +228,7 @@ The `dxl_addparam_result` variable should be declared beforehand. } ``` -### [Add parameter to GroupBulkWrite and Write Data](#add-parameters-to-groupbulkwrite) +## [Add parameter to GroupBulkWrite and Write Data](#add-parameters-to-groupbulkwrite) - Add parameter to the `GroupBulkWrite` and tranfer the data to the DYNAMIXEL. ```cpp uint16_t goal_position_address = 116; @@ -241,7 +268,7 @@ The `dxl_addparam_result`, `dxl_comm_result` variables should be declared before ``` -### [Read data from DYNAMIXEL](#read-data-from-dynamixel) +## [Read data from DYNAMIXEL](#read-data-from-dynamixel) - Read the current position and LED data from the DYNAMIXEL until it reaches the target position. ```cpp int dxl1_present_position; @@ -298,14 +325,44 @@ You can also check if the data is available in the `GroupBulkRead` by using the ``` -## [Compile and Run](#compile-and-run) +# [Compile and Run](#compile-and-run) + +
+ - Compile the code using g++. ```bash $ g++ my_bulk_read_write.cpp -o my_bulk_read_write -ldxl_x64_cpp $ ./my_bulk_read_write ``` +
+ +
+ +- Set build properties. + + ![](/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/buildproperties.png) + - `C/C++ → Additional Include Directories` : `{$Dynamixel_SDK_PATH\c++\include}` + - `Debugging → Environment` : `PATH=%PATH%;{$Dynamixel_SDK_PATH\c++\build\win64\output}` (if you use 32bit architecture, use `{$Dynamixel_SDK_PATH\c++\build\win32\output}`) + + ![](/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/buildproperties2.png) + - `Linker` → `Additional Library Directories` : `{$Dynamixel_SDK_PATH\c++\build\win64\output}` (if you use 32bit architecture, use `{$Dynamixel_SDK_PATH\c++\build\win32\output}`) + - `Linker` → `Input` → `Additional Dependencies` : `dxl_x64_cpp.lib` + +
+ +- **Build properties setup is complete. You can now build and run the project.** + + ![](/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/buildandrun.png) +- **After building, you can find the executable file( .exe ) in the output directory :** `{$YOUR_SLN_DIR\x64\}` + +**WARNING**: If you execute the .exe file directly(not through the IDE), you might encounter a `missing DLL` error. To fix this, ensure that `dxl_x64_cpp.dll` is either in your system PATH or in the same directory as the application. +{: .notice--warning} +
# [Full Source Code](#full-source-code) + +
+ ```cpp #include "dynamixel_sdk/dynamixel_sdk.h" #include @@ -447,3 +504,149 @@ int main(){ return 0; } ``` +
+ +
+ +```cpp +#include "dynamixel_sdk/dynamixel_sdk.h" +#include + +int main(){ + dynamixel::PortHandler *portHandler = dynamixel::PortHandler::getPortHandler("COM3"); + dynamixel::PacketHandler *packetHandler = dynamixel::PacketHandler::getPacketHandler(2.0); + dynamixel::GroupBulkWrite groupBulkWrite(portHandler, packetHandler); + dynamixel::GroupBulkRead groupBulkRead(portHandler, packetHandler); + + uint8_t dxl_error = 0; + int dxl_comm_result = COMM_TX_FAIL; + bool dxl_addparam_result = false; + bool dxl_getdata_result = false; + + if (portHandler->openPort()) { + std::cout << "Succeeded to open the port!\n"; + } else { + std::cout << "Failed to open the port!\n"; + return 0; + } + + if (portHandler->setBaudRate(57600)) { + std::cout << "Succeeded to change the baudrate!\n"; + } else { + std::cout << "Failed to change the baudrate!\n"; + return 0; + } + + uint8_t dxl_id1 = 1; + uint8_t dxl_id2 = 2; + uint16_t torque_on_address = 64; + uint8_t data = 1; + dxl_comm_result = packetHandler->write1ByteTxRx(portHandler, dxl_id1, torque_on_address, data, &dxl_error); + if (dxl_comm_result != COMM_SUCCESS) { + std::cout << packetHandler->getTxRxResult(dxl_comm_result) << std::endl; + } else if (dxl_error != 0) { + std::cout << packetHandler->getRxPacketError(dxl_error) << std::endl; + } else { + std::cout << "Dynamixel#1 has been successfully connected \n"; + } + + dxl_comm_result = packetHandler->write1ByteTxRx(portHandler, dxl_id2, torque_on_address, data, &dxl_error); + if (dxl_comm_result != COMM_SUCCESS) { + std::cout << packetHandler->getTxRxResult(dxl_comm_result) << std::endl; + } else if (dxl_error != 0) { + std::cout << packetHandler->getRxPacketError(dxl_error) << std::endl; + } else { + std::cout << "Dynamixel#2 has been successfully connected \n"; + } + + uint16_t present_position_address = 132; + uint16_t data_length_4byte = 4; + dxl_addparam_result = groupBulkRead.addParam(dxl_id1, present_position_address, data_length_4byte); + if (!dxl_addparam_result) { + std::cout <<"[ID:" << (int)dxl_id1 <<"]groupBulkRead addparam failed" << std::endl; + return 0; + } + + uint16_t led_address = 65; + uint16_t data_length_1byte = 1; + dxl_addparam_result = groupBulkRead.addParam(dxl_id2, led_address, data_length_1byte); + if (!dxl_addparam_result) { + std::cout <<"[ID:" << (int)dxl_id2 <<"]groupBulkRead addparam failed" << std::endl; + return 0; + } + + int target_position = 0; + uint8_t dxl2_led_value_read = 0; + while(true){ + std::cout << "Enter target position (0 ~ 4095): "; + std::cin >> target_position; + if(target_position == -1){ + break; + } else if(target_position < 0 || target_position > 4095){ + std::cout << "Position must be between 0 and 4095." << std::endl; + continue; + } + + uint8_t param_goal_position[4]; + param_goal_position[0] = DXL_LOBYTE(DXL_LOWORD(target_position)); + param_goal_position[1] = DXL_HIBYTE(DXL_LOWORD(target_position)); + param_goal_position[2] = DXL_LOBYTE(DXL_HIWORD(target_position)); + param_goal_position[3] = DXL_HIBYTE(DXL_HIWORD(target_position)); + + uint8_t led_data = 0; + if (dxl2_led_value_read == 0){ + led_data = 1; + } else { + led_data = 0; + } + + uint16_t goal_position_address = 116; + dxl_addparam_result = groupBulkWrite.addParam(dxl_id1, goal_position_address, data_length_4byte, param_goal_position); + if (!dxl_addparam_result) { + std::cout <<"[ID:" << (int)dxl_id1 <<"]groupBulkWrite addparam failed" << std::endl; + return 0; + } + + dxl_addparam_result = groupBulkWrite.addParam(dxl_id2, led_address, data_length_1byte, &led_data); + if (!dxl_addparam_result) { + std::cout <<"[ID:" << (int)dxl_id2 <<"]groupBulkWrite addparam failed" << std::endl; + return 0; + } + + dxl_comm_result = groupBulkWrite.txPacket(); + if (dxl_comm_result != COMM_SUCCESS) { + std::cout << packetHandler->getTxRxResult(dxl_comm_result) << std::endl; + } + groupBulkWrite.clearParam(); + + int dxl1_present_position; + do{ + dxl_comm_result = groupBulkRead.txRxPacket(); + if (dxl_comm_result != COMM_SUCCESS) { + std::cout << packetHandler->getTxRxResult(dxl_comm_result) << std::endl; + } + dxl_getdata_result = groupBulkRead.isAvailable(dxl_id1, present_position_address, data_length_4byte); + if (dxl_getdata_result != true) { + std::cout << "[ID:" << (int)dxl_id1 << "] groupBulkRead getdata failed" << std::endl; + return 0; + } + + dxl_getdata_result = groupBulkRead.isAvailable(dxl_id2, led_address, data_length_1byte); + if (dxl_getdata_result != true) { + std::cout << "[ID:" << (int)dxl_id2 << "] groupBulkRead getdata failed" << std::endl; + return 0; + } + dxl1_present_position = groupBulkRead.getData(dxl_id1, present_position_address, data_length_4byte); + dxl2_led_value_read = groupBulkRead.getData(dxl_id2, led_address, data_length_1byte); + printf("[ID:%03d] Present Position : %d \t [ID:%03d] LED Value: %d\n", dxl_id1, dxl1_present_position, dxl_id2, dxl2_led_value_read); + } while (abs(target_position - dxl1_present_position) > 10); + } + data = 0; + packetHandler->write1ByteTxRx(portHandler, dxl_id1, torque_on_address, data); + packetHandler->write1ByteTxRx(portHandler, dxl_id2, torque_on_address, data); + portHandler->closePort(); + + return 0; +} +``` +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/bulk_read_write_tutorial/bulk_read_write_tutorial_python.md b/docs/en/software/dynamixel/dynamixel_sdk/bulk_read_write_tutorial/bulk_read_write_tutorial_python.md index 55d8ec428..0bd553b75 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/bulk_read_write_tutorial/bulk_read_write_tutorial_python.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/bulk_read_write_tutorial/bulk_read_write_tutorial_python.md @@ -6,6 +6,9 @@ read_time: true share: true author_profile: false permalink: /docs/en/software/dynamixel/dynamixel_sdk/bulk_read_write_tutorial/bulk_read_write_tutorial_python/ +tabs: "OS" +tab_title1: Linux +tab_title2: Windows sidebar: title: DYNAMIXEL SDK nav: "dynamixel_sdk" @@ -22,27 +25,36 @@ sidebar: } -This section provides examples of how to write code in python to bulk_read and bulk_write data to DYNAMIXEL motors. - **NOTE**: This tutorial is based on **XL-430-W250** DYNAMIXEL motors and uses **Protocol 2.0**. {: .notice--warning} -# [Bulk_Read/Write Example](#bulk-read-write-example) +This section provides examples of how to write code in python to bulk_read and bulk_write data to DYNAMIXEL motors. **Bulk Read/Write** enables simultaneous control of multiple motors. Unlike **Sync Read/Write**, which can only access the same address across multiple motors, **Bulk Read/Write** can access different addresses on multiple motors in a single instruction. In this example, we need two motors to operate simultaneously. -## [Make python file](#make-python-file) +
+ +# [Make python file](#make-python-file) - Create a python file and open it in a text editor. In this case, we use visual studio code, but you can use any text editor you prefer. ```bash $ mkdir -p my_dxl_project/python $ cd my_dxl_project/python $ code my_bulk_read_write.py ``` +
+ +
+ +# [Make python file](#make-python-file) +- Open the Visual Studio Code and create a python file in your workspace. + + ![](/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/vscodepython.png) +
-## [Source Code](#source-code) +# [Source Code Description](#source-code-description) -### [Add Header Files](#add-header-files) +## [Add Header Files](#add-header-files) - Add `#!/usr/bin/env python3` and import `dynamixel_sdk` to the top of your py file. This includes all necessary functions and classes from the DYNAMIXEL SDK. ```python #!/usr/bin/env python3 @@ -50,7 +62,10 @@ $ code my_bulk_read_write.py from dynamixel_sdk import * ``` -### [Initialize Handler Objects](#make-objects) +## [Initialize Handler Objects](#make-objects) + +
+ - Initialize the `PortHandler`,`PacketHandler`,`GroupBulkWrite` and `GroupBulkRead`. Set the `port name` and `protocol version` according to your DYNAMIXEL setup. The example below uses `/dev/ttyUSB0` as the port name and `2.0` as the protocol version. ```python portHandler = PortHandler('/dev/ttyUSB0') @@ -61,9 +76,23 @@ $ code my_bulk_read_write.py groupBulkWrite = GroupBulkWrite(portHandler, packetHandler) groupBulkRead = GroupBulkRead(portHandler, packetHandler) ``` +
+ +
+- Initialize the `PortHandler`,`PacketHandler`,`GroupBulkWrite` and `GroupBulkRead`. Set the `port name` and `protocol version` according to your DYNAMIXEL setup. The example below uses `COM3` as the port name and `2.0` as the protocol version. +```python + portHandler = PortHandler('COM3') + packetHandler = PacketHandler(2.0) -### [Open Port and Set Baud Rate](#open-port-and-set-baud-rate) + goal_position_address = 116 + present_position_address = 132 + groupBulkWrite = GroupBulkWrite(portHandler, packetHandler) + groupBulkRead = GroupBulkRead(portHandler, packetHandler) +``` +
+ +## [Open Port and Set Baud Rate](#open-port-and-set-baud-rate) - Open the port and set the baud rate. The example below uses `57600` as the baud rate. ```python portHandler.openPort() @@ -90,7 +119,7 @@ else: ``` -### [Write data to enable torque](#write-data-to-enable-torque) +## [Write data to enable torque](#write-data-to-enable-torque) - Turn on the torque of the DYNAMIXEL. ```python dxl_id1 = 1 @@ -128,7 +157,7 @@ else: ``` -### [Add parameters to GroupBulkRead](#add-parameters-to-groupbulkread) +## [Add parameters to GroupBulkRead](#add-parameters-to-groupbulkread) - Add the DYNAMIXEL IDs to the `GroupBulkRead`. ```python present_position_address = 132 @@ -158,7 +187,7 @@ if dxl_addparam_result != True: -### [Get User Input and Set Data](#get-user-input-and-write-data) +## [Get User Input and Set Data](#get-user-input-and-write-data) - Get user input for the target position. ```python dxl2_led_value_read = 0 @@ -190,7 +219,7 @@ if dxl_addparam_result != True: led_data = [0] ``` -### [Add parameters to GroupBulkWrite](#add-parameters-to-groupbulkwrite) +## [Add parameters to GroupBulkWrite](#add-parameters-to-groupbulkwrite) - Add parameter to the `GroupBulkWrite` and tranfer the data to the DYNAMIXEL. Also set the LED data to toggle the LED on the second DYNAMIXEL. ```python groupBulkWrite.addParam(dxl_id1, goal_position_address, data_length_4byte, param_goal_position) @@ -221,7 +250,7 @@ if dxl_addparam_result != True: ``` -### [Read data to get current position](#read-data-to-get-current-position) +## [Read data to get current position](#read-data-to-get-current-position) - Read the current position from the DYNAMIXEL until it reaches the target position. ```python while True: @@ -259,13 +288,27 @@ You can also check if the data is available in the `GroupBulkRead` by using the ``` -## [Run the Code](#run-the-code) +# [Run the Code](#run-the-code) + +
+ - Run the code using python3. ```bash $ python3 my_bulk_read_write.py ``` +
+ +
+ +- Run the code through Visual Studio Code. + + ![](/assets/images/sw/sdk/dynamixel_sdk/basic_read_write_tutorial/runbutton.png) +
# [Full Source Code](#full-source-code) + +
+ ```python #!/usr/bin/env python3 @@ -388,3 +431,130 @@ while True: break portHandler.closePort() ``` +
+ +
+ +```python +#!/usr/bin/env python3 + +from dynamixel_sdk import * + + +portHandler = PortHandler('COM3') +packetHandler = PacketHandler(2.0) + +goal_position_address = 116 +present_position_address = 132 +groupBulkWrite = GroupBulkWrite(portHandler, packetHandler) +groupBulkRead = GroupBulkRead(portHandler, packetHandler) + +if portHandler.openPort(): + print("Succeeded to open the port!") +else: + print("Failed to open the port!") + exit() + +if portHandler.setBaudRate(57600): + print("Succeeded to change the baudrate!") +else: + print("Failed to change the baudrate!") + exit() + +dxl_id1 = 1 +dxl_id2 = 2 +torque_on_address = 64 +data = 1 +dxl_comm_result, dxl_error = packetHandler.write1ByteTxRx(portHandler, dxl_id1, torque_on_address, data) +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#1 has been successfully connected") + +dxl_comm_result, dxl_error = packetHandler.write1ByteTxRx(portHandler, dxl_id2, torque_on_address, data) +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#2 has been successfully connected") + +present_position_address = 132 +data_length_4byte = 4 +dxl_addparam_result = groupBulkRead.addParam(dxl_id1, present_position_address, data_length_4byte) +if dxl_addparam_result != True: + print("[ID:%03d] groupBulkRead addparam failed" % dxl_id1) + exit() + +led_address = 65 +data_length_1byte = 1 +dxl_addparam_result = groupBulkRead.addParam(dxl_id2, led_address, data_length_1byte) +if dxl_addparam_result != True: + print("[ID:%03d] groupBulkRead addparam failed" % dxl_id2) + exit() + +dxl2_led_value_read = 0 +while True: + try: + target_position = int(input("Enter target position (0 ~ 4095, -1 to exit): ")) + except ValueError: + print("Please enter an integer.") + continue + + if target_position == -1: + break + elif target_position < 0 or target_position > 4095: + print("Position must be between 0 and 4095.") + continue + + param_goal_position = [ + DXL_LOBYTE(DXL_LOWORD(target_position)), + DXL_HIBYTE(DXL_LOWORD(target_position)), + DXL_LOBYTE(DXL_HIWORD(target_position)), + DXL_HIBYTE(DXL_HIWORD(target_position)) + ] + + if (dxl2_led_value_read == 0): + led_data = [1] + else: + led_data = [0] + + + dxl_addparam_result = groupBulkWrite.addParam(dxl_id1, goal_position_address, data_length_4byte, param_goal_position) + if not dxl_addparam_result: + print("[ID:%03d] groupBulkWrite addparam failed" % dxl_id1) + exit() + + dxl_addparam_result = groupBulkWrite.addParam(dxl_id2, led_address, data_length_1byte, led_data) + if not dxl_addparam_result: + print("[ID:%03d] groupBulkWrite addparam failed" % dxl_id2) + exit() + + dxl_comm_result = groupBulkWrite.txPacket() + if dxl_comm_result != COMM_SUCCESS: + print("%s" % packetHandler.getTxRxResult(dxl_comm_result)) + groupBulkWrite.clearParam() + + while True: + dxl_comm_result = groupBulkRead.txRxPacket() + if dxl_comm_result != COMM_SUCCESS: + print("%s" % packetHandler.getTxRxResult(dxl_comm_result)) + dxl_getdata_result = groupBulkRead.isAvailable(dxl_id1, present_position_address, data_length_4byte) + if dxl_getdata_result != True: + print("[ID:%03d] groupBulkRead getdata failed" % dxl_id1) + quit() + + dxl_getdata_result = groupBulkRead.isAvailable(dxl_id2, led_address, data_length_1byte) + if dxl_getdata_result != True: + print("[ID:%03d] groupBulkRead getdata failed" % dxl_id2) + quit() + dxl1_present_position = groupBulkRead.getData(dxl_id1, present_position_address, data_length_4byte) + dxl2_led_value_read = groupBulkRead.getData(dxl_id2, led_address, data_length_1byte) + print("[ID:%03d] Present Position : %d \t [ID:%03d] LED Value: %d" % (dxl_id1, dxl1_present_position, dxl_id2, dxl2_led_value_read)) + if abs(target_position - dxl1_present_position) <= 10: + break +portHandler.closePort() +``` +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/dynamixel_api/api_reference.md b/docs/en/software/dynamixel/dynamixel_sdk/dynamixel_api/api_reference.md new file mode 100644 index 000000000..8941464a7 --- /dev/null +++ b/docs/en/software/dynamixel/dynamixel_sdk/dynamixel_api/api_reference.md @@ -0,0 +1,68 @@ +--- +layout: archive +lang: en +ref: api_reference +read_time: true +share: true +author_profile: false +permalink: /docs/en/software/dynamixel/dynamixel_sdk/dynamixel_api/api_reference/ +sidebar: + title: DYNAMIXEL SDK + nav: "dynamixel_sdk" +--- + +{::options parse_block_html="true" /} + +
+

Dynamixel API Reference

+
+ + +# [Connector Class](#connector-class) + +| Return Type | Method | Parameters | Description | +| ------------------------------------- | -------------------- | ---------------------------------------------------------------------- | ----------------------------------------------------------------------| +| — | **`Connector`** | `const std::string & port_name, float protocol_version, int baud_rate` | Initializes the connector. | +| `std::unique_ptr` | **`getMotor`** | `uint8_t id` | Returns a `Motor` instance for the specified ID. | +| `std::vector>` | **`getAllMotors`** | `int start_id = 0, int end_id = 252` | Returns a vector of all `Motor` instances within the given ID range. | + + +# [Motor Class](#motor-class) + +| Return Type | Method | Description | +| :----------------------------| :-------------------------------------------------------------------- | :------------------------------------------------------------------------------------ | +| `Result` | **`enableTorque()`** | Enables the motor torque. | +| `Result` | **`disableTorque()`** | Disables the motor torque. | +| `Result` | **`setGoalPosition(uint32_t position)`** | Sets the target position for the motor. | +| `Result` | **`setGoalVelocity(uint32_t velocity)`** | Sets the target velocity for the motor. | +| `Result` | **`LEDOn()`** | Turns on the motor LED. | +| `Result` | **`LEDOff()`** | Turns off the motor LED. | +| `Result` | **`ping()`** | Pings the motor and returns its model number. | +| `Result` | **`isTorqueOn()`** | Returns whether the torque is currently enabled. | +| `Result` | **`isLEDOn()`** | Returns whether the LED is currently on. | +| `Result` | **`getPresentPosition()`** | Reads the current position of the motor. | +| `Result` | **`getPresentVelocity()`** | Reads the current velocity of the motor. | +| `Result` | **`getMaxPositionLimit()`** | Reads the maximum position limit from the motor. | +| `Result` | **`getMinPositionLimit()`** | Reads the minimum position limit from the motor. | +| `Result` | **`getVelocityLimit()`** | Reads the velocity limit of the motor. | +| `Result` | **`changeID(uint8_t new_id)`** | Changes the motor ID to a new value. | +| `Result` | **`changeBaudRate(int new_baud_rate)`** | Changes the motor communication baud rate. | +| `Result` | **`setPositionControlMode()`** | Sets the motor to position control mode. | +| `Result` | **`setVelocityControlMode()`** | Sets the motor to velocity control mode. | +| `Result` | **`setCurrentControlMode()`** | Sets the motor to current control mode. | +| `Result` | **`setTimeBasedProfile()`** | Configures the motor for time-based profile mode. | +| `Result` | **`setVelocityBasedProfile()`** | Configures the motor for velocity-based profile mode. | +| `Result` | **`setNormalDirection()`** | Sets the motor rotation direction to normal. | +| `Result` | **`setReverseDirection()`** | Sets the motor rotation direction to reverse. | +| `Result` | **`reboot()`** | Reboots the motor. | +| `Result` | **`factoryResetAll()`** | Resets the motor to factory defaults (all settings). | +| `Result` | **`factoryResetExceptID()`** | Resets all settings except the motor ID. | +| `Result` | **`factoryResetExceptIDAndBaudRate()`** | Resets all settings except ID and baud rate. | +| `uint8_t` | **`getID() const`** | Returns the motor ID. | +| `uint16_t` | **`getModelNumber() const`** | Returns the motor model number. | +| `std::string` | **`getModelName() const`** | Returns the motor model name. | + diff --git a/docs/en/software/dynamixel/dynamixel_sdk/dynamixel_api/examples.md b/docs/en/software/dynamixel/dynamixel_sdk/dynamixel_api/examples.md new file mode 100644 index 000000000..c5d0e6393 --- /dev/null +++ b/docs/en/software/dynamixel/dynamixel_sdk/dynamixel_api/examples.md @@ -0,0 +1,92 @@ +--- +layout: archive +lang: en +ref: examples +read_time: true +share: true +author_profile: false +permalink: /docs/en/software/dynamixel/dynamixel_sdk/dynamixel_api/examples/ +sidebar: + title: DYNAMIXEL SDK + nav: "dynamixel_sdk" +--- + +{::options parse_block_html="true" /} + +
+

Dynamixel API Examples

+
+ + +# [Run Examples](#run-examples) +- The example codes are located in the `dynamixel_sdk/examples/dynamixel_api` directory of the Dynamixel SDK package. +- Be sure to install the SDK in your system before running the examples. +- You can compile and run the examples using the following commands +```bash +$ cd~/DynamixelSDK/build/dynamixel_sdk/examples/dynamixel_api +$ g++ basic_test.cpp -o basic_test -l dxl_x64_cpp +``` +- Run the exectuable file +```bash +$ ./basic_test +Dynamixel API Source Test Code +┌─────[Test Process]────┐ +│ 1. Ping Test │ +│ 2. Torque ON/OFF Test │ +│ 3. Position Test │ +│ 4. Velocity Test │ +│ 5. LED Test │ +│ 6. Reverse Mode Test │ +└───────────────────────┘ +Baudrate set to: 57600 +Scanning all motors... +┌───────────[Motor List]──────────┐ +│ ID: 2, Model: xl430_w250.model │ +└─────────────────────────────────┘ +The test is conducted only on the motor with ID 2 +Press any key to continue! (or press ESC to quit!) +┌──────[Ping Test]─────┐ +│Ping result: 1060 │ +└──────────────────────┘ +Press any key to continue! (or press ESC to quit!) +┌──[Torque ON/OFF Test]──┐ +│Torque ON result: 1 │ +│Torque OFF result: 0 │ +└────────────────────────┘ +Press any key to continue! (or press ESC to quit!) +───────────[Position Control Test]───────────── +Position Control Mode set. +Torque ON. +Target Position:4095. +Target position reached: 4087 +Target Position: 0. +Target position reached: 5 +Torque OFF. +─────────────────────────────────────────────── +Press any key to continue! (or press ESC to quit!) +───────────[Velocity Control Test]───────────── +Velocity Control Mode set. +Torque ON. +Target Velocity: 265 +Target velocity reached.260 +Goal velocity set to -265. +Target velocity reached.-260 +Torque OFF. +─────────────────────────────────────────────── +Press any key to continue! (or press ESC to quit!) +───────────[Direction Test]───────────── +Reverse Direction set. +Set goal velocity :265 +Normal Direction set. +Press any key to continue! (or press ESC to quit!) +───────────[LED Test]───────────── +LED ON. +LED ON result: 1 +LED OFF. +LED OFF result: 0 +``` + diff --git a/docs/en/software/dynamixel/dynamixel_sdk/dynamixel_api/introduction.md b/docs/en/software/dynamixel/dynamixel_sdk/dynamixel_api/introduction.md new file mode 100644 index 000000000..92dbbb634 --- /dev/null +++ b/docs/en/software/dynamixel/dynamixel_sdk/dynamixel_api/introduction.md @@ -0,0 +1,39 @@ +--- +layout: archive +lang: en +ref: introduction +read_time: true +share: true +author_profile: false +permalink: /docs/en/software/dynamixel/dynamixel_sdk/dynamixel_api/introduction/ +sidebar: + title: DYNAMIXEL SDK + nav: "dynamixel_sdk" +--- + +{::options parse_block_html="true" /} + +
+

Dynamixel API Introduction

+
+ + + + +# [Overview](#overview) +The dynamixel_api is a high-level, object-oriented C++ library designed to wrap the standard low-level Dynamixel SDK. Its primary goal is to provide a more intuitive, safer, and easier-to-use interface for controlling Dynamixel servos, allowing developers to focus on their robotics application instead of low-level communication protocols. + +# [Features](#features) +- **Object-Oriented Design**: Each Dynamixel servo is managed as a distinct Motor object. By mapping the physical motor to a software object on a 1:1 basis, users can intuitively control a specific motor. +- **Intuitive Abstraction**: The dynamixel_api provides functions with clear and descriptive names, allowing users to control motors without needing to understand the underlying protocol. For example, calling `motor1.torque_enable()` directly conveys its purpose, making the API easy to learn and use. +- **Automatic Model Recognition**: The API can automatically detect the connected Dynamixel model and load its corresponding control table, eliminating the need for manual configuration and simplifying development. +- **Error Handling**: Instead of returning a raw int, the API now uses a result object that encapsulates both communication errors and Dynamixel-specific errors. This allows developers to handle all error cases in a unified way, making error logging code more concise and improving readability. + +# Supported Environments +- **Programming Languages**: `C++ (17 standard or later)` +- **Operating Systems**: `Linux 64-bit` +- **Protocols**: `2.0` diff --git a/docs/en/software/dynamixel/dynamixel_sdk/dynamixel_api/tutorials.md b/docs/en/software/dynamixel/dynamixel_sdk/dynamixel_api/tutorials.md new file mode 100644 index 000000000..7f9f25ff3 --- /dev/null +++ b/docs/en/software/dynamixel/dynamixel_sdk/dynamixel_api/tutorials.md @@ -0,0 +1,193 @@ +--- +layout: archive +lang: en +ref: tutorials +read_time: true +share: true +author_profile: false +permalink: /docs/en/software/dynamixel/dynamixel_sdk/dynamixel_api/tutorials/ +sidebar: + title: DYNAMIXEL SDK + nav: "dynamixel_sdk" +--- + +{::options parse_block_html="true" /} + +
+

Dynamixel API Tutorials

+
+ + +# [Make cpp file](#make-cpp-file) +**NOTE**: This tutorial explains how to write code using the Dynamixel API. It assumes that you have already installed the SDK. +{:.notice--warning} + +- Open a code editor and create a new C++ source file. In this example, we use visual studio code. +```bash +$ code dxl_api_tutorial.cpp +``` + +# [Source Code Description](#source-code-description) + +## [Add Header Files](#add-header-files) +- Add `dynamixel_sdk/dynamixel_api.hpp` to the top of your CPP file. This class is included in the Dynamixel SDK package. +```cpp +#include "dynamixel_sdk/dynamixel_api.hpp" +``` + +## [Initialize Objects](#make-objects) +- Create a `Connector` object to manage the communication port and protocol version. (Only protocol 2.0 is supported) +- Create a `Motor` object for each Dynamixel servo you want to control, using the `getMotor` method of the `Connector` class. This method takes the motor ID as an argument and returns a unique pointer to a `Motor` instance. (shared_ptr is also available) +- This process throws a `DxlRuntimeError` if the object creation fails. +```cpp + int main(){ + dynamixel::Connector connector("/dev/ttyUSB0", 2.0, 57600); + std::unique_ptr motor1 = connector.getMotor(1); +``` + +## [Torque Control](#torque-control) +- Use the methods provided by the `Motor` class to control the Dynamixel servo. +- Each method returns a `Result` object that encapsulates both read information and errors. +- Disable torque. +```cpp + auto result_void = motor1->disableTorque(); // result_void type is Result +``` +- Checking if torque is on. You need to use a different Result object depending on the type of the value read from Result. +```cpp + auto result_uint8_t = motor1->isTorqueOn(); // result_uint8_t type is Result + std::cout << "Torque ON result: " << static_cast(result_uint8_t.value()) << std::endl; +``` + +## [Position Control](#set-position-control-mode) +- Set the control mode to position control. +```cpp + result_void = motor1->setPositionControlMode(); // result_void type is Result +``` +- Enable torque. +```cpp + result_void = motor1->enableTorque(); // result_void type is Result +``` +- Get motor position limits. +```cpp + auto result_uint32_t = motor1->getMinPositionLimit(); // result_uint32_t type is Result + uint32_t min_position = result_uint32_t.value(); + + result_uint32_t = motor1->getMaxPositionLimit(); // result_uint32_t type is Result + uint32_t max_position = result_uint32_t.value(); +``` +- Get user input for target position. +```cpp + while (true) { + int goal_position; + std::cout << "Enter goal position" << "(" << min_position << "~" << max_position << "): "; + std::cin >> goal_position; + + if (goal_position < min_position || goal_position > max_position) { + std::cerr << "Invalid goal position. Please enter a value within the limits." << std::endl; + continue; + } +``` +- Set the target position. +```cpp + result_void = motor1->setGoalPosition(goal_position); // result_void type is Result +``` +- Example of reading present position. +```cpp + int32_t present_position; + do { + auto result_int32_t = motor1->getPresentPosition(); // result_int32_t type is Result + present_position = result_int32_t.value(); + std::cout << "\rTarget position reached: " << present_position<< " " << std::flush; + } while (abs(static_cast(target_position - present_position)) > 10); + } + } +``` + +# [Error Handling](#error-handling) +- You can check for communication errors and device(dynamixel) errors using the `Result` object. +``` cpp + if (!result_void.isSuccess()) { + std::cerr << dynamixel::getErrorMessage(result_void.error()) << std::endl; + return 1; + } +``` + +# [Compile and Run](#compile-and-run) +- You can compile and run the code using the following commands +```bash +$ g++ dxl_api_tutorial.cpp -o dxl_api_tutorial -l dxl_x64_cpp +$ ./dxl_api_tutorial +``` + +# [Full Source Code](#full-source-code) +```cpp +#include "dynamixel_sdk/dynamixel_api.hpp" + +int main(){ + dynamixel::Connector connector("/dev/ttyUSB0", 2.0, 57600); + std::unique_ptr motor1 = connector.getMotor(2); + auto result_void = motor1->disableTorque(); // result_void type is Result + if (!result_void.isSuccess()) { + std::cerr << dynamixel::getErrorMessage(result_void.error()) << std::endl; + return 1; + } + auto result_uint8_t = motor1->isTorqueOn(); // result_uint8_t type is Result + if (!result_uint8_t.isSuccess()) { + std::cerr << dynamixel::getErrorMessage(result_uint8_t.error()) << std::endl; + return 1; + } + std::cout << "Torque ON result: " << static_cast(result_uint8_t.value()) << std::endl; + result_void = motor1->setPositionControlMode(); // result_void type is Result + if (!result_void.isSuccess()) { + std::cerr << dynamixel::getErrorMessage(result_void.error()) << std::endl; + return 1; + } + result_void = motor1->enableTorque(); // result_void type is Result + if (!result_void.isSuccess()) { + std::cerr << dynamixel::getErrorMessage(result_void.error()) << std::endl; + return 1; + } + auto result_uint32_t = motor1->getMinPositionLimit(); // result_uint32_t type is Result + if (!result_uint32_t.isSuccess()) { + std::cerr << dynamixel::getErrorMessage(result_uint32_t.error()) << std::endl; + return 1; + } + uint32_t min_position = result_uint32_t.value(); + + result_uint32_t = motor1->getMaxPositionLimit(); // result_uint32_t type is Result + if (!result_uint32_t.isSuccess()) { + std::cerr << dynamixel::getErrorMessage(result_uint32_t.error()) << std::endl; + return 1; + } + uint32_t max_position = result_uint32_t.value(); + while (true) { + int goal_position; + std::cout << "Enter goal position" << "(" << min_position << "~" << max_position << "): "; + std::cin >> goal_position; + + if (goal_position < min_position || goal_position > max_position) { + std::cerr << "Invalid goal position. Please enter a value within the limits." << std::endl; + continue; + } + result_void = motor1->setGoalPosition(goal_position); // result_void type is Result + if (!result_void.isSuccess()) { + std::cerr << dynamixel::getErrorMessage(result_void.error()) << std::endl; + return 1; + } + int32_t present_position; + do { + auto result_int32_t = motor1->getPresentPosition(); // result_int32_t type is Result + if (!result_int32_t.isSuccess()) { + std::cerr << dynamixel::getErrorMessage(result_int32_t.error()) << std::endl; + return 1; + } + present_position = result_int32_t.value(); + std::cout << "\rTarget position reached: " << present_position<< " " << std::flush; + } while (abs(static_cast(goal_position - present_position)) > 10); + } +} +``` diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup.md b/docs/en/software/dynamixel/dynamixel_sdk/library_setup.md index 5c97f4801..07783ef40 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/library_setup.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/library_setup.md @@ -25,21 +25,9 @@ page_number: 4 - Library Setup is the process of building the SDK library. - - [C Windows](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/c_windows) - - [C Linux](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/c_linux) - - [C macOS](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/c_macos) - - [C++ Windows](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/cpp_windows) - - [C++ Linux](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/cpp_linux/#library-setup-cpp-linux) - - [C++ macOS](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/cpp_macos) - - [Python Windows](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/python_windows) - - [Python Linux](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/python_linux) - - [Python macOS](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/python_macos) - - [Java Windows](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/java_windows) - - [Java Linux](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/java_linux) - - [Java macOS](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/java_macos) - - [C# Windows](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/csharp_windows) - - [C# Linux](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/csharp_linux) - - [C# macOS](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/csharp_macos) - - [MATLAB Windows](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/matlab_windows) - - [MATLAB Linux](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/matlab_linux) - - [MATLAB macOS](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/matlab_macos) + - [C](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/c/#library-setup-c-linux) + - [C++](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/cpp/#library-setup-cpp-linux) + - [Python](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/python/#library-setup-python-linux) + - [Java](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/java/#library-setup-java-linux) + - [C#](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/csharp/#library-setup-csharp-windows) + - [MATLAB](/docs/en/software/dynamixel/dynamixel_sdk/library_setup/matlab/#library-setup-matlab-windows) diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/c_linux.md b/docs/en/software/dynamixel/dynamixel_sdk/library_setup/c_linux.md deleted file mode 100644 index f4cbe8e65..000000000 --- a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/c_linux.md +++ /dev/null @@ -1,175 +0,0 @@ ---- -layout: archive -lang: en -ref: c_linux -read_time: true -share: true -author_profile: false -permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/c_linux/ -sidebar: - title: DYNAMIXEL SDK - nav: "dynamixel_sdk" ---- - - -
- - - -## [C Linux](#c-linux) - -This tutorial is written assuming you are using the latest version of Ubuntu. Commands may not be the same for alternative distributions of Linux. - -### [Compiler and Builder](#compiler-and-builder) - -#### [Compiler](#compiler) - -* The DYNAMIXEL SKD requires GNU gcc ver. 5.4.0 20160609 or higher -* To check the version of your gcc compiler: - - ``` bash - $ gcc -v - ``` - -* Download the required compiler: - - ``` bash - $ sudo apt-get install gcc - ``` - -#### [Builder](#builder) - -* Build-essential pkg → make -* Download: - - ``` bash - $ sudo apt-get install build-essential - ``` - -#### [Dependent Packages](#dependent-packages) - -* Packages needed for cross-compiling -* Download: - - ``` bash - $ sudo apt-get install gcc-multilib g++-multilib - ``` - -#### [Build the Library](#build-the-library) - -* Choose which format (32bit or 64bit) of the library you will be bulding. - The Makefile is located in the following folder: `[DynamixelSDK folder]/c/build/linux32` OR `[DynamixelSDK folder]/c/build/linux64` folder for 32/64-bit platforms OR `[DynamixelSDK folder]/c/build/linux_sbc` folder for ARM SBCs. - Please note that if you intend to use the 32-bit example applications, you must build the 32-bit library. - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/linux/library_file/c6.png) - -* Go to the Makefile's directory located in `[DynamixelSDK folder]/c/build/linux32` OR `[DynamixelSDK folder]/c/build/linux64` OR `[DynamixelSDK folder]/c/build/linux_sbc` using $ `cd`. - - -* Build the library file: - - ``` bash - $ make - ``` - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/linux/library_file/c1.png) - - -* If there is an error, try rebuilding the package after cleaning any leftover files. - - ``` bash - $ make clean && make - ``` - -* To delete the library file and object files after a successful build: - - ``` bash - $ make clean - ``` - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/linux/library_file/c2.png) - -##### Copy (Install) the Library to the Root Directory - -* Make the library file and copy it to the root directory (to handle the serial port): - - ``` bash - $ sudo make install - ``` - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/linux/library_file/c3.png) - -* If there is an error, you can retry the installation: - - ``` bash - $ sudo make uninstall && sudo make install - ``` - - OR - - ``` bash - $ sudo make reinstall - ``` - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/linux/library_file/c4.png) - -* To delete the library file from the root directory: - - ``` bash - $ sudo make uninstall - ``` - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/linux/library_file/c5.png) - - -* You will see the built library file in `[DynamixelSDK folder]/c/build/[linuxXX]/libdxl_xYY_c.so` - -### [Building and Running the Sample Code](#building-and-running-the-sample-code) - -The DYNAMIXEL SDK example code for C uses a .so (Linux Shared Object) library built in C. -The previous instructions walk you through building the latest library files in `[DynamixelSDK folder]/c/build/[linuxXX]/libdxl_xYY_c.so` built by its own source code. - -* Go to the Makefile's directory using `cd`: - - ``` bash - $ cd [DynamixelSDK folder]/c/example/protocol1.0/read_write/linux32 - ``` - - OR - - ``` bash - $ cd [DynamixelSDK folder]/c/example/protocol1.0/read_write/linux64 - ``` - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/linux/sample_code/exc4.png) - -* Build the executable file: - - ``` bash - $ make - ``` - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/linux/sample_code/exc1.png) - -* If there is an error, `$ make clean` then `$ make` again. - -* To delete the executable file, `$ make clean`. - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/linux/sample_code/exc2.png) - -* Access the port you will be using to communicate with DYNAMIXEL: - - ``` bash - $ sudo chmod a+rw /dev/ttyUSB0 - ``` - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/linux/sample_code/exc3.png) - -* Run the executable file: - - ``` bash - $ ./read_write - ``` - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/linux/sample_code/exc5.png) diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/cpp_windows.md b/docs/en/software/dynamixel/dynamixel_sdk/library_setup/cpp_windows.md deleted file mode 100644 index 3545b64ed..000000000 --- a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/cpp_windows.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -layout: archive -lang: en -ref: cpp_windows -read_time: true -share: true -author_profile: false -permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/cpp_windows/ -sidebar: - title: DYNAMIXEL SDK - nav: "dynamixel_sdk" ---- - - -
- - - -## [CPP Windows](#cpp-windows) - -### [Compiler and Builder](#compiler-and-builder) - -* [Download Visual Studio Community for Windows Desktop](https://www.visualstudio.com/en-us/products/visual-studio-express-vs.aspx) - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/vs.png) - -### [Building the Library](#building-the-library) - -* Run the project solution file (.sln) located in the `[DynamixelSDK folder]/c++/build/win32` directory (or the `[DynamixelSDK folder]/c++/build/win64` directory) - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/1.png) - -* In the Solution Explorer, right click on the project and select Properties. - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/2.png) - -* Under General Configuration Properties, confirm that the paths and file extensions are set to the following: - - * Output Directory: `$(SolutionDir)output\` - * Intermediate Directory: `$(Configuration)\` - * Platform Toolset: `Visual Studio 20XX (v000)` - * Configuration Type: `Dynamic Library (.dll)` - -{% capture notice_01 %} -**WARNING**: -If the library file needs to be built in a lower or higher version of Visual Studio, change the `Platform Toolset` into the needed value. (ex: To use the DynamixelSDK c ver. library file in the MATLAB 2010 or LabVIEW 2010, the `Platform Toolset` should be changed to `Visual Studio 2009` lower.) -{% endcapture %} -
{{ notice_01 | markdownify }}
- - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/3.png) - -* Confirm that the Additional Include Directories path under the General C/C++ Configuration Properties tree is as follows: - - `..\..\..\include\dynamixel_sdk` - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/4.png) - -* Right click on the project and select Build to build the library. - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/library_file/5.png) - -* The compiled library file will be saved in `[DynamixelSDK folder]/c++/build/[winXX]/output/dxl_xYY_cpp.dll` - - -### [Building and Running the Sample Code](#building-and-running-the-sample-code) - -The DYNAMIXEL SDK example code for CPP uses the library files (.dll for Windows) built from the CPP source. - -By following the instructions above, The compiled .dll files are output to `[DynamixelSDK folder]/c/build/[winXX]/output/dxl_xYY_c.dll` after being built from the included source code. - -* Run the .sln file located in the `[DynamixelSDK folder]/cpp/example/protocol2.0/read_write/win32` folder if you have a 32-bit platform OR the `[DynamixelSDK folder]/cpp/example/protocol2.0/read_write/win64` folder if you have a 64-bit platform. - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/sample_code/1.png) - -* Right click on the project and select Properties. - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/sample_code/2.png) - -* In the resulting Property Pages window, under Configuration Properties --> General, check that the directories and file extensions are set as follows: - - * Output Directory: `$(SolutionDir)$(Configuration)\` - * Intermediate Directory: `$(Configuration)\` - * Target Extension: `.exe` - * Configuration Type: `Application (.exe)` - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/sample_code/3.png) - -* Add the path to the Debugging-Environment tab as shown below. - - - [win32] `PATH=%PATH%;..\..\..\..\..\build\win32\output;` - - [win64] `PATH=%PATH%;..\..\..\..\..\build\win64\output;` - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/sample_code/4.png) - -* Add the path path in VC++-Library Directories tab as shown below. - - - [win32] `..\..\..\..\..\build\win32\output;` - - [win64] `..\..\..\..\..\build\win64\output;` - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/sample_code/5.png) - -* Add the path in C/C++-Common-Additional include directory tab as shown below. - - `..\..\..\..\..\include\dynamixel_sdk` - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/sample_code/6.png) - -* Add the file name in Linker-Input-Additional dependency tab as shown below. - - - [win32] `dxl_x86_cpp.lib;` - - [win64] `dxl_x64_cpp.lib;` - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/sample_code/7.png) - -* Click the Debugger button to run the program - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/cpp/windows/sample_code/8.png) diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_c.md b/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_c.md new file mode 100644 index 000000000..ea7384876 --- /dev/null +++ b/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_c.md @@ -0,0 +1,32 @@ +--- +layout: archive +lang: en +ref: library_setup_c +read_time: true +share: true +author_profile: false +permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/c/ +tabs: "OS" +tab_title1: Linux +tab_title2: Windows +tab_title3: Mac +sidebar: + title: DYNAMIXEL SDK + nav: "dynamixel_sdk" +--- + +{::options parse_block_html="true" /} + + + +
+{% include en/software/dynamixel_sdk/library_setup/c_linux.md %} +
+ +
+{% include en/software/dynamixel_sdk/library_setup/c_windows.md %} +
+ +
+{% include en/software/dynamixel_sdk/library_setup/c_macos_dummy.md %} +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_cpp.md b/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_cpp.md new file mode 100644 index 000000000..cd406e63d --- /dev/null +++ b/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_cpp.md @@ -0,0 +1,32 @@ +--- +layout: archive +lang: en +ref: library_setup_cpp +read_time: true +share: true +author_profile: false +permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/cpp/ +tabs: "OS" +tab_title1: Linux +tab_title2: Windows +tab_title3: Mac +sidebar: + title: DYNAMIXEL SDK + nav: "dynamixel_sdk" +--- + +{::options parse_block_html="true" /} + + + +
+{% include en/software/dynamixel_sdk/library_setup/cpp_linux.md %} +
+ +
+{% include en/software/dynamixel_sdk/library_setup/cpp_windows.md %} +
+ +
+{% include en/software/dynamixel_sdk/library_setup/cpp_macos_dummy.md %} +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_csharp.md b/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_csharp.md new file mode 100644 index 000000000..66e34f677 --- /dev/null +++ b/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_csharp.md @@ -0,0 +1,22 @@ +--- +layout: archive +lang: en +ref: library_setup_csharp +read_time: true +share: true +author_profile: false +permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/csharp/ +tabs: "OS" +tab_title1: Windows +sidebar: + title: DYNAMIXEL SDK + nav: "dynamixel_sdk" +--- + +{::options parse_block_html="true" /} + + + +
+{% include en/software/dynamixel_sdk/library_setup/csharp_windows.md %} +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_java.md b/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_java.md new file mode 100644 index 000000000..ab5a1fa26 --- /dev/null +++ b/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_java.md @@ -0,0 +1,33 @@ +--- +layout: archive +lang: en +ref: library_setup_java +read_time: true +share: true +author_profile: false +permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/java/ +tabs: "OS" +tab_title1: Linux +tab_title2: Windows +tab_title3: Mac +sidebar: + title: DYNAMIXEL SDK + nav: "dynamixel_sdk" +--- + +{::options parse_block_html="true" /} + + + +
+{% include en/software/dynamixel_sdk/library_setup/java_linux.md %} +
+ +
+{% include en/software/dynamixel_sdk/library_setup/java_windows.md %} +
+ +
+{% include en/software/dynamixel_sdk/library_setup/java_macos_dummy.md %} +
+ diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_labview.md b/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_labview.md new file mode 100644 index 000000000..07c2dd9fb --- /dev/null +++ b/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_labview.md @@ -0,0 +1,23 @@ +--- +layout: archive +lang: en +ref: library_setup_labview +read_time: true +share: true +author_profile: false +permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/labview/ +tabs: "OS" +tab_title1: Windows +sidebar: + title: DYNAMIXEL SDK + nav: "dynamixel_sdk" +--- + +{::options parse_block_html="true" /} + + + +
+{% include en/software/dynamixel_sdk/library_setup/labview_windows.md %} +
+ diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_matlab.md b/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_matlab.md new file mode 100644 index 000000000..ab733c25b --- /dev/null +++ b/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_matlab.md @@ -0,0 +1,32 @@ +--- +layout: archive +lang: en +ref: library_setup_matlab +read_time: true +share: true +author_profile: false +permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/matlab/ +tabs: "OS" +tab_title1: Linux +tab_title2: Windows +tab_title3: Mac +sidebar: + title: DYNAMIXEL SDK + nav: "dynamixel_sdk" +--- + +{::options parse_block_html="true" /} + + + +
+{% include en/software/dynamixel_sdk/library_setup/matlab_linux.md %} +
+ +
+{% include en/software/dynamixel_sdk/library_setup/matlab_windows.md %} +
+ +
+{% include en/software/dynamixel_sdk/library_setup/matlab_macos_dummy.md %} +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_python.md b/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_python.md new file mode 100644 index 000000000..60149867d --- /dev/null +++ b/docs/en/software/dynamixel/dynamixel_sdk/library_setup/library_setup_python.md @@ -0,0 +1,35 @@ +--- +layout: archive +lang: en +ref: library_setup_python +read_time: true +share: true +author_profile: false +permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/python/ +tabs: "OS" +tab_title1: Linux +tab_title2: Windows +tab_title3: Mac +sidebar: + title: DYNAMIXEL SDK + nav: "dynamixel_sdk" +--- + +{::options parse_block_html="true" /} + + + +
+{% include en/software/dynamixel_sdk/library_setup/python_linux.md %} +
+ +
+{% include en/software/dynamixel_sdk/library_setup/python_windows.md %} +
+ +
+{% include en/software/dynamixel_sdk/library_setup/python_macos_dummy.md %} +
+ +




+




diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/matlab_macos_dummy.md b/docs/en/software/dynamixel/dynamixel_sdk/library_setup/matlab_macos_dummy.md deleted file mode 100644 index bf338b014..000000000 --- a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/matlab_macos_dummy.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -layout: archive -lang: en -ref: matlab_macos -read_time: true -share: true -author_profile: false -permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/matlab_macos/ -sidebar: - title: DYNAMIXEL SDK - nav: "dynamixel_sdk" ---- - - -
- - - -## [Matlab macOS](#matlab-macos) - -{% include en/maintenance_is_in_progress.md %} - - diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/python_linux.md b/docs/en/software/dynamixel/dynamixel_sdk/library_setup/python_linux.md deleted file mode 100644 index fe2e580cd..000000000 --- a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/python_linux.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -layout: archive -lang: en -ref: python_linux -read_time: true -share: true -author_profile: false -permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/python_linux/ -sidebar: - title: DYNAMIXEL SDK - nav: "dynamixel_sdk" ---- - -{::options parse_block_html="true" /} - -
-

Library Setup

-
- - -# [Install requirements](#install-requirements) - -- Install python3 and pip3. -```bash -$ sudo apt update -$ sudo apt install python3 python3-pip python3-serial -``` - -- You can also install in web browser using the following link: - [Download Python3 for Linux](https://www.python.org/downloads/) - -- If you downloaded SDK as source code, you should install it using pip3. -```bash -$ cd DynamixelSDK/python -$ pip install . -``` - -# [Check whether pip recognizes the SDK](#check-whether-pip-recognizes-the-sdk) - -- You can check whether pip recognizes the SDK by running the following command: -```bash -$ pip show dynamixel_sdk -Name: dynamixel-sdk -Version: *.*.* -Summary: UNKNOWN -Home-page: UNKNOWN -Author: -Author-email: -License: UNKNOWN -Location: location your sdk installed in # ex. /home/robotis/.local/lib/python3.10/site-packages OR /opt/ros/humble/local/lib/python3.10/dist-packages -Requires: -Required-by: -``` - - diff --git a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/python_windows.md b/docs/en/software/dynamixel/dynamixel_sdk/library_setup/python_windows.md deleted file mode 100644 index 143b86730..000000000 --- a/docs/en/software/dynamixel/dynamixel_sdk/library_setup/python_windows.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -layout: archive -lang: en -ref: python_windows -read_time: true -share: true -author_profile: false -permalink: /docs/en/software/dynamixel/dynamixel_sdk/library_setup/python_windows/ -sidebar: - title: DYNAMIXEL SDK - nav: "dynamixel_sdk" ---- - - -
- - - -## [Python Windows](#python-windows) - -### [Recommended Editor](#recommended-editor) - -* [Download Visual Studio Community for Windows Desktop](https://www.visualstudio.com/en-us/products/visual-studio-express-vs.aspx) - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/c/vs.png) - -### [Compiler and Builder](#compiler-and-builder) - -![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/python/python.png) - -* [Download Python3 for Windows](https://www.python.org/downloads/), and be sure to install it to your path when prompted. - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/python/windows/library_file/b1.png) - -### [Building the Library](#building-the-library) -* Navigate to the [`DynamixelSDK python folder`] in the Windows command prompt. (`cd [DynamixelSDK folder]\python`). - Then, run the installation by entering the following command on the command prompt from inside the folder (`pip install .`). - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/python/windows/library_file/py3.png) - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/python/windows/library_file/py4.png) - - -### [Building and Running the Sample Code](#building-and-running-the-sample-code) - -The DYNAMIXEL SDK example code for Python uses the library files installed in the previous step. - -#### Run Example - -* Open the `python` folder using your preffered development environment and modify any settings that may be needed for accurate control of the DYNAMIXEL servos you'll be using. - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/python/windows/sample_code/py2.png) - - -* Run the `read_write.py` example to check your installation. - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/python/windows/sample_code/py4.png) - -* Or run the script manually through the command prompt. - - ![](/assets/images/sw/sdk/dynamixel_sdk/library_setup/python/windows/sample_code/py6.png) diff --git a/docs/en/software/dynamixel/dynamixel_sdk/sample_code/c/c_broadcast_ping_protocol_2_0.md b/docs/en/software/dynamixel/dynamixel_sdk/sample_code/c/c_broadcast_ping_protocol_2_0.md index 31ed3283d..9f4c5aebc 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/sample_code/c/c_broadcast_ping_protocol_2_0.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/sample_code/c/c_broadcast_ping_protocol_2_0.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/sample_code/c/c_bulk_read_protocol_1_0.md b/docs/en/software/dynamixel/dynamixel_sdk/sample_code/c/c_bulk_read_protocol_1_0.md index 570febc44..c3cd3fc69 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/sample_code/c/c_bulk_read_protocol_1_0.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/sample_code/c/c_bulk_read_protocol_1_0.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/sample_code/c/c_bulk_read_write_protocol_2_0.md b/docs/en/software/dynamixel/dynamixel_sdk/sample_code/c/c_bulk_read_write_protocol_2_0.md index d676560c1..988cff89b 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/sample_code/c/c_bulk_read_write_protocol_2_0.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/sample_code/c/c_bulk_read_write_protocol_2_0.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/sample_code/c/c_clear_multi_turn_protocol_2_0.md b/docs/en/software/dynamixel/dynamixel_sdk/sample_code/c/c_clear_multi_turn_protocol_2_0.md index 24809cb5f..35e6a8ba7 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/sample_code/c/c_clear_multi_turn_protocol_2_0.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/sample_code/c/c_clear_multi_turn_protocol_2_0.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +
diff --git a/docs/en/software/dynamixel/dynamixel_sdk/sample_code/c/c_dxl_monitor.md b/docs/en/software/dynamixel/dynamixel_sdk/sample_code/c/c_dxl_monitor.md index e5b22951f..97486dcda 100644 --- a/docs/en/software/dynamixel/dynamixel_sdk/sample_code/c/c_dxl_monitor.md +++ b/docs/en/software/dynamixel/dynamixel_sdk/sample_code/c/c_dxl_monitor.md @@ -11,7 +11,7 @@ sidebar: nav: "dynamixel_sdk" --- - +