{"id":25833122,"url":"https://github.com/woolfrey/software_robot_library","last_synced_at":"2026-06-09T06:02:53.795Z","repository":{"id":44580503,"uuid":"414512287","full_name":"Woolfrey/software_robot_library","owner":"Woolfrey","description":"Custom classes for robot control.","archived":false,"fork":false,"pushed_at":"2024-05-22T12:47:23.000Z","size":22268,"stargazers_count":2,"open_issues_count":6,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-05-22T19:00:24.268Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Woolfrey.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-10-07T08:02:21.000Z","updated_at":"2024-05-22T19:00:24.268Z","dependencies_parsed_at":"2024-04-17T10:42:28.698Z","dependency_job_id":"be5dd09f-a25f-4b81-8395-2b0b81dbdeab","html_url":"https://github.com/Woolfrey/software_robot_library","commit_stats":null,"previous_names":["woolfrey/software_robot_library"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Woolfrey%2Fsoftware_robot_library","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Woolfrey%2Fsoftware_robot_library/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Woolfrey%2Fsoftware_robot_library/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Woolfrey%2Fsoftware_robot_library/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Woolfrey","download_url":"https://codeload.github.com/Woolfrey/software_robot_library/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241263696,"owners_count":19936058,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-02-28T22:47:08.132Z","updated_at":"2026-06-09T06:02:53.789Z","avatar_url":"https://github.com/Woolfrey.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# :robot: Robot Library\n\nRobot Library is a C++ package for modeling, trajectory generation, and control of robots. The current release supports velocity, and (inertia-free) impedance control of serial link robot arms.\n\n#### :sparkles: Features:\n- _Everything_ is contained in _one_ library: modeling, control, _and_ trajectory generation.\n- Easy-to-use control classes with automatic joint limit avoidance, redundancy resolution, singularity avoidance, etc.\n- Modular design:\n   - Build your own controllers from `SerialLinkBase` class, or make one entirely from scratch with the `KinematicTree` class.\n   - Use the trajectory generation classes for your controller. Or don't - make your own!\n- Full inverse dynamics for floating-base robots with the `KinematicTree` class.\n- All you need is a [URDF](https://docs.ros.org/en/jazzy/Tutorials/Intermediate/URDF/URDF-Main.html) to get started :sunglasses:\n\n#### :compass: Navigation:\n\n- [Sections of the Library](#classical_building-sections-of-the-library)\n- [Installation](#floppy_disk-installation)\n    - [Requirements](#requirements)\n    - [Installing Eigen](#installing-eigen)\n    - [Installing RobotLibrary](#installing-robotlibrary)\n- [Using Robot Library](#rocket-using-robot-library)\n    - [In Another Project](#in-another-project)\n    - [Examples](#examples)\n- [Contributing](#handshake-contributing)\n- [Citing this Repository](#bookmark_tabs-citing-this-repository)\n- [License](#scroll-license)\n\n## :classical_building: Sections of the Library\n\n- [Control](Control/README.md): Classes for real-time, feedback control.\n- [Math](Math/README.md): Supporting functions \u0026 classes for other parts of the library.\n- [Model](Model/README.md): Classes for computing the kinematics \u0026 dynamics of rigid-body structures.\n- [Trajectory](Trajectory/README.md): Classes for generating paths through space \u0026 time.\n\nThe diagram below shows how the different libraries interact:\n```mermaid\ngraph LR\n\n   subgraph Hardware\n      Robot\n   end\n\n   subgraph RobotLibrary\n\n      subgraph Algorithms\n         Trajectory -- \"Reference State\" --\u003e Control\n         Control -- \"Joint Commands\" --\u003e Robot\n         Robot -- \"Actual State\" --\u003e Model\n         Model -- \"Kinematics \u0026 Dynamics\" --\u003e Control\n      end\n   \n      subgraph Support\n           Math\n      end\n\n      Support -. \"Functions\" .-\u003e Algorithms\n\n   end\n\n```\n\n[:top: Back to Top.](#robot-robot-library)\n\n## :floppy_disk: Installation\n\n### Requirements:\n\n- CMake 3.14 or higher\n- C++17 or higher \n- Eigen3 v3.4 or higher\n\n### Installing Eigen:\n\n\u003e [!NOTE]\n\u003e You need to manually install Eigen 3.4 if you're using Ubuntu 20.04.\n\n#### Ubuntu 20.04\n\n1. First ensure prerequisites are installed:\n   ```\n   sudo apt update\n   ```\n   ```\n   sudo apt install -y build-essential cmake git\n   ```\n    \n3. Download version 3.4 directly (or from the webpage):\n   ```\n   wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.tar.gz\n   ```\n\n5. Extract the downloaded file:\n   ```\n   tar -xvf eigen-3.4.0.tar.gz\n   ```\n   ```\n   cd eigen-3.4.0\n   ```\n    \n7. Build and install:\n   ```\n   mkdir build \u0026\u0026 cd build\n   ```\n   ```\n   cmake ../\n   ```\n   ```\n   sudo make install\n   ```\n\n#### Ubuntu 22.04 \u0026 Later\n\nEigen 3.4 is automatically installed on later versions of Ubuntu. In the command line you can run:\n\n```\nsudo apt install libeigen3-dev\n```\n\n### Installing RobotLibrary:\n\n1. Clone this repository in to your working directory:\n   ```\n   git clone https://github.com/Woolfrey/software_robot_library.git\n   ```\n   \n3. Navigate in to the folder:\n   ```\n   cd ~/\u003cyour_working_directory\u003e/software_robot_library\n   ```\n\n5. Create a build directory and navigate in to it:\n   ```\n   mkdir build \u0026\u0026 cd build\n   ```\n\n7. Run the following commands in the `build` directory:\n   ```\n   cmake ..\n   ```\n   ```\n   sudo make install\n   ```\n\nYou should now be able to include different parts of the library in your C++ files.\n\n[:top: Back to Top.](#robot-robot-library)\n\n## :rocket: Using Robot Library\n\n### In Another Project:\n\nWhen using `RobotLibrary` classes in another project, it is necessary to link both `Eigen` and `RobotLibrary` when compiling executables. For example, we may want to use the `KinematicTree` class in the `example.cpp` of the following example project:\n\n```\nexample_project/\n├── build/\n├── src/\n|   └── example.cpp\n└── CMakeLists.txt\n```\n\nIn the `example.cpp` file we can include the `KinematicTree` header file under `RobotLibrary`:\n\n```\n#include \u003cRobotLibrary/Model/KinematicTree.h\u003e\n...\nint main(int argc, char **argv)\n{\n     RobotLibrary::Model::KinematicTree model(\"path/to/robot.urdf\");\n}\n```\n\nThen, in the `CMakeLists.txt` file, we must:\n1. Tell the compiler to find both `Eigen3` and `RobotLibrary`, and\n2. Link `RobotLibrary` and `Eigen3` to the executable that uses any `RobotLibrary` classes:\n\n```\ncmake_minimum_required(VERSION 3.8)\nproject(example)\n...\nfind_package(Eigen3 REQUIRED)\nfind_package(RobotLibrary REQUIRED)\n\ninclude_directories(${EIGEN3_INCLUDE_DIR}) \n...\nadd_executable(example src/example.cpp)\ntarget_link_libraries(example RobotLibrary::RobotLibrary Eigen3::Eigen)\n```\n\nInside the `example_project/build` folder it should  be possible to compile the project:\n\n```\ncmake ..\nmake\n```\n\n### Examples:\n\nIf you would like to see examples where `RobotLibrary` has been applied, you can check out:\n\n- [Serial Link Action Server](https://github.com/Woolfrey/server_serial_link) : My own ROS2 action servers for control,\n- [Serial Link Velocity Control](https://github.com/Woolfrey/control_serial_link_velocity) : A ROS2 package for controlling the joint or Cartesian velocity of serial link robots, or\n- [Serial Link Impedance Control](https://github.com/Woolfrey/control_serial_link_impedance) : A ROS2 package for controlling the joint or Cartesian impedance of serial link robots.\n\n[:top: Back to Top.](#robot-robot-library)\n    \n## :handshake: Contributing\n\nContributions to this repositore are welcome! Feel free to:\n1. Fork the repository,\n2. Implement your changes / improvements, then\n3. Issue a pull request.\n\nIf you're looking for ideas, you can always check the [Issues tab](https://github.com/Woolfrey/software_robot_library/issues) for those with :raising_hand: [OPEN]. These are things I'd like to implement, but don't have time for. It'd be much appreciated, and you'll be tagged as a contributor :sunglasses:\n\n[:top: Back to Top.](#robot-robot-library)\n\n## :bookmark_tabs: Citing this Repository\n\nIf you find this code useful, spread the word by acknowledging it. Click on `Cite this repository` under the **About** section in the top-right corner of this page :arrow_upper_right:.\n\nHere's a BibTeX reference:\n```\n@misc{woolfrey_robotlibrary_2025,\n  author       = {Woolfrey, Jon},\n  title        = {RobotLibrary},\n  howpublished = {\\url{https://github.com/Woolfrey/software_robot_library}},\n  note         = {Version 2.0.0},\n  year         = {2025},\n  month        = {aug},\n  day          = {11},\n  orcid        = {0000-0001-5926-5669}\n}\n```\nHere's the automatically generated APA format:\n```\nWoolfrey, J. (2025). Robot Library (Version 2.0.0). Retrieved from https://github.com/Woolfrey/software_robot_library\n```\n\n[:top: Back to Top.](#robot-robot-library)\n\n## :scroll: License\n\nThis project is licensed under an **Open Source / Commercial Use License (OSCL)**. You are free to use, modify, and (re)distribute this software at no cost under the following conditions:\n\n- You may incorporate this software into your own project, as long as your project also remains free and open source.\n- You may use this software in a closed-source, proprietary, or commercial product or service, _but_ you must obtain a commercial license. Please contact [jonathan.woolfrey@gmail.com](mailto:jonathan.woolfrey@gmail.com) to discuss licensing terms and royalties.\n\nThis license is designed to encourage open collaboration — but if you profit, then so must I (if only a little :pinching_hand:). See the full [LICENSE](./LICENSE) for complete terms.\n\n[:top: Back to Top.](#robot-robot-library)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwoolfrey%2Fsoftware_robot_library","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwoolfrey%2Fsoftware_robot_library","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwoolfrey%2Fsoftware_robot_library/lists"}