Skip to content

Commit 8dd494b

Browse files
Gabriele Navadiegoferigo
Gabriele Nava
andauthored
[WIP] WBC release 2.5 (#77)
* added data processing utility * documentation of the repo updated * Update README.md * Update README.md * cleanup of documentation, cmake and models * added Simulink balancing simulator * added home positions for the yarpmotorgui * updated installation path of homePos * Revert "updated installation path of homePos" This reverts commit 55928fb. * fixed warning in CMakeLists.txt * added goToWholeBodyControllers.m generation * updated documentation for goToWholeBodyControllers.m * updated GUI (#82) and print warning when joints have spikes or exit range (#81) * added pictures of the simulink models * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update How-to-run-controllers-with-gazebo-simulator.md * Update How-to-run-controllers-with-gazebo-simulator.md * Update How-to-run-controllers-with-gazebo-simulator.md * Update How-to-setup-iCub-for-wbc-experiments.md * Update autogeneration (#92) * Add driver.cpp.in template * Update clang-format * Update main CMakeLists.txt to use the driver.cpp.in template * Minor edit in RegisteMdl.cmake * Update CreateAutogeneratedCodeTargets.cmake.in template * fix block names for autogen * fixed also the model without Gazebo for autogen * modified installation path of +wbc library * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * models exported to 2017b Co-authored-by: Diego Ferigo <diego.ferigo@iit.it> Co-authored-by: Diego Ferigo <diego.ferigo@iit.it>
1 parent 2c9b626 commit 8dd494b

File tree

198 files changed

+36988
-2082
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

198 files changed

+36988
-2082
lines changed

.clang-format

+5-1
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ IncludeCategories:
6464
Priority: 2
6565
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
6666
Priority: 3
67+
- Regex: '^"rtwtypes'
68+
Priority: -1
69+
- Regex: '^"tmwtypes'
70+
Priority: -1
6771
- Regex: '.*'
6872
Priority: 1
6973
IncludeIsMainRegex: '(Test)?$'
@@ -89,7 +93,7 @@ PenaltyExcessCharacter: 1000000
8993
PenaltyReturnTypeOnItsOwnLine: 60
9094
PointerAlignment: Left
9195
ReflowComments: true
92-
SortIncludes: false
96+
SortIncludes: true
9397
SortUsingDeclarations: true
9498
SpaceAfterCStyleCast: true
9599
SpaceAfterTemplateKeyword: true

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ slprj/
3131
*.mat
3232

3333
# Matlab figures
34-
*.fig
34+
*.fig
35+
!/library/matlab-gui/simulinkStaticGUI.fig
3536

3637
# Simulink autosave
3738
*.autosave

CMakeLists.txt

+27-9
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,26 @@ cmake_minimum_required(VERSION 3.5)
55
project(whole-body-controllers)
66

77
option(WBC_EXPORT_AUTOGENERATED "Enable the target to export code generated with Simulink Coder" OFF)
8+
option(WBC_INSTALL_ALL_HOME_POS "Installation of all available home positions" ON)
9+
10+
# ======================================
11+
# Install home positions and WBC library
12+
# ======================================
13+
14+
find_package(YARP REQUIRED)
15+
yarp_configure_external_installation(wbc)
16+
17+
add_subdirectory(utilities)
18+
add_subdirectory(library)
19+
add_subdirectory(config)
20+
21+
# ======================
22+
# Autogeneration routine
23+
# ======================
824

925
if(NOT WBC_EXPORT_AUTOGENERATED)
1026
# Fake installation.
11-
install(CODE "MESSAGE(\"This repository simply acts as a container\")")
27+
install(CODE "MESSAGE(\"Disabled exporting of autogenerated c++ code from Simulink.\")")
1228
return()
1329
endif()
1430

@@ -37,8 +53,7 @@ file(WRITE "${CMAKE_BINARY_DIR}/autogenerated/CMakeLists.txt" "# Exported contro
3753
# Find clang-format
3854
find_program(ClangFormat_EXECUTABLE
3955
DOC "Path to the clang-format executable."
40-
NAMES clang-format clang-format-7.0 clang-format-6.0 clang-format-5.0 clang-format-4.0
41-
)
56+
NAMES clang-format clang-format-9 clang-format-8 clang-format-7 clang-format-6.0 clang-format-5.0 clang-format-4.0)
4257
configure_file(${CMAKE_SOURCE_DIR}/.clang-format ${CMAKE_BINARY_DIR}/.clang-format COPYONLY)
4358

4459
# Copy only h and cpp files
@@ -48,17 +63,21 @@ foreach(SOURCEDIR ${AUTOGENERATED_FOLDERS})
4863
file(APPEND "${CMAKE_BINARY_DIR}/autogenerated/CMakeLists.txt" "add_subdirectory(${MDLDIRNAME})\n")
4964
file(MAKE_DIRECTORY "${MDLDESTDIR}")
5065
string(REGEX MATCH "[^_]*" MDL_NAME ${MDLDIRNAME}) # Remove _gtw_rtw
66+
# Create the CMakeLists.txt of the model
5167
configure_file(
5268
"${CMAKE_SOURCE_DIR}/cmake/CreateAutogeneratedCodeTargets.cmake.in"
5369
"${MDLDESTDIR}/CMakeLists.txt"
54-
@ONLY
55-
)
70+
@ONLY)
71+
# Copy the main file
72+
configure_file(
73+
"${PROJECT_SOURCE_DIR}/src/driver.cpp.in"
74+
"${MDLDESTDIR}/driver.cpp"
75+
@ONLY)
5676
# Copy sources to the build directory
5777
add_custom_command(TARGET copy-autogenerated-models
5878
PRE_BUILD
5979
COMMAND ${CMAKE_COMMAND} -E copy "${SOURCEDIR}/*.h" "${SOURCEDIR}/*.cpp" "${SOURCEDIR}/defines.txt" "${MDLDESTDIR}"
60-
COMMENT "Copying ${MDLDIRNAME} to the build folder."
61-
)
80+
COMMENT "Copying ${MDLDIRNAME} to the build folder.")
6281
# Apply clang-format style
6382
if(NOT ${ClangFormat_EXECUTABLE} STREQUAL "ClangFormat_EXECUTABLE-NOTFOUND")
6483
add_custom_command(TARGET copy-autogenerated-models
@@ -72,5 +91,4 @@ endforeach()
7291
add_custom_command(TARGET copy-autogenerated-models
7392
POST_BUILD
7493
COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_BINARY_DIR}/autogenerated" "${AUTOGENERATED_WBC_SOURCE_DIR}/autogenerated"
75-
COMMENT "Copying generated files to ${AUTOGENERATED_WBC_SOURCE_DIR}/autogenerated"
76-
)
94+
COMMENT "Copying generated files to ${AUTOGENERATED_WBC_SOURCE_DIR}/autogenerated")

README.md

+51-25
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,50 @@
11
# whole-body-controllers
22

3-
The repository contains Simulink-based whole-body controllers for humanoid robots, and configuration and utility Matlab functions to perform balancing simulations with Gazebo simulator and on the Yarp-based robot [iCub](http://www.icub.org/).
4-
5-
**Warning! This repository is under active development. In future releases, `master` branch may break compatibility with older versions of WBC. If you are interested in retrieving a `stable` version of this repo, `fork the repository` or refer to the following releases:**
3+
**Warning! This repository contains reseach material and therefore is under active development. In future releases, `master` branch may break compatibility with older versions of WBC. If you are interested in retrieving a `stable` version of this repo, `fork the repository` or refer to the following releases:**
64

75
- [WBC v2.0](https://github.com/robotology/whole-body-controllers/releases/tag/v2.0)
86
- [WBC v1.5](https://github.com/robotology/whole-body-controllers/releases/tag/v1.5)
97
- [WBC v1.0](https://github.com/robotology/whole-body-controllers/releases/tag/v1.0)
108

9+
## Overview
10+
11+
The repository contains `Simulink-based whole-body controllers` developed to control the [iCub](http://www.icub.org/) humanoid robot. It can be imagined as a **starting point** and a **support** repository for a user that intends to develop a new Simulink controller (not necessarily for the iCub robot) in within the framework of the [robotology](https://github.com/robotology) organization. It is worth noting that:
12+
13+
- The controllers stored in this repository are an **overview** of the possibile control frameworks that can be implemented using the `robotology` software infrastructure. Also, the repository contains a [library](library/README.md) of configuration and utility Matlab functions to design simulations with [Gazebo](http://gazebosim.org/) simulator and on the real robot iCub.
14+
15+
- The robot dynamics and kinematics is computed run-time by means of [WBToolbox](https://github.com/robotology/wb-toolbox), a Simulink library that wraps [iDyntree](https://github.com/robotology/idyntree). For more information on iDyntree library, see also this [README](https://github.com/robotology/idyntree/blob/master/README.md).
16+
17+
- The Simulink models implement different control strategies both for fixed-base and for floating-base robots. They space from `momentum-based` torque control to `inverse-kinematics-based` position control. Have a look at the [controllers](controllers/README.md) folder for more details.
18+
1119
## Dependencies
1220

1321
This repository depends upon the following Software:
1422

15-
- [Matlab/Simulink](https://it.mathworks.com/products/matlab.html), default version **R2017b**
16-
- [WB-Toolbox](https://github.com/robotology/WB-Toolbox) and [blockfactory](https://github.com/robotology/blockfactory)
17-
- [Gazebo Simulator](http://gazebosim.org/), default version **9.0**
18-
- [gazebo-yarp-plugins](https://github.com/robotology/gazebo-yarp-plugins)
23+
- [CMake](https://cmake.org/), at least version **3.5**.
24+
- [Matlab/Simulink](https://it.mathworks.com/products/matlab.html), default version **R2017b**.
25+
- [WB-Toolbox](https://github.com/robotology/WB-Toolbox) and [blockfactory](https://github.com/robotology/blockfactory).
26+
- [Gazebo Simulator](http://gazebosim.org/), default version **9.0**.
27+
- [gazebo-yarp-plugins](https://github.com/robotology/gazebo-yarp-plugins).
1928
- [icub-gazebo](https://github.com/robotology/icub-gazebo), [icub-gazebo-wholebody](https://github.com/robotology-playground/icub-gazebo-wholebody) and [icub-models](https://github.com/robotology/icub-models) to access iCub models.
20-
- [codyco-modules](https://github.com/robotology/codyco-modules) (Optional, for using [home positions](https://github.com/robotology/codyco-modules/tree/master/src/modules/torqueBalancing/app/robots) and [wholeBodyDynamics](https://github.com/robotology/codyco-modules/tree/master/src/devices/wholeBodyDynamics) device).
29+
- [whole-body-estimators](https://github.com/robotology/whole-body-estimators) (**Optional**, for using [wholeBodyDynamics](https://github.com/robotology/whole-body-estimators/tree/master/devices/wholeBodyDynamics) device).
30+
- [YARP](https://github.com/robotology/yarp) and [icub-main](https://github.com/robotology/icub-main).
2131

2232
## Installation and usage
2333

24-
**NOTE:** it is suggested to install `whole-body-controllers` and most of its dependencies (namely, `codyco-modules`,`icub-gazebo`,`icub-gazebo-wholebody`, `icub-models`, `gazebo-yarp-plugins`, `blockfactory` and `WB-Toolbox` and their dependencies) using the [robotology-superbuild](https://github.com/robotology/robotology-superbuild) (enable `ROBOTOLOGY_USES_GAZEBO`, `ROBOTOLOGY_ENABLE_DYNAMICS`, `ROBOTOLOGY_USES_MATLAB` options).
34+
The repository is usually tested and developed on **Ubuntu** and **macOS** operating systems. Some functionalities may not work properly on **Windows**.
2535

26-
- Otherwise, clone the repository on your pc by running on a terminal `git clone https://github.com/robotology/whole-body-controllers`, or dowload the repository.
36+
- **NOTE:** it is suggested to install `whole-body-controllers` and most of its dependencies (namely, `YARP`, `icub-main`, `whole-body-estimators`,`icub-gazebo`,`icub-gazebo-wholebody`, `icub-models`, `gazebo-yarp-plugins`, `blockfactory` and `WB-Toolbox` and their dependencies) using the [robotology-superbuild](https://github.com/robotology/robotology-superbuild) (enable `ROBOTOLOGY_USES_GAZEBO`, `ROBOTOLOGY_ENABLE_DYNAMICS`, `ROBOTOLOGY_USES_MATLAB` options).
2737

28-
- set the environmental variable `YARP_ROBOT_NAME` in the `.bashrc` file to be the name of the robot you want to control. List of supported robot names:
38+
- Otherwise, after installing all the dependencies, **clone the repository** on your pc by running on a terminal `git clone https://github.com/robotology/whole-body-controllers`, or download the repository. Then (on Ubuntu), open a terminal from the folder where you downloaded whole-body-controllers and run:
39+
40+
```
41+
mkdir build
42+
cd build
43+
ccmake ..
44+
```
45+
in the GUI that it will open, set the `CMAKE_PREFIX_PATH` as your desired installation folder. Then, run `make install`.
46+
47+
- Set the environmental variable `YARP_ROBOT_NAME` in your `.bashrc` file (or equivalent) to be the name of the robot you want to control. List of supported robot names:
2948

3049
| Robot Names | Associated URDF Model |
3150
|:-------------:|:-------------:|
@@ -34,23 +53,23 @@ This repository depends upon the following Software:
3453
| iCubGazeboV2_5|[model.urdf](https://github.com/robotology/icub-models/blob/master/iCub/robots/iCubGazeboV2_5/model.urdf)|
3554
| icubGazeboSim |[model.urdf](https://github.com/robotology/yarp-wholebodyinterface/blob/master/app/robots/icubGazeboSim/model.urdf) |
3655

37-
- to use the Simulink controllers, it is **required** to add the [matlab-wbc](library/matlab-wbc) folder to the Matlab path. There are two different possible ways to add the folder to the path:
38-
- manually add the folder to the Matlab path;
39-
- run **only once** the [startup_WBC.m](config/startup_WBC.m) script. In this case, it is required to **always** start matlab from the folder where the `pathdef.m` file is (usually `~/Documents/MATLAB`). For further information see also the [WBToolbox documentation](https://robotology.github.io/wb-toolbox/mkdocs/install/#matlab).
40-
41-
**Note**: to use any function inside the package [matlab-wbc/+wbc](library/matlab-wbc/+wbc), add the `wbc` prefix to the function name when the function is invoked, i.e.
56+
- **IMPORTANT!** to use the WBC Simulink controllers, it is **required** to add the **installed** [+wbc](library/matlab-wbc/+wbc) folder to the Matlab path. There are two possible ways to add the folder to the Matlab path:
57+
58+
**1a.** `manually` and `permanently` add the folder to the Matlab path;
4259

43-
`[outputs] = wbc.myFunction(inputs)`.
60+
**1b.** run **only once** the [startup_WBC.m](config/startup_WBC.m.in) script, which is installed in your `${BUILD}` folder. In this case, path is **not** permanently added to Matlab, and it is required to **always** start Matlab from the folder where your `pathdef.m` file is (usually `~/Documents/MATLAB`). To facilitate the reaching of the WBC working folder from the folder containing the `pathdef.m`, a `goToWholeBodyController.m` script can be [automatically created](config/createGoToWBC.m) in that folder. Run it to jump to the WBC folder. For further information on the installation procedure see also the [WBToolbox documentation](https://robotology.github.io/wb-toolbox/mkdocs/install/#matlab).
61+
**WARNING**: if the repository is installed through the `robotology-superbuild`, **DO NOT** run the `startup_WBC.m` file but instead run the [startup_robotology_superbuild](https://github.com/robotology/robotology-superbuild/blob/master/cmake/template/startup_robotology_superbuild.m.in) file that comes along with robotology-superbuild installation.
62+
- **Note**: to use any function inside the package [matlab-wbc/+wbc](library/matlab-wbc/+wbc), add the `wbc` prefix to the function name when the function is invoked, i.e. `[outputs] = wbc.myFunction(inputs)`. More information on packages can be found in the [Matlab documentation](https://it.mathworks.com/help/matlab/matlab_oop/scoping-classes-with-packages.html).
4463

45-
More information on packages can be found in the [Matlab documentation](https://it.mathworks.com/help/matlab/matlab_oop/scoping-classes-with-packages.html).
64+
- There are some functionalities of the repo such as the [automatic generation of c++ code from Simulink](https://github.com/robotology/whole-body-controllers#automatic-generation-of-c-code-from-simulink) that require to enable not-default cmake options. Check the available options by running `ccmake .` in your `build` directory.
4665

4766
## Troubleshooting
4867

4968
Please refer to the [WBToolbox troubleshooting documentation](https://robotology.github.io/wb-toolbox/mkdocs/troubleshooting/).
5069

51-
## Structure of the repo
70+
## Relevant folders of the repo
5271

53-
- **config**: a collection of scripts for correctly configure this repo. [[README]](config/README.md)
72+
- **config**: a collection of scripts to correctly configure this repo. [[README]](config/README.md)
5473

5574
- **controllers**: Simulink whole-body position and torque controllers for balancing of humanoid robots. [[README]](controllers/README.md)
5675

@@ -62,9 +81,10 @@ Please refer to the [WBToolbox troubleshooting documentation](https://robotology
6281

6382
### Available controllers
6483

65-
- [fixed-base-joints-control](controllers/fixed-base-joints-control/README.md)
84+
- [fixed-base-joints-torque-control](controllers/fixed-base-joints-torque-control/README.md)
6685
- [floating-base-balancing-position-control](controllers/floating-base-balancing-position-control/README.md)
6786
- [floating-base-balancing-torque-control](controllers/floating-base-balancing-torque-control/README.md)
87+
- [simulink-balancing-simulator](controllers/simulink-balancing-simulator/README.md)
6888

6989
### Matlab functions library
7090

@@ -80,16 +100,22 @@ There is the possibility to generate c++ code from the Simulink models using [Si
80100

81101
When used for controlling real platforms, heavy Simulink models may violate the user-defined simulation time step, see also [this issue](https://github.com/robotology/wb-toolbox/issues/160). It seems a source of delay is the run-time update of the Simulink interface. For this reason, a [static GUI for running the models](library/matlab-gui) has been developed. If you want to run Simulink with the static GUI, run the [startModelWithStaticGui](controllers/floating-base-balancing-torque-control/startModelWithStaticGui.m) script.
82102

103+
### Home positions for yarpmotorgui
104+
105+
The repo contains a set of predefined [home positions](utilities/homePositions) to be used with the [yarpmotorgui](https://www.yarp.it/yarpmotorgui.html). By default, if the repo is installed through `robotology-superbuild`, the home positions are installed in the `robotology-superbuild/build/install` directory. Otherwise add the path to the [homePositions](utilities/homePositions) folder to the `YARP_DATA_DIRS` environmental variable in your `.bashrc` file . The command to use the home positions with the yarpmotorgui is `yarpmotorgui --from myHomePosFileName.ini`.
106+
83107
## Where do I find legacy materials?
84108

85109
Official legacy repositories are: [mex-wholebodymodel](https://github.com/robotology/mex-wholebodymodel) and [WBI-Toolbox-controllers](https://github.com/robotology-legacy/WBI-Toolbox-controllers). **Note**: these legacy repos contain undocumented/outdated code, and duplicated or not tested matlab functions. They also contain original code that has been tested on the robot in the past and then never used again, or code that will be ported in the main repository in the future.
86110

87-
- [exploit friction and walking controller](https://github.com/robotology-legacy/WBI-Toolbox-controllers/tree/whole-body-controllers-legacy/controllers/legacy)
88-
- [seesaw controller](https://github.com/robotology-legacy/WBI-Toolbox-controllers/tree/whole-body-controllers-legacy/controllers/legacy)
89-
- [automatic gain tuning](https://github.com/robotology/mex-wholebodymodel/tree/master/controllers/torqueBalancingGainTuning)
111+
- [exploit friction controller](https://github.com/robotology-legacy/WBI-Toolbox-controllers/tree/master/controllers/momentum-based-yoga-friction)
112+
- [walking controller](https://github.com/robotology-legacy/WBI-Toolbox-controllers/tree/master/controllers/task-based-walking)
113+
- [seesaw controller](https://github.com/robotology-legacy/WBI-Toolbox-controllers/tree/master/controllers/torqueBalancingOnSeesaw)
114+
- [automatic gain tuning](https://github.com/robotology-legacy/WBI-Toolbox-controllers/tree/master/controllers/torqueBalancingTuning) and [automatic gain tuning-matlab](https://github.com/robotology/mex-wholebodymodel/tree/master/controllers/torqueBalancingGainTuning)
90115
- [elastic joints control](https://github.com/robotology/mex-wholebodymodel/tree/master/controllers/torqueBalancing_JE)
91-
- [walkman control](https://github.com/robotology-legacy/WBI-Toolbox-controllers/tree/whole-body-controllers-legacy/controllers/legacy/torqueBalancing-walkman) and [walkman control-matlab](https://github.com/robotology/mex-wholebodymodel/tree/master/controllers/torqueBalancingWalkman)
116+
- [walkman control](https://github.com/robotology-legacy/WBI-Toolbox-controllers/tree/master/controllers/torqueBalancing-walkman) and [walkman control-matlab](https://github.com/robotology/mex-wholebodymodel/tree/master/controllers/torqueBalancingWalkman)
92117
- [joint-space control and centroidal transformation](https://github.com/robotology/mex-wholebodymodel/tree/master/controllers/torqueBalancingJointControl)
118+
- [stand-up control 4 contacts](https://github.com/robotology-legacy/WBI-Toolbox-controllers/tree/master/controllers/torqueBalancingStandup_4Contacts)
93119

94120
## Citing this work
95121

+18-11
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,29 @@
1+
# Copyright (C) 2019 Istituto Italiano di Tecnologia (IIT). All rights reserved.
2+
# This software may be modified and distributed under the terms of the
3+
# GNU Lesser General Public License v2.1 or any later version.
4+
5+
find_package(BlockFactory COMPONENTS SimulinkCoder REQUIRED)
6+
7+
# ===============================================
18
# Generate a library from the autogenerated class
29
# ===============================================
310

4-
set(MDL_NAME @MDL_NAME@)
5-
add_generated_code_lib(MODELNAME ${MDL_NAME})
11+
include(TargetFromGeneratedCode)
12+
set(SIMULINK_MODEL_NAME "@MDL_NAME@")
613

14+
# This macro creates a target named as the mdl file for the autogenerated class
15+
target_from_generated_code(
16+
MODELNAME ${SIMULINK_MODEL_NAME}
17+
SOURCE_FOLDER ${CMAKE_CURRENT_SOURCE_DIR})
18+
19+
# ================================
720
# Test executable with custom main
821
# ================================
922

1023
# Set the target name for the custom driver
11-
set(CODER_MAIN "CoderMain_${MDL_NAME}")
12-
13-
configure_file(
14-
"${PROJECT_SOURCE_DIR}/src/driver.cpp.in"
15-
"${CMAKE_CURRENT_BINARY_DIR}/driver.cpp"
16-
@ONLY)
24+
set(CODER_MAIN "Run${SIMULINK_MODEL_NAME}")
1725

1826
add_executable(${CODER_MAIN}
19-
"${CMAKE_CURRENT_BINARY_DIR}/driver.cpp"
20-
)
27+
"${CMAKE_CURRENT_SOURCE_DIR}/driver.cpp")
2128

22-
target_link_libraries(${CODER_MAIN} PUBLIC ${MDL_NAME}_LIB)
29+
target_link_libraries(${CODER_MAIN} PUBLIC ${SIMULINK_MODEL_NAME})

0 commit comments

Comments
 (0)