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/