ihmcrobotics / ihmc-open-robotics-software

Robotics software featuring legged locomotion algorithms and a momentum-based controller core with optimization. Supporting software for world-class robots including humanoids, running birds, exoskeletons, mechs and more.
https://robots.ihmc.us
252 stars 89 forks source link
humanoid-robot ihmc java robotics walking whole-body-control

IHMC Open Robotics Software

Current Continuous Integration Status

develop, fast Current develop status

develop, fast Current release status

Robots

This software has been used to power a wide variety of humanoid robots. This includes

Licensing

All of the software in IHMC Open Robotics Software is licensed under the Apache 2.0 license.

Developing with IHMC Open Robotics Software from source

IHMC Open Robotics Software uses the Gradle build system, and requires JDK 17. We recommend working in IntelliJ.

Our developers are a mix of Windows and Linux users. We officially support:

Arch Linux will work fine for development. Other GNU/Linux distros will likely work, however largely untested. macOS is partially supported, but incomplete at this time.

To get set up, use our public Confluence pages: https://ihmcrobotics.atlassian.net/wiki/spaces/PUBLIC/overview

Other IHMC Libraries

IHMC Open Robotics Software both depends on and is depended on by many other IHMC Robotics Libraries. A sampling of our other software depended on by this repository includes

Simulation Construction Set 2, our own simulation environment with built-in analysis tools: https://github.com/ihmcrobotics/simulation-construction-set-2

scs2 buildstatus

Simulation Construction Set, a deprecated simulation engine that's still used for base visualization

scs2 buildstatus

Euclid, an alternative vector/geometry library for Java with support for additional structures common in 3D geometry without needing vecmath or Java3D: https://github.com/ihmcrobotics/euclid

euclid buildstatus

Mecano, a rigid-body dynamics library built on top of Euclid and EJML: https://github.com/ihmcrobotics/mecano

mecano buildstatus

IHMC YoVariables, our core data structures tools that enable the time-series tracing and analysis of Simulation Construction Set: https://github.com/ihmcrobotics/ihmc-yovariables

ihmc-yovariables buildstatus

JOctoMap, a Java implementation of OctoMap: https://github.com/ihmcrobotics/joctomap

joctomap buildstatus

IHMC Realtime, a library for enabling soft real-time threading for Java on Linux using the RT_PREEMPT patches: https://github.com/ihmcrobotics/ihmc-realtime

realtime buildstatus

IHMC EtherCAT Master, a Java library using IHMC Realtime and Simple Open EtherCAT Master (SOEM) that makes it simple to start a software EtherCAT Master and pure Java data structures that map to EtherCAT Slave defintions: https://github.com/ihmcrobotics/ihmc-ethercat-master

realtime buildstatus

IHMC Robot Data Logger, an application for logging yo variables.

realtime buildstatus

IHMC Matrix Library

realtime buildstatus

IHMC Convex Optimization, an implementation of a number of algorithms for solving convex optimization problems.

realtime buildstatus

IHMC EKF

realtime buildstatus

IHMC ROS2 Library, a lightweight implementation of the ROS2 communication protocol.

realtime buildstatus

IHMC PubSub

realtime buildstatus buildstatus buildstatus

IHMC Messager Kryo

realtime buildstatus

IHMC Video Codecs

realtime buildstatus

IHMC JavaFX Toolkit

realtime buildstatus

IHMC Graphics Description

realtime buildstatus

IHMC Commons

realtime buildstatus

IHMC Native Library Loader

realtime buildstatus

IHMC Log Tools

realtime buildstatus

You can find all of our other repositories as well as the ones above at https://github.com/ihmcrobotics

ROS APIs

We provide a ROS 2 API for many of the core components in our software stack. You can find the .msg definitions for use in your own projects in this project's ihmc-interfaces folder.

We have ROS 1 support via the ROS 2 ros1_bridge package. You can find the ROS 1 message definitions and instructions on using the ROS 1 Bridge here: https://github.com/ihmcrobotics/ihmc_msgs

Building .jars

IHMC Open Robotics Software is pre-configured for generating Maven publications. You can publish directly from the source code right in to your local Maven repository, e.g. the $HOME/.m2 directory. These builds will be tagged with a build "version" of "LOCAL" instead of an incrementing version number.

An example workflow for developing against a local clone of the software:

  1. Clone IHMC Open Robotics Software
  2. Make modifications
  3. Publish to your local $HOME/.m2 repository

To publish jars to your local Maven repository:

$ cd /path/to/ihmc-open-robotics-software
$ gradle publishAll -PcompositeSearchHeight=0

To depend on the jars in your local Maven repository:

In this example we'll have a compile-time dependency of the locally built Simulation Construction Set project. In the build.gradle of the project you wish to have link against Simulation Construction Set:

repositories {
  mavenLocal()
  <your other repositories>
}

dependencies {
  api("us.ihmc:simulation-construction-set:LOCAL") {
     changing = true
  }
}

Creating a project

To create a project that uses IHMC Open Robotics Software, your project hierarchy needs to take a particular form.

First be sure you have completed the section above titled "Clone repositories".

Next, create your project folder:

mkdir -p src/ihmc/my-project-a

Follow the project setup tutorial at https://github.com/ihmcrobotics/ihmc-build#quick-project-setup.

Your directory structure should now look something like:

src/ihmc
├── my-project-a
│   └── build.gradle.kts
│   └── gradle.properties
│   └── settings.gradle.kts
├── my-project-b
│   └── ...
├── ihmc-open-robotics-software
│   └── atlas
│   └── common-walking-control-modules
│   └── ...
├── my-multi-project-c
│   └── subproject-a
│   │  └── build.gradle.kts
│   └── subproject-b
│      └── build.gradle.kts
├── ...
├── build.gradle.kts
├── gradle.properties
└── settings.gradle.kts

If this is set up correctly, you will have applied the ihmc-build plugin and use the dependency resolver methods exposed by the build extension. Alternatively, you can manually identify dependencies on projects using the normal Gradle syntax for project dependencies. A sample build.gradle dependency block:

/* Normal Gradle way */
dependencies {
  api(project(":ihmc-open-robotics-software:ihmc-java-toolkit"))
  testApi(project(":ihmc-open-robotics-software:ihmc-java-toolkit-test"))
}

/* ihmc-build way */
mainDependencies {
  api("us.ihmc:ihmc-java-toolkit:source")
}
testDependencies {
  api("us.ihmc:ihmc-java-toolkit-test:source")
}

Maintainers