├── .devcontainer └── devcontainer.json ├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md └── doc ├── install ├── install.sh └── melodic.rosinstall └── media ├── demo_circle.png └── plan_circle.png /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | // For format details, see https://aka.ms/devcontainer.json. 2 | { 3 | "name": "OW - ROS Melodic - REEMC", 4 | "image": "ghcr.io/tum-ics/ow_docker:melodic-reemc-devel-vscode", 5 | 6 | "containerEnv" : { 7 | "CONT_PWD" : "${containerWorkspaceFolder}", 8 | "DISPLAY" : "${localEnv:DISPLAY}", 9 | "QT_X11_NO_MITSHM" : "1" 10 | }, 11 | 12 | "remoteUser": "devel", 13 | 14 | "remoteEnv": { 15 | "DISPLAY": "${localEnv:DISPLAY}" 16 | }, 17 | 18 | "runArgs": [ 19 | "--name", "${containerWorkspaceFolderBasename}_devcont", 20 | "--hostname", "${containerWorkspaceFolderBasename}_devcont", 21 | "--add-host=${containerWorkspaceFolderBasename}_devcont=127.0.1.2", 22 | "--privileged", 23 | "--net=host", 24 | // remove this line if Nvidia-container-toolkit not used 25 | "--runtime=nvidia" 26 | ], 27 | 28 | "mounts": [ 29 | { 30 | "source": "/dev/dri", 31 | "target": "/dev/dri", 32 | "type": "bind" 33 | }, 34 | { 35 | "source": "/tmp/.X11-unix", 36 | "target": "/tmp/.X11-unix", 37 | "type": "bind" 38 | }, 39 | { 40 | "source": "/dev", 41 | "target": "/dev", 42 | "type": "bind" 43 | } 44 | ], 45 | 46 | "customizations": { 47 | "vscode": { 48 | "extensions": [ 49 | "ms-vscode.cpptools", 50 | "ms-vscode.cpptools-extension-pack", 51 | "cschlosser.doxdocgen", 52 | "shd101wyy.markdown-preview-enhanced", 53 | "ms-python.python" 54 | ], 55 | "settings": { 56 | "remote.autoForwardPorts": false 57 | } 58 | } 59 | } 60 | 61 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .catkin_tools 2 | .vscode 3 | .catkin_workspace 4 | .editorconfig 5 | *.pyc 6 | bags 7 | build 8 | devel 9 | logs 10 | src/CMakeLists.txt -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "src/ow_balancer"] 2 | path = src/ow_balancer 3 | url = https://github.com/TUM-ICS/ow_balancer.git 4 | [submodule "src/ow_cmd_gen"] 5 | path = src/ow_cmd_gen 6 | url = https://github.com/TUM-ICS/ow_cmd_gen.git 7 | [submodule "src/ow_com"] 8 | path = src/ow_com 9 | url = https://github.com/TUM-ICS/ow_com.git 10 | [submodule "src/ow_com_tg"] 11 | path = src/ow_com_tg 12 | url = https://github.com/TUM-ICS/ow_com_tg.git 13 | [submodule "src/ow_console"] 14 | path = src/ow_console 15 | url = https://github.com/TUM-ICS/ow_console.git 16 | [submodule "src/ow_controller"] 17 | path = src/ow_controller 18 | url = https://github.com/TUM-ICS/ow_controller.git 19 | [submodule "src/ow_core"] 20 | path = src/ow_core 21 | url = https://github.com/TUM-ICS/ow_core.git 22 | [submodule "src/ow_dcm_planner"] 23 | path = src/ow_dcm_planner 24 | url = https://github.com/TUM-ICS/ow_dcm_planner.git 25 | [submodule "src/ow_fcm"] 26 | path = src/ow_fcm 27 | url = https://github.com/TUM-ICS/ow_fcm.git 28 | [submodule "src/ow_fk"] 29 | path = src/ow_fk 30 | url = https://github.com/TUM-ICS/ow_fk.git 31 | [submodule "src/ow_fs_planner"] 32 | path = src/ow_fs_planner 33 | url = https://github.com/TUM-ICS/ow_fs_planner.git 34 | [submodule "src/ow_ftg"] 35 | path = src/ow_ftg 36 | url = https://github.com/TUM-ICS/ow_ftg.git 37 | [submodule "src/ow_hw_interface"] 38 | path = src/ow_hw_interface 39 | url = https://github.com/TUM-ICS/ow_hw_interface.git 40 | [submodule "src/ow_ik"] 41 | path = src/ow_ik 42 | url = https://github.com/TUM-ICS/ow_ik.git 43 | [submodule "src/ow_joint_tracker"] 44 | path = src/ow_joint_tracker 45 | url = https://github.com/TUM-ICS/ow_joint_tracker.git 46 | [submodule "src/ow_msgs"] 47 | path = src/ow_msgs 48 | url = https://github.com/TUM-ICS/ow_msgs.git 49 | [submodule "src/ow_plugin_loader"] 50 | path = src/ow_plugin_loader 51 | url = https://github.com/TUM-ICS/ow_plugin_loader.git 52 | [submodule "src/ow_rbdl"] 53 | path = src/ow_rbdl 54 | url = https://github.com/TUM-ICS/ow_rbdl.git 55 | [submodule "src/ow_reemc"] 56 | path = src/ow_reemc 57 | url = https://github.com/TUM-ICS/ow_reemc.git 58 | [submodule "src/ow_ros_control_plugin"] 59 | path = src/ow_ros_control_plugin 60 | url = https://github.com/TUM-ICS/ow_ros_control_plugin.git 61 | [submodule "src/ow_state_machine"] 62 | path = src/ow_state_machine 63 | url = https://github.com/TUM-ICS/ow_state_machine.git 64 | [submodule "src/ow_state_publisher"] 65 | path = src/ow_state_publisher 66 | url = https://github.com/TUM-ICS/ow_state_publisher.git 67 | [submodule "src/ow_walking_planner"] 68 | path = src/ow_walking_planner 69 | url = https://github.com/TUM-ICS/ow_walking_planner.git 70 | [submodule "src/ow_zmp"] 71 | path = src/ow_zmp 72 | url = https://github.com/TUM-ICS/ow_zmp.git 73 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2020 Institute for Cognitive Systems (ICS), Technical University of Munich (TUM) 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); 4 | you may not use this file except in compliance with the License. 5 | You may obtain a copy of the License at 6 | 7 | http://www.apache.org/licenses/LICENSE-2.0 8 | 9 | Unless required by applicable law or agreed to in writing, software 10 | distributed under the License is distributed on an "AS IS" BASIS, 11 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | See the License for the specific language governing permissions and 13 | limitations under the License. 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # [OpenWalker](https://github.com/TUM-ICS/openwalker) 3 | 4 | 5 | 6 | [![Documentation](https://img.shields.io/badge/doxygen-online-brightgreen?logo=read-the-docs&style=flat)](https://ics-robotics.github.io/ow_docs/doxy/html/index.html) 7 | [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://github.com/TUM-ICS/openwalker/blob/main/LICENSE) 8 | [![Docker](https://img.shields.io/badge/Docker%20image-ready-blue)](https://github.com/TUM-ICS/ow_docker/pkgs/container/ow_docker) 9 | 10 | The **OpenWalker Project** aims to fulfill the need for a standard walking controller architecture providing the minimal components required to generate stable walking on biped robots with planar feet. The project is based on [ros_control](http://wiki.ros.org/ros_control) and provides modules and templates for fast prototyping of balancing/walking controller components. 11 | 12 | A description of all implemented algorithms and modules is available in the [online documentation](https://ics-robotics.github.io/ow_docs/doxy/html/index.html). 13 | 14 | https://github.com/user-attachments/assets/06298efd-9874-4d7f-9132-65cdcc7e03e7 15 | 16 | https://github.com/user-attachments/assets/90bb2a4c-2b83-4cfc-b2d0-f711a1de4dec 17 | 18 | ## Install (Docker) 19 | 20 | We release a [Docker image](https://github.com/TUM-ICS/ow_docker/pkgs/container/ow_docker) that can directly be used with [VS Code Dev Containers](https://code.visualstudio.com/docs/devcontainers/tutorial) to develop and run the project. 21 | 22 | ### Requirements 23 | 24 | - [Docker](https://docs.docker.com/engine/install/ubuntu/) 25 | - [Nvidia-container-toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html) 26 | - [VS Code Dev Containers](https://code.visualstudio.com/docs/devcontainers/tutorial) 27 | 28 | ### 1. Pull the image 29 | 30 | ```bash 31 | docker pull ghcr.io/tum-ics/ow_docker:melodic-reemc-devel-vscode 32 | ``` 33 | 34 | ### 2. Clone this repository and start the [devcontainer](https://code.visualstudio.com/docs/devcontainers/tutorial) 35 | 36 | If the nvidia-container-toolkit is not used, edit [devcontainer.json](.devcontainer/devcontainer.json) and remove ```--runtime=nvidia``` 37 | 38 | ```bash 39 | git clone --recursive https://github.com/TUM-ICS/openwalker.git 40 | cd openwalker && code . 41 | ``` 42 | 43 | ### 3. Build the workspace inside the devcontainer 44 | 45 | ```bash 46 | source /opt/pal/setup.bash 47 | catkin build -DCATKIN_ENABLE_TESTING=0 -DCMAKE_BUILD_TYPE=Release 48 | ``` 49 | 50 | ## Install (Manual) 51 | 52 | Alternatively, the project can also be installed on an Ubuntu 18.04 machine. 53 | 54 | ### Requirements 55 | 56 | - Ubuntu 18.04 / [Ros Melodic](http://wiki.ros.org/melodic/Installation) 57 | - Compiler supporting C++11 58 | 59 | 60 | ### 1. Clone this repository and set up the ROS environment. 61 | 62 | ```bash 63 | git clone --recursive https://github.com/TUM-ICS/openwalker.git 64 | cd openwalker && source /opt/ros/melodic/setup.bash 65 | ``` 66 | 67 | ### 2. Install the required build tools. 68 | 69 | ```bash 70 | ./doc/install/install.sh 71 | ``` 72 | 73 | ### 3. Populate the workspace with the REEM-C packages. 74 | 75 | ```bash 76 | rosinstall src/reemc /opt/ros/melodic doc/install/melodic.rosinstall 77 | ``` 78 | 79 | ### 4. Install the required dependencies. 80 | 81 | ```bash 82 | sudo rosdep init 83 | rosdep update 84 | rosdep install --from-paths src --ignore-src --rosdistro melodic -y --skip-keys="opencv2 pal_laser_filters speed_limit_node sensor_to_cloud hokuyo_node libdw-dev gmock walking_utils rqt_current_limit_controller simple_grasping_action reemc_init_offset_controller walking_controller" 85 | ``` 86 | 87 | ### 5. Build the workspace. 88 | 89 | ```bash 90 | catkin build -DCATKIN_ENABLE_TESTING=0 -DCMAKE_BUILD_TYPE=Release 91 | ``` 92 | 93 | ## Run 94 | 95 | The following demo generates dynamic walking for the humanoid robot [REEM-C](http://wiki.ros.org/Robots/REEM-C) of PAL Robotics. 96 | It uses [Gazebo](http://gazebosim.org/) for the physics simulation and [Rviz](http://wiki.ros.org/rviz) for visualization. 97 | The robot can execute predefined foot-step plans or be controlled with a joystick by a user. 98 | 99 | For Docker users, this [readme](https://github.com/TUM-ICS/ow_docker?tab=readme-ov-file#access-vscode-dev-container-outside-vscode) describes how to connect terminals with the container. 100 | 101 | ### 1. Launch the simulation. 102 | 103 | ```bash 104 | source devel/setup.bash 105 | roslaunch ow_reemc gazebo.launch 106 | ``` 107 | 108 | ### 2. Run the controller. 109 | 110 | ```bash 111 | source devel/setup.bash 112 | roslaunch ow_reemc sim.launch 113 | ``` 114 | 115 | ### 3. Call one of the following services to start walking. 116 | 117 | ```bash 118 | source devel/setup.bash 119 | 120 | # Step in place. 121 | rosservice call /open_walker/plan_fixed_stamp 122 | 123 | # Walk in a straight line. 124 | rosservice call /open_walker/plan_fixed_line 125 | 126 | # Walk to the side 127 | rosservice call /open_walker/plan_fixed_sidestep_left 128 | rosservice call /open_walker/plan_fixed_sidestep_right 129 | 130 | # Walk in circles. 131 | rosservice call /open_walker/plan_fixed_circle_right 132 | rosservice call /open_walker/plan_fixed_circle_left 133 | 134 | # Generic plan with 20 steps of 0.2 m length and 0.1 rad angle 135 | rosservice call /open_walker/plan_fixed "n_steps: 136 | data: 20 137 | length: 138 | data: 0.2 139 | lateral: 140 | data: 0.0 141 | angle: 142 | data: 0.1" 143 | ``` 144 | 145 | 146 | 147 | 148 | # Credits 149 | 150 | OpenWalker was developed by Emmanuel Dean, Florian Bergner, Rogelio Guadarrama-Olvera, Simon Armleder, and Gordon Cheng from the [Institute for Cognitive Systems (ICS)](https://www.ce.cit.tum.de/ics/home/), Technical University of Munich, Germany. 151 | 152 | # Acknowledgement 153 | 154 | This project has received funding from the European Union‘s Horizon 2020 research and innovation programme under grant agreement No 732287. 155 | -------------------------------------------------------------------------------- /doc/install/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | sudo apt update && sudo apt install \ 4 | python3-pip \ 5 | python-pip \ 6 | python-rosdep \ 7 | python-rosinstall \ 8 | python-rosinstall-generator \ 9 | python-wstool \ 10 | build-essential \ 11 | python-catkin-tools \ 12 | ros-melodic-moveit-simple-controller-manager \ 13 | ros-melodic-joy \ 14 | ros-melodic-jsk-rviz-plugins \ 15 | ros-melodic-urdf-test \ 16 | ros-melodic-moveit-ros-planning-interface \ 17 | ros-melodic-rviz-imu-plugin \ 18 | ros-melodic-urdf-geometry-parser \ 19 | ros-melodic-realsense2-description \ 20 | ros-melodic-moveit-ros-visualization \ 21 | ros-melodic-four-wheel-steering-msgs \ 22 | ros-melodic-moveit-planners-ompl -------------------------------------------------------------------------------- /doc/install/melodic.rosinstall: -------------------------------------------------------------------------------- 1 | # REEM-C packages 2 | - git: {local-name: reemc_robot, uri: 'https://github.com/pal-robotics/reemc_robot.git', version: 'kinetic-devel'} 3 | - git: {local-name: reemc_simulation, uri: 'https://github.com/pal-robotics/reemc_simulation.git', version: 'indigo-devel'} 4 | - git: {local-name: reemc_moveit_config, uri: 'https://github.com/pal-robotics/reemc_moveit_config', version: 'indigo-devel'} 5 | - git: {local-name: reemc_tutorials, uri: 'https://github.com/pal-robotics/reemc_tutorials.git', version: 'kinetic-devel'} 6 | 7 | # PAL packages 8 | - git: {local-name: pal_gazebo_plugins, uri: 'https://github.com/pal-robotics/pal_gazebo_plugins.git', version: 'melodic-devel'} 9 | - git: {local-name: pal_hardware_gazebo, uri: 'https://github.com/pal-robotics/pal_hardware_gazebo.git', version: 'melodic-devel'} 10 | - git: {local-name: head_action, uri: 'https://github.com/pal-robotics/head_action', version: 'indigo-devel'} 11 | - git: {local-name: pal_msgs, uri: 'https://github.com/pal-robotics/pal_msgs', version: 'indigo-devel'} 12 | - git: {local-name: play_motion, uri: 'https://github.com/pal-robotics/play_motion', version: 'kinetic-devel'} 13 | - git: {local-name: pal_hardware_interfaces, uri: 'https://github.com/pal-robotics/pal_hardware_interfaces.git', version: 'indigo-devel'} 14 | - git: {local-name: hey5_description, uri: 'https://github.com/pal-robotics/hey5_description.git', version: 'master'} 15 | - git: {local-name: tf_lookup, uri: 'https://github.com/pal-robotics/tf_lookup.git', version: 'master'} 16 | - git: {local-name: backward_ros, uri: 'https://github.com/pal-robotics/backward_ros.git', version: 'kinetic-devel'} 17 | - git: {local-name: dynamic_introspection, uri: 'https://github.com/pal-robotics/dynamic_introspection.git', version: 'kinetic-devel'} 18 | - git: {local-name: ros_control_monitor, uri: 'https://github.com/pal-robotics/ros_control_monitor.git', version: 'kinetic-devel'} 19 | - git: {local-name: ddynamic_reconfigure, uri: 'https://github.com/pal-robotics/ddynamic_reconfigure.git', version: 'kinetic-devel'} 20 | - git: {local-name: pal_camera_client, uri: 'https://github.com/pal-robotics/pal_camera_client.git', version: 'indigo-devel'} 21 | - git: {local-name: pal_transmissions, uri: 'https://github.com/pal-robotics/pal_transmissions.git', version: 'kinetic-devel'} 22 | - git: {local-name: realsense_gazebo_plugin, uri: 'https://github.com/pal-robotics/realsense_gazebo_plugin', version: 'melodic-devel'} 23 | 24 | # PAL forks 25 | - git: {local-name: gazebo_ros_pkgs, uri: 'https://github.com/pal-robotics-forks/gazebo_ros_pkgs.git', version: 'melodic-devel'} 26 | - git: {local-name: ros_control, uri: 'https://github.com/pal-robotics-forks/ros_control.git', version: 'kinetic-devel'} 27 | - git: {local-name: ros_controllers, uri: 'https://github.com/pal-robotics-forks/ros_controllers.git', version: 'kinetic-devel'} 28 | 29 | # Others 30 | - git: {local-name: teleop_tools, uri: 'https://github.com/ros-teleop/teleop_tools', version: 'kinetic-devel'} 31 | - git: {local-name: twist_mux, uri: 'https://github.com/ros-teleop/twist_mux', version: 'melodic-devel'} 32 | - git: {local-name: twist_mux_msgs, uri: 'https://github.com/ros-teleop/twist_mux_msgs', version: 'melodic-devel'} 33 | - git: {local-name: humanoid_msgs, uri: 'https://github.com/ahornung/humanoid_msgs.git', version: 'master'} 34 | - git: {local-name: pal_statistics, uri: 'https://github.com/pal-robotics/pal_statistics', version: 'kinetic-devel'} 35 | - git: {local-name: axcli, uri: 'https://github.com/po1/axcli.git', version: 'master'} 36 | 37 | -------------------------------------------------------------------------------- /doc/media/demo_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TUM-ICS/openwalker/03c73d212d95bab7a945e91c12442d984601d1d4/doc/media/demo_circle.png -------------------------------------------------------------------------------- /doc/media/plan_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TUM-ICS/openwalker/03c73d212d95bab7a945e91c12442d984601d1d4/doc/media/plan_circle.png --------------------------------------------------------------------------------