diff --git a/CHANGELOG.md b/CHANGELOG.md index 696412334..33dbc55aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # CHANGELOG Release Versions: +- [6.0.0](#600) - [5.2.0](#520) - [5.1.0](#510) - [5.0.0](#500) @@ -11,6 +12,65 @@ Release Versions: - [2.0.0](#200) - [1.0.0](#100) +## 6.0.0 + +Version 6.0.0 refactors the StateType enum in state representation to be more descriptive and widely useful as well as +the dynamical systems factory for easier creation of these classes. This major change breaks implementations using +StateType enums explicitly (e.g. for parameters) and dynamical systems from the prior version. + +See the updated documentation for usage guidelines for the DynamicalSystemsFactory. + +This release also includes a few new features, fixes and improvements as well as updated documentation in +all parts of the control libraries. + +### Breaking changes + +This release contains the following breaking changes: +- Refactor `StateType` enum and `ParameterType` enum (#277, #278, #280, #284) +- Relocate the `DYNAMICAL_SYSTEM_TYPE` enum to the general `dynamical_systems` namespace (#288) + +**state_representation** + +To make the `StateType` enum more descriptive and useful, individual spatial state types have been added +and the `ParameterType` moved to a separate enum. This change helps with the translation of parameters and +encoded states in downstream projects by allowing for greater introspection of data types from this enum. + +Any implementations that use `StateType` from a prior version to create parameters or compare state types should be +updated. + +**dynamical_systems** + +The previous `DYNAMICAL_SYSTEM` enum has been removed from the dynamical system factory class and put directly in the +general `dynamical_systems` namespace and renamed to `DYNAMICAL_SYSTEM_TYPE` to shorten the creation and to have the +same structure as the controllers factory. + +Any implementations that use the previous enum have to be updated. See the documentation for more information. + +### Features + +**state_representation** +- Add CartesianState attribute setters from std vector and coefficients (#291) + +**python** +- Use pyquaternion in bindings (#283) + +**protocol** +- Add encode/decode options for shared pointer of State (#287) +- Add CMake config for clproto (#292) + +### Fixes and improvements + +**state_representation** +- Mark Parameter getters as const (#289) +- Throw exception upon parameter validation in controllers (#290) + +**python** +- Fix if else conditions in setup.py to correctly install modules (#285) + +**general** +- Update and extend demos with Python examples and migrate ROS demos away (#293) +- Update documentation (#294) + ## 5.2.0 Version 5.2.0 contains a few fixes and a new feature for the Impedance controller. diff --git a/README.md b/README.md index 0e2dec760..68819083c 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ - Development + Develop @@ -21,18 +21,30 @@ A set of libraries to facilitate the creation of full control loop algorithms, including trajectory planning, kinematics, dynamics and control. -Documentation is available at epfl-lasa.github.io/control-libraries +Documentation is available at epfl-lasa.github.io/control-libraries. ## Core libraries -For the implementation, installation and documentation of the core libraries, see the -source folder. +For the implementation, installation and documentation of the core libraries, see the [source](./source) folder. + +## Protocol + +There is a module that defines the protocol for sending and receiving messages containing control libraries +data across any network, based on the Google Protocol Buffer. For its implementation, installation and +documentation, see the [protocol](./protocol) folder. ## Python bindings -There exist Python bindings for core control library modules. See the python -folder for installation instructions and currently supported libraries. +There exist Python bindings for the control library modules and the protocol module. See the [python](./python) +folder for installation instructions. ## Demos -For examples and demos in plain C++, ROS, and ROS2, refer to the demos folder. +For examples and demos in C++ and Python, refer to the [demos](./demos) folder. +TODO link ros demos repo + +## External resources + +- C++ remote development in CLion [here](https://github.com/eeberhard/docker-clion-cpp-env) +- ROS and ROS2 demos using control libraries [here](https://github.com/domire8/control-libraries-ros-demos) +- ROS and ROS2 control libraries images [here](https://github.com/aica-technology/docker-images) diff --git a/VERSION b/VERSION index 91ff57278..f4965a313 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -5.2.0 +6.0.0 \ No newline at end of file diff --git a/demos/control_loop_examples/CMakeLists.txt b/demos/CMakeLists.txt similarity index 79% rename from demos/control_loop_examples/CMakeLists.txt rename to demos/CMakeLists.txt index e1110fd7c..19ee77b0d 100644 --- a/demos/control_loop_examples/CMakeLists.txt +++ b/demos/CMakeLists.txt @@ -26,13 +26,10 @@ set(DEMOS_SCRIPTS ) set(FIXTURE_INSTALL_PATH /etc/fixtures/) -install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/scripts/fixtures/ DESTINATION ${FIXTURE_INSTALL_PATH}) +install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/fixtures/ DESTINATION ${FIXTURE_INSTALL_PATH}) foreach(SCRIPT ${DEMOS_SCRIPTS}) - add_executable(${SCRIPT} scripts/${SCRIPT}.cpp) + add_executable(${SCRIPT} cpp_scripts/${SCRIPT}.cpp) target_link_libraries(${SCRIPT} ${control_libraries_LIBRARIES}) target_compile_definitions(${SCRIPT} PRIVATE SCRIPT_FIXTURES="${FIXTURE_INSTALL_PATH}") - install(TARGETS ${SCRIPT} - RUNTIME DESTINATION bin - ) endforeach() \ No newline at end of file diff --git a/demos/Dockerfile b/demos/Dockerfile new file mode 100644 index 000000000..079a92d04 --- /dev/null +++ b/demos/Dockerfile @@ -0,0 +1,16 @@ +FROM ghcr.io/epfl-lasa/control-libraries/development-dependencies + +WORKDIR /tmp +ARG CONTROL_LIBRARIES_BRANCH=develop +RUN git clone -b ${CONTROL_LIBRARIES_BRANCH} --depth 1 https://github.com/epfl-lasa/control-libraries.git +RUN cd control-libraries/source && ./install.sh --auto +RUN cd control-libraries/protocol && ./install.sh --auto +RUN pip3 install control-libraries/python + +RUN rm -rf /tmp/* + +USER developer +WORKDIR ${HOME}/control_loop_examples +COPY ./ ./ + +RUN mkdir build && cd build && cmake .. && sudo make -j all && sudo make install diff --git a/demos/README.md b/demos/README.md new file mode 100644 index 000000000..202667304 --- /dev/null +++ b/demos/README.md @@ -0,0 +1,94 @@ +# `control_loop_examples` demonstration scripts + +## Table of contents: +* [Running a demo script](#running-demonstration-scripts) +* [Task Space control loop example](#task_space_control_loop) +* [Robot kinematics control loop example](#robot_kinematics_control_loop) + +## Running demonstration scripts +This package contains a set of demonstration scripts in both C++ and Python that showcase the functionalities introduced +in the different libraries of `control-libraries`. +The easiest way to run them is to use the `run-demo.sh` file. +Without arguments, this script creates a container and opens in interactive mode, allowing you to browse the different +demo scripts and run the one of your choice: + +```console +./run-demo-script.sh +# Run a python script +developer@xxxxxxxxx:~/control_loop_examples$ python3 python_scripts/