API Downloads Links

(R2013b or higher)
Windows (Win64)
Linux (x86-64)
macOS (64-bit)

Windows (Win32 / Win64)
Linux (x86-64 / ARM / ARM64)
macOS (64-bit)


Windows (Win32 / Win64)
Linux (x86-64 / ARM / ARM64)
macOS (64-bit)

2. .tar.gz file preserves symlinks for macOS/Linux shared libraries


Linux (x86-64)


Windows (Win32 / Win64)
Linux (x86-64 / ARM / ARM64)
macOS (64-bit)

Note - this API is designed for ease wrapping in higher level languages rather than direct use

3. .tar.gz file preserves symlinks for macOS/Linux shared libraries

Datasheets and CAD

Below is a list of HEBI component manuals, datasheets, drawings, CAD models, and other useful links that can be useful when using the HEBI Robotics Platform.

Additional drawings and CAD models can be found on our public Github CAD repository.


Part Numbers Description Links


R8-Series Actuators



T5/8-Series Actuators

Older Products

Part Numbers Description Links



X5/8-Series Actuators


I/O Board



2-DoF Passive Knuckle

1-DoF Passive Base


Scope GUI Changelog

Scope 1.x

Version Changes


  • General

    • Added support for robot config 1.0

    • The 3D live viewer now uses imu information from the GravCompPlugin

    • Added support for drag & drop robot config files

  • LogViewer

    • Added a table showing basic information including serial number and names

  • Minor Changes and Bugfixes

    • Changed hebi-config to show Scope’s version

    • Changed sliders to react less to sensor noise

    • Added user notifications to imitation when selecting a non-default address


  • General

    • Added FOC feedback, commands, and sliders

    • Added support for HRDF 1.4 (T-Series, tags, web urls for meshes) and added option for clearing cached assets

    • Improved charting performance and fixed all known layout issues

  • LogViewer

    • Changed log reader to permit partially cut-off log files

    • Added FOC charts

  • Gains

    • Improved horizontal scrolling (some issues still remain)

  • Runtime

    • Increased minimum macOS version to 11.0

    • Updated to jdk 21 and openjfx 22-ea


  • General

    • Switched to a Primer based design and added dark themes

    • Added support for motor driver products

    • Added the hebi-config CLI tool for sending configurations from commandline

  • Packaging

    • added button for manually triggering update checks

    • simplified bundling of command line tools

  • Monitoring

    • Added integration with file explorers to open .hebilog files with Scope

    • Added support for dragging & dropping .hebilog and .hrdf files into Scope

    • Added more custom xml chart options


  • Packaging

    • Added snapshot downloads for early release builds

    • Added update functionality using rpm, sparkle, msix

    • Added macOS M1 support

    • Added standalone executables for sub-programs (e.g. logviewer)

    • Changed logo to match mobile Scope (Android, iOS)

  • General

    • Support for latest hrdf format

    • Internal updates and bugfixes

    • Upgraded to OpenJDK 19 runtime

  • LogViewer

    • Added more networking debug charts

    • Added support for .mapslogs


  • HRDF Viewer

    • Made joint mismatch more prominent

    • Added fbk / cmd lines to live view

    • Improved 3d line colors

    • Fixed dynamic frame offset

    • Fixed xyz plot window

  • Log Viewer

    • Added support for zooming in percentile charts

  • Imitation Devices

    • Added field for generating devices by copy & pasting API code

  • Firmware Updates

    • Fixed progress display


  • Monitoring

    • Improved log viewer and added 3D view

    • Improved 3D viewer (dynamic world view, center of mass)

    • Added keyboard shortcuts for saving (ctrl + s) and copying (ctrl + c) charts

    • Added axes/button viewer for mobile I/O

  • General

    • Added viewer for video acquired by hebi-video

    • Upgraded to OpenJDK 17 runtime

  • Bugfixes

    • Fixed the display of non-default extensions


  • General

    • Added Imitation UI to start 'fake' modules for testing and visualization purposes

    • Changed icons to match updated branding


  • Plotting (2D)

    • Added setting to choose whether errors should be signed or absolute

    • Improved padding to be more visible on the edges

  • Bugfixes

    • Fixed a bug that ignored fixed range in custom xml live plots

    • Fixed legend display in multi-trace charts


  • Plotting (2D)

    • Added error tracking to command charts

    • Added end effector tracking chart via HRDF viewer

    • Added support for multiple devices on a single chart

    • Made directory for custom charts settable Settings

    • General performance improvements

  • Plotting (3D)

    • Added HRDF viewer w/ support for 1.3.0 format: trees, includes, custom meshes

    • Added Phone/AR viewer

    • Added Orientation viewer

  • General

    • Made devices re-orderable using ALT + UpArrow / DownArrow


  • Monitoring

    • Improved performance of live plots

    • Improved performance of custom xml plots

  • Runtime

    • Updated to JDK 16

    • Improved latency and memory use

  • MacOS

    • Added signing and notarization to satisfy Big Sur


  • General

    • Fixed start via double-click on Linux


  • General

    • Changed scheduling mechanism to mitigate issues introduced by Windows 10 build 19041

    • Added customizable ports to user defined lookup addresses

    • Packaged UdpGateway utility to simplify VPN connections

  • Monitoring

    • Added additional example files to custom section


  • General

    • Fixed application bundling issues that were introduced in 1.6

  • Bugfixes

    • Fixed bugs related drawing dashed lines

    • Fixed bugs related to incorrect zoom behavior


Note: This update did a major upgrade to many libraries and fixed a lot of the performance issues on Linux. Unfortunately, it also introduced a few new issues, so we currently do not recommend using it for Windows or macOS.

  • General

    • Significant internal updates

    • Updated Java runtime from Oracle JDK 8 to OpenJDK 13

    • Updated OpenJFX from v8 to v13

    • Changed JChart2D charting framework to ChartFX

    • Added a splash screen

    • Improved Linux support

    • Reduced the file size for native images

  • Monitoring

    • Removed PPI field as Scope now has full High-DPI support

    • Improved panning and zooming capabilities

  • Bugfixes

    • Plots and log views now open on the same monitor as the main window

    • Fixed an issue that caused tooltips to move the main window into the foreground

  • New Issues

    • Windows: Adding Scope.exe to the taskbar and launching it from there results in a new window being opened. This will be fixed once JEP 343: Packaging Tool is released.

    • MacOS: Users reported a performance regression in plotting on some platforms.

    • Dashed lines currently do not display correctly when there are many close points


  • Dashboard

    • Added status for Rgb LED and renamed LOCK status

    • Added a Device Address field that becomes visible if messages are not coming from the reported address (e.g. on a mobile device that has multiple interfaces)

  • Monitoring

    • Added toggle for AccelIncludeGravity for supported devices

    • Added dialog for converting/exporting .hebilog files to MAT and CSV

  • General

    • Added tooltips to most actions

    • Added ability to manually change the interface list

    • Increased contrast and made feedback values more readable

    • Improved support for future sub-addresses

  • Minor Changes

    • Added link to issue tracker

    • Added user consent request for setting device reference points

    • Added user consent request for updating all devices at once

    • Removed deprecated buttons from the dashboard and context menu

    • Removed ability to rename via Family/Name fields as it was considered too confusing

  • Bugfixes

    • Fixed an issue on macOS where Close All could freeze Scope when closing multiple plots


  • Monitoring

    • Added an experimental log viewer that can render custom charts

    • Added sample chart files to the packaged binaries

  • General

    • Added support for sub-addresses. This allows connecting to processes that contain more than one device (e.g. a Simulator) and is a prerequisite for some upcoming features.


  • Monitoring

    • Added support for creating custom charts with xml files.


  • General

    • Changed Scope Icon

  • Dashboard

    • Added graphic for Android and iOS devices

    • Changed device parameters for effort to only accept zero input

    • Added ability to add offsets to the reference points

    • Removed (experimental) DHCP / Static IP switch

  • Gains

    • Added support for position limit strategy


  • General

    • Various minor design improvements

    • Added tooltips to icon buttons that have no names

  • Monitoring

    • Changed PPI / Window size to persist across restarts

    • Re-arranged plot button groups to be aligned vertically

    • Changed slider range to look at safety limits before PID controller targets

    • Reduced fallback position slider range to 4 (instead of 8) rotations

  • Gains

    • Fixed action buttons to top of screen

    • Changed advanced parameters to be sent even if hidden

  • Firmware Update

    • Added visual clue when updates are available

  • Bugfixes

    • Fixed a bug that caused the effort slider to send wrong initialization commands when in DIRECT_PWM strategy

    • Fixed Locked state reporting


Major design overhaul

RC 0.13

Revision Changes


  • Monitoring

    • Added ability to record log files

  • IO Tab

    • Changed digital outputs to toggle buttons instead of checkboxes to be less confusing

  • General

    • Updated bundled runtime to JDK8_u181

  • Bugfixes

    • Fixed an issue that caused load/save gains to fail if the previously used directory was deleted or renamed

RC 0.12

Revision Changes


  • Monitoring

    • Added I/O tab for plotting feedback from I/O boards and the mobile app

    • Added Ctrl+W keyboard handler for closing plot windows

  • Device

    • Disabled ref-point setting for multiple modules

  • General

    • Changed device overview to be hierarchical and always sorted

    • Fixed some display issues on Linux

RC 0.11

Revision Changes


  • Info

    • Added display of static/dhcp mode to ip address. This feature may require a firmware update.

  • Monitoring

    • The location when saving/loading gains is now persistent

  • General

    • Added QoS flags to UDP requests and increased receive and transmit buffers

RC 0.10

Revision Changes


  • General

    • Fixed Bootloader UI startup

    • Fixed a bug that caused Scope to crash if modules respond with malformed messages

RC 0.9

Revision Changes


  • Monitoring

    • Changed default position slider limits to +/- 4 rotations to prevent most cases of snapping when limits are left at +/- inf

  • General

    • Changed auto-update to work with new bootloaders

    • Added reset (bl) context menu for getting into new bootloaders

    • Added link to firmware changelog to auto-update dialog

    • Fixed some Linux specific rendering issues

RC 0.8

Revision Changes


  • Monitoring

    • Changed sliders to show feedback when disabled

    • Changed sliders to save/load state when switching between modules

    • Added slider targets that allow setting specific values

  • Gains

    • Added a button that loads default gains

    • Added another send button that additionally persists

    • Added highlighting when gain input is different from set value

  • Info

    • Removed Connectivity section

  • General

    • Various minor display changes

    • Fixed some Linux specific rendering issues

RC 0.7

Revision Changes


  • General

    • Added multi-select

    • Various cosmetic changes (e.g. fixed cut-off …​ in Linux)

    • Limited info slider range to 1-100 Hz

  • Monitoring

    • All charts: added optional fixed time windows that force the displayed time range to remain constant regardless of the number of points or their incoming frequency

    • Latency chart: fixed a bug that caused points to be displayed on the edges when zooming

    • Reduced aggressiveness of point skipping

    • Removed max limit (was 20 rad/s) from velocity slider

    • Changed plotting windows to cascade rather than being stacked

  • Gains

    • Changed number of zeros of D and I term to better hint at expected values

    • Added ability to save and load group-gains

  • Update Dialog

    • Removed stale modules from update search

    • Changed table to immediately refresh when opened

    • Added minor indicator if updates are available

RC 0.6

Revision Changes


  • General

    • Renamed torque to effort to better accommodate non-rotary joints

    • Added ability to automatically update multiple modules

    • Added ability to select individual ip addresses for lookup

    • Replaced auto-sort with manual sort to avoid resetting the selection when new devices join the network

    • Reduced size to better fit on Laptop displays

    • Various cosmetic changes

  • Monitoring

    • Added "hw-type | serial" to plot title

    • Added manual scaling options to better support demos and HighDPI displays

    • Reduced rate that arrow keys move sliders to 20% of the original rate

    • Improved performance of latency chart

    • Changed overload behavior to skip points instead of introducing lag

  • Gains

    • Added ability to save and load gains to and from XML files

  • Device

    • Added fields that allow setting non-zero position/torque reference points

RC 0.5

Revision Changes


  • General

    • Added display toggle between human readable names and hardware type and serial number

    • Added a button to refresh network interfaces to reduce the need for restarts

  • Gains

    • Changed gain validation to allow +/- inf values for min/max target/output and I-Clamp

RC 0.4

Revision Changes Bugfixes


Added selector for M-Stop strategy


  • Fixed an SSL certificate issue related to firmware updates


  • Changed name of Main GUI to "Scope"

  • Added auto-update

  • Added standalone binaries for mac, linux, windows

  • Removed all "unsafe" buttons from the device tab

  • Added scrollbars to all tabs to avoid issues with low resolution screens

RC 0.3

Revision Changes Bugfixes


  • Removed deprecated debug buttons

MATLAB API Changelog

After v1.0 release, major version number changes indicate backwards incompatible changes, while minor version number changes are backwards compatible, both in API and ABI.

Release 2.0

This release contains some minor breaking changes highlighted in bold below, so the main version number was bumped to v2. However, most projects will not need to change anything when upgrading from v1 to v2.

Revision Changes


  • HebiUtils

    • Added loabRobotConfig to read robot config v1.0 files

  • HebiKinematics

    • Added support for HRDF v1.4

    • Added getIndexOfTag for accessing the index of hrdf tags

  • HebiGroup

    • Added experimental send('MobileLayout', <file>) for sending layout files to Mobile I/O devices

    • Added experimental setLocalState to add custom user state into log files. The information stays locally and does not get sent over the network.

    • Breaking change: added locking behavior to the special-cased inf lifetime. Locking can be disabled by setting the empty matrix [].

  • HebiArm

    • Changed arm plugin internals to match config conventions. Going forward it is recommended to create plugins via robot config files

    • Breaking change: Gravity and dynamics compensation are not active by default anymore

Release 1.8.x

Revision Changes


  • General

    • Added a simplifed HebiMobileIO API for working with Mobile I/O apps to get feedback and set axis labels etc.

    • Added motor driver feedback to full view and added FocCommandStruct for commands

  • Bugfixes

    • made TrajectoryGenerator more robust against unspecified limits

    • various internal improvements

Release 1.7.x

Revision Changes


  • Bugfixes

    • Fixed import in newLinearMove

    • Added warning if HebiArm encounters joint with missing orientation feedback

  • HebiMaps

    • Increased settings timeout to 8 seconds and added -Dhebi.maps.settings.timeout=[ms] property


  • General

    • Added support for HRDF 1.3.0: trees and includes

    • Improved HRDF validation and error messages

  • HebiUtils

    • Added loadHRDF to support simple serial chains as well as complex tree structures. This replaces HebiKinematics(hrdfFile) as the recommended way to load hrdf files.

  • HebiKinematics

    • Added getFirstJointFrame which returns the static transform of the first joint in the world frame. This is commonly used when determining the IMU frame for orientation readings.

  • New Classes / APIs

    • Added HebiArm, HebiArmPlugin, and HebiGripper to simplify working with arm configurations. These used to be experimental.

    • Added HebiMobileIO to simplify working with the mobileIO iOS and Android app


  • HebiTrajectory

    • Trajectories can now start at arbitrary time offset

    • Added getStartTime() and getEndTime() methods

  • HebiTrajectoryGenerator

    • Dramatically improved the numerical stability of long running minimum-jerk trajectories (inspired by Burke2020). Trajectory generation is now independent of the absolute time and only limited by RAM. In our tests we were able to solve 10 million segments in ~4 seconds using 13 GB Java heap space.


  • General

    • Changed scheduling mechanism to mitigate issues introduced by Windows 10 build 19041

    • Changed Effort units from Nm|N to Nm

    • Added initial support for MAPS

  • HebiLookup

    • Added customizable ports to user defined lookup addresses


  • General

    • Improved xml validation and error messages

  • HebiKinematics

    • Added support for negative generic joint axes

  • HebiTrajectoryGenerator

    • Changed min duration to be applied between waypoints rather than only on the total duration

    • Reduced default min duration to 1s

  • HebiUtils

    • Added sendWithRetry as a convenience wrapper for messages that require a delivery guarantee (e.g. gains)


  • General

    • Added support for R-Series actuators

    • Added support for HRDF v1.2.0

    • Improved Communications

  • HebiGroup

    • Added HebiEnum for integer based feedback values

  • HebiKinematics

    • Added support for inline links

  • Bugfixes

    • Fixed an issue that broke acknowledgements after sending a message that is too large

    • Changed trajectories to cap values that are out of bounds

Release 1.6.x

Revision Changes


  • HebiLookup / HebiGroup

    • Added support for sub-addresses. This allows the API to connect to processes that contain more than one device (e.g. a Simulator) and is a prerequisite for some upcoming features.

  • Bugfixes

    • Removed duplicate error messages to avoid rare 'red walls' of errors that render MATLAB unusable. We’ve seen this happen when broadcasting on non-standard VPN interfaces.


  • Bugfixes

    • Fixed an issue with loading hrdf files that was introduced in 1.6


Warning: Do not use this release due to broken hrdf file parsing.

  • HebiLookup

    • Fixed behavior of newGroupFromNames such that non-wildcard names can’t return more than one module.

  • HebiGroup

    • Added SafetyParamsStruct for reading and sending safety related parameters

    • Added getSafetyParams() and send('SafetyParams', struct)

    • Added addressMode (dhcp/static) to getInfo() table

    • Added AccelIncludeGravity, AppendLog, and ClearLog to send() method

  • GainStruct

    • Fixed issues when parsing xml files with extra whitespaces between values

  • HebiKinematics

    • Added FixedFrame to getJacobian which allows for the Jacobians to be calcultated in any frame. This is useful when working with robots where the point that is fixed to the world can change (e.g. walking robots).

  • HebiUtils

    • Added saveSafetyParams and loadSafetyParams to save and load human readable XML files to a SafetyParamsStruct.

Release 1.5.x

Revision Changes


  • HebiGroup

    • Added hasReceivedAck = group.send('RequestAck', true) for implementing guaranteed delivery similar to sendWithAcknowledgement in other APIs.

    • Added OffsetReferencePosition and OffsetReferenceDeflection

    • Deprecated ReferenceEffort and replaced it with ZeroReferenceDeflection

  • HebiKinematics

    • Improved trajectory implementation to be significantly faster and more numerically stable. The algorithm now scales O(n) instead of O(n^2).


  • HebiGroup

    • Added VelocityLimit and EffortLimit to send method

    • Added sequence and rxSequence to full view

  • HebiKinematics

    • Added getPayload()

  • HebiUtil

    • Added readGroupLogInfo

    • Added newImitationGroup

  • Logging

    • Improved .hebilog to .mat file conversion

Release 1.4.x

Revision Changes

1.4.3 (2457)

  • Bugfixes

    • timeout now also works for getNextFeedbackFull and other specializations

    • fixed hrdf parameter overriding (e.g. mass_offset) for links and brackets

1.4.2 (2455)

  • Bugfixes

    • Fixed a bug when parsing com_trans in hrdf

1.4.1 (2452)

  • HebiKinematics

    • Added a warning if 'so3' is not a valid rotation matrix (det != 1)

  • General

    • Improved help documentation

    • Removed overview documentation related to S-Series modules (addBody and newConnectedGroup). Old calls still work.

1.4 (2443)

  • HebiLookup

    • Added initialize() method to allow for a reset without restarting MATLAB

  • HebiGroup

    • Added state feedback to full feedback structs and log formats

    • Added Mobile feedback view

    • Added IO and Mobile feedback to supported MAT-file conversions in stopLog

    • Added support for reusing multiple feedback structs in a single call to getNextFeedback. This enables retrieving different types, e.g., Full and IO, in a single call.

    • Added getNextFeedback('timeout', 0) for non-blocking checks. Returns empty if no new feedback is available.

    • Added inf to accepted values for command lifetime. This causes commands to no never time out.

  • HebiKinematics

    • Added experimental support for loading hrdf v1.1 files

    • inverse kinematics: Changed default initial conditions to a small non-zero value (1E-6) to avoid starting in singularities. Note that this parameter is only optional to remain backwards compatible, and that users should always supply their own initial conditions.

  • HebiUtils

    • Made last directory in convertGroupLogsUI persistent

  • General

    • Added QoS flags to UDP requests and increased receive and transmit buffers

    • Internal improvements related to writing MAT files

    • Changed linear axes in GenericJoint to tx,ty,tz instead of x,y,z

  • Bugfixes

    • Increased max number of arguments of getNextFeedback so that view can be called in conjunction with timeout

    • Fixed a rare bug that caused the synchronization mechanism to throw away good data when reading logs created by the C based APIs under certain circumstances

Release 1.3

Revision Changes


  • General

    • Further improved help documentation

  • HebiUtils

    • Added loadGroupLog and loadGroupLogsUI convenience methods for reading logs into memory

    • added quat2rotMat to convert a quaternion to a 3x3 rotation matrix

  • HebiGroup

    • Added alpha channel as settable color. 0 = transparent

    • Added alpha channel to led feedback

    • Added pose feedback quaternion. Note that this may require a firmware update.

Release 1.2

Revision Changes


  • General

    • Improved help documentation

  • HebiUtils

    • Added plotLog and plotTrajectory methods for plotting

    • Added convertGroupLogsUI to load one or more logs via a GUI dialog

    • Added info and gains to return arguments in convertGroupLog

  • HebiLookup

    • Added a pause to clearModuleList to rebuild the module table before returning

  • HebiGroup

    • Added raw format option to stopLog to avoid costly conversions. This is useful for rolling log-files (e.g. create a new file once an hour) inside a control loop.

    • Added getInfo and getGains to log groups created with HebiUtils.createGroupFromLog

  • HebiKinematics

    • Added support for 'X8-16'

    • Added 'Frame' to frame strings, e.g., 'Output' becomes 'OutputFrame' (backwards compatible)

  • HebiTrajectoryGenerator

    • Removed internal dependency on HebiKinematics. HebiKinematics is now only required for certain parts of the API such as executeTrajectory with effort compensation.

    • Improved newLinearMove

  • Bugfixes

    • Fixed a bug that caused HebiUtils.saveGains to create invalid gain files on certain non-English locale settings (e.g. German)

Release 1.1

Revision Changes


  • HebiKinematics

    • General performance improvements across the board

    • Increased default max iterations for IK from 75 to 150

  • HebiTrajectoryGenerator

    • Significantly improved performance of 'UnconstrainedQp' algorithm. It is now feasible to use for large number of waypoints. 'MinJerkMove' can now be considered deprecated.

  • Bugfixes

    • Setting control strategy was changed to not accept non-integer values

    • Fixed a network lookup failure that occurred when certain VPN programs were active

    • Fixed getJacobianEndEffector to be calculated at the output rather than at the center of mass of the end effector

    • Fixed a bug that caused 'ReferenceEffort' to be ignored when it was the only command that got sent.

Release 1.0

Revision Changes


  • General

    • Renamed torque to effort to better accommodate non-rotary joints. Existing code can be upgraded by running search and replace as follows,

      • torque → effort (case-sensitive)

      • Torque → Effort (case-sensitive)

      • TorLim → EffLim (not case-sensitive)

  • HebiUtils

    • Added ability for saving and loading gains to and from xml files

Before Release 1.0, changes that break backwards compatibility are highlighted in bold.

RC 1.0

Revision Changes


  • HebiLookup

    • Added getters for lookup addresses and frequency

  • HebiGroup

    • Added better error message when log conversion fails due to memory constraints

  • HebiKinematics

    • Improved AddBody help documentation

    • Improved TipAxis objective for IK

    • Improved IK to keep results to within one rotation of the initial condition


  • HebiGroup

    • Renamed set() to send()

    • Added 'Inf/infinity' as valid input to min/max output/target and I-clamp gains

    • Added 'motorPosition' to full feedback

    • Fixed a bug that occurred on some machines when reading log files

    • Added support for reading partially written log files

    • Added setting encoder and position reference points

  • HebiTrajectoryGenerator

    • Changed the default algorithm to 'UnconstrainedQp'

  • HebiKinematics

    • Made naming more consistent

    • Added 'X5-LightBracket' and 'X5-HeavyBracket' w/ various mount options to available module types

    • Reverted direction of the gravity vector for 'getGravCompTorques' (breaks backwards compatibility!!!)

    • Made SO3 objective more stable

  • HebiPoseFilter

    • Overhauled API to make it more usable

  • General

    • Made 'hebi_load()' callable to simplify pre-loading libraries

RC 0.7

Revision Changes


  • HebiLookup

    • Added methods to create a group from serial numbers

    • Switched display of mac addresses to serial numbers

  • HebiGroup

    • Added group.stopLog('LogFormat', 'raw') to stop logging without doing any expensive conversion. This is useful for cases where logging needs to be stopped without halting execution

    • Fixed a bug introduced in rev1732 that prevented gtroups of >30 modules from logging


  • HebiGroup

    • Internal changes to the way logging is done (fully backwards compatible)

    • Added info messages, e.g., gains, names, etc., to log files. Support for reading logged info messages will be added at a future date.

  • HebiKinematics

    • Added an objective to IK that tries to keep the joint angles within +/- pi of the initial condition. This fixes an issue where IK resulted in jumps over multiple rotations on slight variations of the initial conditions.


  • HebiGroup

    • Internal improvements related to converting logs

    • Changed 'Hdr' log format to record each module separately

  • HebiKinematics

    • Added new joint types including X8-3 and X8-9

  • HebiPoseFilter (not a supported API)

    • Fixed a bug that caused the filter to initialize with NaN under some rare conditions


  • HebiTrajectory

    • added getWaypointTime() to get access the times when waypoints are hit.

    • removed the restriction that 'time' needs to start at zero for 'UnconstrainedQp' trajectories.

  • HebiKinematics

    • Fixed a bug that prohibited the calculation of forward kinematics for chains without any joints. The empty matrix "[]" is now a valid position argument.

  • HebiLookup

    • made initOnce() public for cases where the loading of additional Java libraries resets the Java classpath without reinitializing the backing MATLAB class.


  • HebiTrajectoryGenerator

    • Removed requirement for defined end positions when a user supplies a fully defined time vector (UnconstrainedQp algorithm only)


  • HebiKinematics

    • Added ability to set a payload for calculating compensatory torques

  • HebiTrajectoryGenerator

    • Added trajectory implementation that supports velocity and acceleration constraints ('unconstrainedQp')

    • Added speedFactor to allow users to slow down trajectories

    • Overhauled TrajectoryGenerator API

RC 0.6

Revision Changes


  • Added Trajectories to the API

    • Note that RC 0.6 is fully backwards compatible with RC 0.5, but we felt that trajectories was a large enough addon to increase the version number.

  • Bugfixes

    • Fixed logging to stop automatically if the disk is full

RC 0.5

Revision Changes


  • changed HdrHistogram conversion to combine all output files into a single file with multiple tags

  • minor performance improvements

  • Bugfixes

    • Fixed a networking issue that caused a "wall of errors" when cables were disconnected on macOS and Linux


  • HebiLookup

    • the display was changed to make it more obvious when modules become stale

  • HebiGroup API

    • getInfo() now returns a table that behaves consistently for any number of modules. Added 'pcRxTime' and removed 'distal/proximal' ids.

    • changed 'Min/Max-PositionLimit' in set() to a single 'PositionLimit' parameter that is consistent withHebiKinematics.addBody()

    • getNextFeedback() now throws an exception on timeout instead of returning empty. Log-replay groups continue to return empty when the end of a log file is reached.

    • added an optional 'Timeout' parameter to getNextFeedback for setting custom timeouts

  • HebiKinematics General

    • improved display to match HebiGroup and HebiLookup

    • added convenience overloads for getJacobianEndEffector and getForwardKinematicsEndEffector. This should simplify auto-complete.

  • HebiKinematics Bodies

    • added required 'twist' parameter to 'X5Link'. The previous default value was 'pi'.

    • 'CoM' was changed to be a 3x1 vector instead of a transform. The vector describes the location of the CoM in the body’s input frame.

    • 'FieldableGripper' is now considered a link and instead of a DoF

    • added getBodyInfo() and getJointInfo()

    • added support for overriding 'mass' on any body

    • added support for overriding position, velocity and torque limits on joints. Position limits get used by IK.

    • changed the default position limits for X5 modules to be +/- Inf

    • deprecated 'X5Joint' and added 'X5-1', 'X5-4' and 'X5-9'

  • HebiKinematics IK

    • added 'nan' inputs to 'xyz' objective to ignore not applicable dimensions

    • added a warning message in case IK doesn’t converge within max number of iterations

RC 0.4

Revision Changes


  • Added support for logical vectors in reset/boot commands

  • Changed logical inputs to only allow 0 or 1 values to avoid ambiguity


  • Changed default naming of logs to use absolute wall-clock time

  • Minor performance improvements


  • Added getBaseFrame() to kinematics


  • Added basic support for I/O Board (commands, feedback, logging struct)

  • Minor performance improvements


  • Added support for high-res position

  • Added support for setting position limits (virtual hard stop)

  • Minor performance improvements


  • Changed getJacobian() output to 6xNxM matrices to be consistent with getForwardKinematics()

  • Changed getAccelCompTorques name to getDynamicCompTorques

RC 0.3

Revision Changes


  • Internal performance improvements

  • Bugfixes

    • Log files now always get closed properly when disposing groups


  • Added getAccelCompTorques to HebiKinematics


  • Added command lifetime safety feature to mitigate risks on unexpected interruptions (requires firmware upgrade to work)


  • Cleaned up auto-complete

  • Changed display of empty groups to be more appropriate


  • Added GenericLink to HebiKinematics

  • Bugfixes

    • Modified group creation such that each module must be unique


  • Improved display for HebiLookup and HebiGroup


  • Extensive API rework

Python API Changelog

Changes that break backwards compatibility are highlighted in bold.


Features Changes/Fixes
  • Now supports HRDF v1.4, including support for T-Series modules


Features Changes/Fixes
  • Use unified binary for macOS

  • Fixed issues with logging and plotting logs


Features Changes/Fixes
  • Fixed segfault from bad ffi function definition

  • Fix extra char at end of send_label string


Features Changes/Fixes
  • Report IP addresses on Lookup entries

  • Added new function send_layout to MobileIO class for setting widget locations in MobileIO 2, experimental

  • Fixed "sticky" mobileIO behaviors when setting slider snap/values.

  • Fix extra char at end of send_label strings


Features Changes/Fixes
  • Moved some functions in the LogFile class out of the public interface

  • Fixed bug when trying to clear previously commanded field

  • Fixed "sticky" mobileIO behaviors when setting slider snap/values.


Features Changes/Fixes
  • Added new fields for controlling motor drivers

  • Stale modules can be removed from Lookup objects by calling reset()

  • Added faster versions of kinematics and dynamics math functions, which are used by default by the Arm API internally

  • Comma separated number strings are not valid inputs for most math functions (previously was allowed)

  • Fixed offset error in IO pins when working with IO boards

  • Fixed miscellaneous arm API trajectory bugs


Features Changes/Fixes
  • Fix sending of unicode strings for text fields

  • Fix setting multiple command field entries with single value


Features Changes/Fixes
  • Type hint support for most of public API

  • Updated to v2.3.0 of the C API (from 2.1.0)

    • M1 Mac support (beta)

    • Support HRDF 1.3

  • Improved string display of various HEBI Python objects

  • Experimental Mobile IO wrapper tweaks (note backwards incompatible changes to experimental API!)

    • Change get_button_diff to return -1 (to off) / 0 (unchanged) / 1 (to on) instead of pseudo-enum

    • Change "set_text" function name to "add_text"

    • Support setting/reading button/axis labels

    • Added "resetUI" function to set Mobile IO devices to default state

  • Fix arm API nan check when setting joint limits

  • Fix arm API tip axis IK objective

  • Fix start/end default trajectory waypoints

  • Fix handling of single-element name/family lists when creating groups


Features Changes/Fixes
  • Updated to use C API 2.1.0

  • Experimental Arm API fixes:

    • aux state bugfixes

    • impedance controller bugfix and parameter renaming

    • double joint plugin effort bugfix


Features Changes/Fixes
  • Experimental Arm API release

  • Fix text spacing on plots

  • Mobile IO updates

    • marked as experimental

    • added optional blocking/non-blocking sends of settings

    • added optional timeout for get_next_feedback


Features Changes/Fixes
  • Added MobileIO API

  • Fix a bug where flag field message getters and setters could raise an exception

  • Fix a bug where bool field message getters and setters could raise an exception

  • Fix a bug where enum field message getters could raise an exception

  • Fix a bug where creating a group by mac addresses would raise an exception

  • Fix a bug where hebi.util.plot_logs would modify the state of the input LogFile object

  • Use a different kind of timestamp for log file reading, to be consistent with the other HEBI APIs


Features Changes/Fixes
  • Added GroupFeedbackView and GroupCommandView classes

  • Add ability to set enum type fields by a string which corresponds to a specific value in the enumeration

  • Fix bug where trajectory generator would raise exception if no velocity or acceleration were passed in as an argument

  • Fix bug where non-present message fields sometimes appeared to be present

  • Fix bug where string fields could not be cleared

  • Fix bug where string fields could not be accessed in non-group container

  • Fix bug where vector3f and quaternionf fields could not be accessed without raising exception in non-group container

  • Fix Python 3.5 incompatibility issues

  • Fix bug where LED fields could not be properly retrieved

  • Fix bug where control_strategy could not be set using a string

  • Fix bug where reuse_fbk parameter of LogFile.get_next_feedback was always ignored

  • Fix bug where input frame type was missing from RobotModel API

  • Improve PyPy3 support


Features Changes/Fixes
  • Add RobotModel element metadata API

  • More informative repr() for the RobotModel API

  • About a dozen new fields in the command, feedback, and info APIs

  • R Series actuator support

  • Add ability to load HRDF from a raw string

  • Target C API 2.0.0

  • Change RobotModel methods to return numpy.ndarray instead of numpy.matrix

  • Drop Python 2 support

  • C/Python FFI layer performance improvements


Features Changes/Fixes
  • Target C API 1.6.0


Features Changes/Fixes
  • battery_level field for feedback

  • pwm_command field for feedback

  • Significantly faster trajectory generation with packaged C API binary (see C API 1.5.0 changelog)

  • Fix TypeError being raised when attempting to set module controlled LED color

  • Target C API 1.5.0


Features Changes/Fixes
  • Added human readable representations (i.e., repr()) for most public facing class instances

  • Implemented hebi.util.plot_trajectory

  • Implemented hebi.util.plot_logs

  • Fix erroneous raised exception when hebi.trajectory.create_trajectory is passed a non None velocity or acceleration

  • Fix an AttributeError related to missing weakref slot in LogFile - exceptions would be raised when invoking feedback_iterate

  • Fix an AttributeError raised when using LogFile instances when HEBI_DEBUG is enabled

  • Fix an AttributeError raised when using Lookup instances when HEBI_DEBUG is enabled


Features Changes/Fixes
  • added util.clear_all_groups to explicitly dispose of all groups, which can be helpful in environments such as IPython

  • Add an atexit handler which explicitly finalizes all groups created (resolves some crashing python scripts)

  • Fix a memory leak which doesn’t properly dispose of unreachable group instances

  • Fix a bug where lookup.lookup_frequency would always throw an exception

  • API memory footprint should be smaller due to using __slots__ in many internal structures

  • Add human readable output (repr()) for more objects in the API


Features Changes/Fixes
  • Lookup frequency is now settable

  • Added motor_position field to feedback

  • Added mobile feedback fields (i.e., ar_position, ar_orientation and ar_quality)

  • Added HRDF support

  • Added ability to query Python and C API versions at runtime

  • Some objects defined in the hebi package now have human readable representations (repr())

  • Update targeted C API version to 1.4.2

  • Automatically append .hebilog file extension in Group.start_log if no extension was given

  • Fix a bug in the trajectory generator which fixes invalid default velocity and acceleration values


Features Changes/Fixes
  • Update targeted C API version to 1.3.0

  • Significantly improved RobotModel forward kinematics performance

  • Improved source code documentation


Features Changes/Fixes
  • Add an opt-in C API profiler to help detect computational bottlenecks outside Python code

  • Add optional output parameters in RobotModel API methods

  • Improve RobotModel API performance

  • Improve RobotModel thread local caches


Features Changes/Fixes
  • Added boot, position_limit and reset fields to GroupCommand

  • Added clear method to GroupCommand

  • Added orientation, limit, m_stop and state fields to GroupFeedback

  • Added microsecond alternative fields for timestamps in GroupFeedback

  • Added getter fields for commonly used fields, allowing the user to reuse an already allocated numpy array

  • Added linear joints to the RobotModel API

  • Added the "custom objective" function to the RobotModel API

  • Update targeted C API version to 1.2.0

  • Fix bug where the translation vector was incorrect for X8 series actuators

  • Improve memory usage at ctypes layer

  • Add thread local caches for the RobotModel API

  • Various small performance improvements

  • Improve PyPy 2.7 and 3.3 support


Features Changes/Fixes
  • Fixed edge case when RobotModel had no degrees of freedom

  • Improved memory usage at ctypes layer

  • Improved error message readability

  • Added more argument safety checks for internal components

  • Changed versioning convention to include a revision version


Features Changes/Fixes
  • Added name and family fields in the GroupCommand class

  • Added gains API For GroupCommand and GroupInfo

  • Updated targeted C API version to 1.0.0

  • Fixed a buffer overflow issue in the Lookup class

  • Improved source code documentation

  • Added more value and type checks in internal components

ROS API Changelog

The changelog for the ROS API is maintained at:

CPP API Changelog

After v1.0 release, major version number changes indicate backwards incompatible changes, while minor version number changes are backwards compatible, both in API and ABI. Changes that break backwards compatibility on major version releases (or experimental features or pre-v1.0 versions) are highlighted in bold.


Features Changes/Fixes
  • Added basic Robot Config File support for the Arm API

  • Add several fields to command/info messages:

  • User Settings float and bytes payloads 1-8

  • IP address, subnet mask, and default gateway

  • mechanical, electrical, and firmware type and revision

  • Update C API from 2.9.0 to 2.12.0

  • provides support for HRDF 1.4

  • adds infinite lifetime capabilities for supporting devices

  • Make objectives non-copyable and pass by reference; prevents segfault if objectives are freed when copied in

  • Update bundled Eigen dependency to v3.4.0

  • Clean up various warnings


Features Changes/Fixes
  • Add subtree support for RobotModel class

  • Implement several Lookup updates:

  • Can specify interfaces

  • Has a "reset" function

  • Returns "IP address" and "stale status"

  • Return mesh frames from RobotModel FK and Jacobians

  • Added "getMeshPaths" function to RobotModel

  • Support universal binary on macOS systems

  • Update C API from 2.3.1 to 2.9.0


Features Changes/Fixes
  • Added subviews for command and feedback.

  • Fix build warnings

  • Change include paths in some files so that everything is relative to root C++ API source folder


Features Changes/Fixes
  • Update C API to fix trajectory crash

  • Fix off-by-one error in Mobile IO "getButtonDiff"

  • Extend Mobile IO creation wait time


Features Changes/Fixes
  • Mobile I/O API finalization and update

    • overhaul of Mobile I/O API

    • change from "experimental" to "util" namespace; future changes will now fully respect semantic versioning.

    • now uses an "update" function structure similar to the Arm API

    • removed "MobileIOState" and "MobileIoDiff" structures; track within API class directly

    • clarified name of several functions (setSnap → setAxisSnap, etc)

    • add new functions for setting and getting button/axis label text

  • Updated C API dependency to 2.3.0 (for "set label" functionality)


Features Changes/Fixes
  • Added inner effort command field to feedback message

  • Added MacOS ARM64 build for Mac M1 compatibility.

  • Support HRDF 1.3

  • Updated C API to 2.2.0

  • Add "Arm API" docs to C++ API documentation

  • Addressed library symbol visibility issues causing problems when linking with some ROS 2 programs.

  • Fixed edge cases in FK commands for models with no DoF (see C API changes)


Features Changes/Fixes
  • Experimental Mobile I/O Wrapper: Added getPosition and getOrientation functions to more easily access commonly used AR data

  • Experimental Arm API: Can now add end effectors with custom COM, interia, mass, and output frame

  • "Nightly" builds are now created on every repo change between official releases; visible in the "archive" folder. These cannot be guaranteed to maintain backwards compatibility, but can provide bugfixes and features faster than waiting for a full versioned release.

  • Added RobotModel::loadHRDFString function to create a RobotModel object from a string, not just a file.

  • Added ability to retrieve RX sequence number from feedback packets


Features Changes/Fixes
  • added experimental high-level "Arm API" to enable easier control of robotic arm systems


Features Changes/Fixes
  • Fix incorrect behavior when getting and setting IO pin values

  • explicitly set CMake policy to prevent CMake warning


Features Changes/Fixes
  • Reduce conversion needs by adding (deprecated) overloads for:

    • getJ

    • getJacobians

    • getFK

    • getForwardKinematics

    • getFrameCount

  • Fix multiple definition error


Features Changes/Fixes
  • Robot Model:

    • Added "input frame" type for forward kinematics operations

    • Added end effector support (custom and parallel gripper types)

    • Added R-series support (actuator, link, bracket, and end effector)

    • Added options for link input + output type

    • Support import of HRDF format 1.2.0

  • Robot Model:

    • removed "combine" functionality for addJoint and addRigidBody

    • now only allows addition of elements which match the physical interface of the previous element

    • changed the behavior of "end effector" frames; by default, none are returned unless an "end effector" is specifically added

    • Changed usages of HebiJointType, HebiFrameType, and HebiRobotModelElementType C-style enums to C++ scoped enums

  • Fixed bug when setting IO pins in commands; commands would sometimes affect other pins.

Conversion guide from 2.x to 3.1+:

"Combine" removal:

  • addJoint and addRigidBody no longer accept combine parameters; the behavior defaults to combine = false now. If you used combine = true, your logic needs to be adjusted to ignore the additional frame.

Enum changes:

  • ActuatorType, LinkType, and BracketType changed from nested enums in hebi::robot_model::RobotModel to enums in namespace hebi::robot_model.

    • Old code will compile, but will have "deprecated" compiler warnings until updated

  • RobotModel functions getFrameCount, getForwardKinematics, getFK, getJacobians, and getJ now all use hebi::robot_model::FrameType C++ enum instead of HebiFrameType C enum

    • Old code will compile, but will have "deprecated" compiler warnings until updated

  • RobotModel functions addJoint changes from HebiJointType to hebi::robot_model::JointType

    • Old code will compile, but will have "deprecated" compiler warnings until updated

  • Any function calls to MetadataBase::elementType() changed return from HebiRobotModelElementType to hebi::robot_model::ElementType.

  • Return type of <Actuator/Bracket/Joint/Link>Metadata::<actuator/bracket/joint/link>Type() changed from Hebi<Actuator/Bracket/Joint/Link>Type to hebi::robot_model::<Actuator/Bracket/Joint/Link>Type

Change in acceptable robot model configurations:

  • There are only certain configuration allowed when adding robot model elements together. For example, an X5 actuator cannot be added directly onto an X5 actuator, as this isn’t physically possible.

  • Compatible types are based on physical parts that would connect. This is documented in the HRDF specification:

  • To workaround this, one can add a single rigid body between the incompatible elements. This adds a frame and body with mass, but the transform is identity and mass is zero so this does not change the relative transforms. If this workaround is used, code will need to add an offset when retrieving later frames in the chain.

End effector behavior:

  • End effectors have become first-class robot model elements that can be explicitly added to the end of robot model chains.

  • By default, there is no "end effector" added to robot model objects, which means "GetFrames(FrameType::EndEffector)" will return an empty vector unless an end effector is explicitly added.

  • For previous code calling GetFrames(HebiFrameTypeEndEffector) on a robot model created via calling RobotModel::add*, you should now add call RobotModel::addEndEffector(EndEffectorType::Custom) after adding other robot model elements to your robot. Note that this will also add an Output frame to the return of GetFrames(FrameType::Output), so be sure to adjust any code explicitly counting on the number of output frames.

  • For code importing an HRDF of version < 1.2.0, this end effector is automatically added to attempt to ease transitions

  • For code importing an HRDF of version >= 1.2.0, no end effector is added unless it is explicitly listed in the HRDF.


Features Changes/Fixes
  • Added ability to set and clear text in the experimental mobile IO API

  • Added ability to get raw feedback from experimental mobile IO API

  • Removed deprecated Jenkinsfile


Features Changes/Fixes
  • Updated various messages:

    • Info:

      • Added "serial" getter for Info packets

    • Info and Command:

      • Added mstop strategy

      • Added position limit strategies

      • Added velocity limits

      • Added effort limits

      • Added flag for whether or not accelerometer feedback includes gravity (on supporting devices, namely Mobile IO devices

    • Command:

      • Added ability to set strings for and clear the "log" text field in the Mobile IO apps

    • Feedback:

      • Added "pwm command" feedback

  • Add "robot element metadata" that allows for introspection of RobotModel objects.

  • Import/Export safety parameters from/to a file into/from GroupCommand objects

  • Export safety parameters to a file from GroupInfo objects

  • Added "experimental" namespace intended for feature-preview items

  • Added "mobile io wrapper" to experimental namespace that allows for easier interface with Mobile IO devices

  • Update core C API from 1.4.2 to 1.8.0

    • Significantly faster Jacobian computation

    • Full wildcard lookup supported when creating groups

    • Significantly faster trajectory solver implementation

    • Added "subaddress" support in lookup, commands, feedback, and logging; allows for simulator support

  • Removed i686 linux build (due to C API update)

  • Cleaned up code style:

    • default destructors and accessibility for deleted copy/move assignment operators

    • const on move operators (src/util.hpp)

    • made several getters inline

  • Added "FunctionCallResult" used when importing safety parameter files to allow error message to be accessed

  • Bugfixes fixed in core C API from 1.4.2 to 1.8.0 update

    • Fixed getters for motor position, ar position, ar orientation, ar quality, and battery level in feedback

    • Locale invariant conversion when reading in .xml files, such as gains and HRDF (always expect "1.23" instead of "1,23", regardless of system’s locale setting)

    • Use Ethernet header instead of message packet content to discover modules on the network (fixes issue when using multiple interfaces - wired and wireless - on iPad or Android running HEBI Mobile I/O)


Features Changes/Fixes
  • Updated to C API v1.4.2 to fix initial feedback frequency bug.


Features Changes/Fixes
  • Add HRDF 1.1.0 import capabilities

  • Feedback additions: mobile feedback and motor position

  • GroupCommands now have a "Clear" function.

  • GroupFeedback has a "getTime" function (in seconds or microseconds), getting the timestamp of the last received packet in the GroupFeedback object.

  • Discovery/Lookup frequency can be retrieved and set.

  • Custom objectives can be added when using IK.

  • Added functions for retrieving C and C++ API version numbers

  • CMake update - better workflow, including hebi xdk support for cross compiling

  • timestamps, and sender ID moved from hebi::Feedback.actuator() to hebi::Feedback

  • Code format standardized

  • Update kinematics functions to use internal C API actuator/link/bracket helper functions

  • Update internal C API from 1.2.0 to 1.4.1.

  • Cleanup extraneous comments and code (e.g., reference to outdated examples, trajectory start/end conditions now handled in C API)


Features Changes/Fixes
  • Added module state feedback and filtered module orientation estimate

  • Added commandable position safety limits, and returned current value in info.

  • Added reset/boot/stop boot commands

  • Tweaks to cleanup compilation warnings

  • Update underlying C library to v1.2.0 from v1.0.0 (includes support for 64-bit ARM on linux)

  • Fixed bug in actuator COM position


Features Changes/Fixes
  • Initial full release; backwards compatibility will be maintained in future 1.0 releases.

  • Updated to v1.0.0 C API.


Features Changes/Fixes
  • Improved examples and documentation; created basic "tutorial" examples.

  • Updated to v0.16 C API.

  • Added explicit "Eigen" namespace before Vector classes to disambiguate name references during compilation.


Features Changes/Fixes
  • Easier deployment

    • Simplified CMake file

    • Separated library and examples

    • CMake files now demonstrate hierarchical build

  • Added initial version of a kinematics API.

  • Added trajectory API to assist in generation of smooth trajectories for robot motion.

  • Added I/O pin command and feedback support

  • Added API for programmatically retrieving the current contents of the module lookup object

  • Added support for macOS and ARM

  • Added ability to set command lifetime through the C++ API.

  • For commands and feedback, added convenience get and set functions for position, velocity, and torque fields; these function use Eigen double vectors (Eigen::VectorXd).

  • Updated to v0.15 C API.

  • Added path for log directory when logging.

  • Removed the "module" object based on customer feedback.

  • Separated out the libraries into platform specific directories (e.g., lib/winx64) to allow a single download for all platforms.

  • Fixed bug in GetString calls that would sometimes return uninitialized memory.

  • Added a number of "const" versions of getter function to allow better use within const-correct parent structures and classes.

  • Documentation updates.

  • Added dependency on Eigen v3.3.3. Included for convenience with downloaded packages.

  • Added index operator to mac address class.

C API Changelog

After v1.0 release, major version number changes indicate backwards incompatible changes, while minor version number changes are backwards compatible, both in API and ABI. Before v1.0, changes that break backwards compatibility are highlighted in bold.


Features Changes/Fixes
  • Can use "-1" to trigger infinite command lifetime for supported devices


Features Changes/Fixes
  • Fixed issue with extra field bitfield definition


Features Changes/Fixes
  • Added several command and info packet fields, as well as ability to request particular "extended" data in info messages:

    • Command and Info:

      • User Settings Float (1-8) and Bytes (1-8)

      • Ip Address

      • Subnet Mask

    • Info (some only with "extended" requests)

      • Firmware Type and Revision

      • Mechanical Type and Revision

      • Electrical Type and Revision

      • Ethernet Default Gateway

  • Added internal initial condition IK objective to keep results within a half revolution of initial point to match MATLAB API behavior

  • Increase numerical precision of internal kinematics calculation, resulting in better Jacobian calculation and more stable IK results


Features Changes/Fixes
  • Fixed issue when reading logs from imitation groups (or other submodules)

  • Fixed issue where some objective weights did not take effect


Features Changes/Fixes
  • Added parsing support for HRDF 1.4.0, including T-series modules and tagged frames

  • Added "send layout" functions to send layouts to Mobile I/O


Features Changes/Fixes
  • Added function to return mesh paths and frames loaded from HRDF

  • Used a universal dylib for macOS instead of two separate arm64 + amd64 dylibs.


Features Changes/Fixes
  • Add IP Address field to lookup table entries

  • Add stale state to lookup table entries


Features Changes/Fixes
  • Ensure i_q and i_d commands are set properly in outgoing message


Features Changes/Fixes
  • Add ability to reset current HebiLookupPtr


Features Changes/Fixes
  • Add motor driver commands and feedback to messages

  • Initially provide "nan" for all unset float fields values in messages


Features Changes/Fixes
  • Added functions to copy gains to command messages from info and command messages


Features Changes/Fixes
  • Added ability to get a "subtree" of an existing robot model

  • Extended built-in IK methods to allow selection of frame type and index


Features Changes/Fixes
  • Fixed trajectory generator segfault under certain conditions


Features Changes/Fixes
  • Added Mobile IO pin label set/retrieve functions


Features Changes/Fixes
  • Added MacOS ARM64 build for Mac M1 compatibility.

  • Added inner torque command field to feedback message

  • Support HRDF 1.3

  • Addressed library symbol visibility issues causing problems when linking with some ROS 2 programs.

  • Fixed edge cases in FK commands

    • For models with no DoF, you can pass in "nullptr" as the "positions" argument instead of having to provide an unused dummy vector.

    • For models with no DoF and a single end effector, you can now retrieve the end effector frame through GetForwardKinematics.


Features Changes/Fixes
  • Added info messages in log file along with feedback

  • Added "nightly" snapshot builds whenever there is an internal update between release cycles

  • Trajectory implementation is now faster and more stable

  • Added rx sequence number to feedback messages to enhance debugging

  • Addresses timestamp error when loading logfiles using the C++ API

  • Fixes behavior with timer frequency negatively affecting stable communication rate on new versions of Windows

  • Addresses bug when loading gains of size 1 into a group command of length > 1


Features Changes/Fixes
  • Added "input frame" type for forward kinematics operations

  • Added end effector support for robot model API (custom and parallel gripper types)

  • Added R-series support for robot model API (actuator, link, bracket, and end effector)

  • Added options for link input + output type in robot model API

  • Added support for robot models with tree (non-chain) structures

  • Added functions to retrieve the robot model topology (how the tree is laid out)

  • Support import of HRDF format 1.2.0

  • Support import of HRDF via a string (not just a file)

  • Allowed for filtering/selection of lookup addresses

  • Change interface to access message (command/feedback/info) fields so that raw message data can be accessed without individual API calls (string fields are not currently handled this way)

  • Robot model API now only allows addition of elements which match the physical interface of the previous element

  • Robot model "end effector" frames not added unless an end effector is explicitly added (imports of HRDF < 1.1.0 implicitly add an end effector element now)

  • Remove "combine" functionality from robot model API

  • Update IK objective weights to have consistent type

  • API allows for choice of row vs. column major for passing of matrices

  • Documentation improvement for hebiGroupGetNextFeedback to cover behavior of failure case.

  • Fixed bug when setting IO pins in commands; commands would sometimes affect other pins.


Features Changes/Fixes
  • Added "subaddress" support in lookup, commands, feedback, and logging.

  • Significantly improve performance of Jacobian computation.


Features Changes/Fixes
  • Added ability to retrieve information about elements in the robot model


Features Changes/Fixes
  • Added reading/writing of XML safety parameters structure

  • Added settings (in command and info) for:

    • mstop strategy

    • position limit strategies

    • velocity limits

    • effort limits

    • flag for whether or not accelerometer feedback includes gravity (on supporting devices, namely Mobile IO devices)

  • Added ability to set strings for and clear the "log" text field in the Mobile IO apps

  • Adds support for full wildcard lookup when creating groups (see

  • Fixed getters for motor position, ar position, ar orientation, ar quality, and battery level in feedback

  • Internal restructuring/improvements


Features Changes/Fixes
  • Added PWM command feedback to feedback structure.

  • Significantly improved trajectory solver performance, especially with large numbers of waypoints.

  • Use Ethernet header instead of message packet content to discover modules on the network (fixes issue when using multiple interfaces - wired and wireless - on iPad or Android running HEBI Mobile I/O)

  • Use locale invariant conversion when reading in .xml files, such as gains and HRDF (e.g., these files always expect numbers such as "1.23" instead of "1,23", regardless of the system’s locale settings).

  • Internal restructuring/improvements.

  • Removed support for i686 (32 bit) processors


Features Changes/Fixes
  • Fix race condition most commonly seen when setting feedback frequency immediately after creating a group; this potentially resulted in no received feedback until the feedback frequency was set again.


Features Changes/Fixes
  • Fixed initial C API feedback frequency for imitation groups to properly be set to the default (in 1.4.0, this was either undefined or 0, depending on the platform).

  • Definition of anonymous structures in hebi.h was technically not compliant with ISO C++11 standard Changed from _Hebi<Type> to Hebi<Type>_ to eliminate undefined behavior.


Features Changes/Fixes
  • HRDF import - full version 1.1.0 support

  • added mobile feedback (AR quality, AR orientation/position, battery level) and motor position fields to the feedback struct

  • made lookup frequency settable

  • Update the default command lifetime and feedback frequency to match MATLAB API


Features Changes/Fixes
  • Added ability to create HEBI robot model components directly at the C API level (actuators, links, brackets, etc)

  • Added support for loading files using v1.0.0 of the hebi robot description format standard (see )


Features Changes/Fixes
  • Added custom IK objectives

  • Can set/get firmware position limit using command/info

  • Info, command, and feedback group messages are now clearable and copyable.


Features Changes/Fixes
  • Added module state feedback and info (e.g., temperature limit state, joint limit state, m-stop state, etc)

  • Added commands to reset, boot, and stop boot of modules

  • Added linear joint type for kinematics and inverse kinematics

  • Added orientation feedback

  • Clearing the persist flag now works (before this didn’t affect the send packets)


Features Changes/Fixes
  • Fixed issue when sending IO commands (fixed situation which could overwrite or send command to higher-numbered IO pin)

  • Imitation group feedback frequency fixes - frequencies are now properly set, and 0 behaves as expected.

  • Trajectory start and end velocities and accelerations properly default to 0.

  • Refactored CMake workflow for easier inclusion in consuming projects


Features Changes/Fixes
  • Added a signal handler that can be enabled to catch debug output in the event of API crashes.

  • Added masses and inertias to RobotModel (previously kinematics)

  • Can retrieve filename on "startLog" call

  • Add "set reference position" and "set reference effort" to command object

  • Modules are sorted by name when creating a group by family

  • Formatting tweaks to hebi.h

  • All arguments to API are explicit integer types (uint32_t, size_t, etc) instead of int/long

  • Const added to pointer types as necessary in API calls

  • Various small function signature changes

  • Kinematics API significantly refactored and changed to RobotModel

  • IK functions changed to allow future support of tree kinematics

  • RobotModel API exclusively uses double precious numbers now.


Features Changes/Fixes
  • Add UInt64 fields

  • Disabled AVX instruction generation for Linux x86_64 library

  • Mac Address functions signatures changed to be compatible with FFIs


Features Changes/Fixes
  • Added serial number field to info messages.

  • Added sender ID field to feedback messages.

  • Updated "lookup" calls involving mac addresses to pass structures by reference instead of value for improved portability.

  • Fixed bug on certain platforms where GetNextFeedback returned success and and empty feedback if no feedback had been received.

  • Fixed XML gain "control strategy" tag parsing

  • Fixed macOS compilation issues.

  • Fixed basic/01_lookup.c example; previously, when parsing lookup entry list, names/families that were longer than previous values would not be displayed.

1.0-rc1 through 1.0-rc4

Features Changes/Fixes
  • requestFeedback has been removed and replaced with getNextFeedback to match the MATLAB convention

  • Log files: separate arguments are now included for directory and file, to increase log file location customization. Default file name is created from current time if not specified.

  • Added log file parsing support.

  • Improved/generalized IK interface; added new objectives and constraints.

  • Added support for reading gains from and writing gains to an XML file.

  • Added support for an "imitation group" which acts like a Group, but does not have a physical module backing it.

  • Added access to timestamps in the feedback messages (PC RX/TX and hardware RX/TX)

  • New Kinematics body creation helpers (light/heavy bracket)

  • Lookup name/family ordering switched when using hebiGroupCreateFromNames

  • "Torque" renamed "Effort" throughout API

  • Removed hebiLookupPrintTable function; programmatic access now provided via LookupEntryList functions.

  • Renamed platform specific "lib" directories

  • Refactored CMake files

  • All enums now have "Hebi" prepending (e.g., HebiFrameTypeOutput)

  • 'get' functions for feedback/commands/info now return sane defaults instead of undefined behavior if 'has' not set.

  • Significantly faster (e.g., kinematics code has sped up at least 10X).

  • Condensed include files into one file (hebi.h) to simplify integration

  • Renamed a number of functions for consistency.


Features Changes/Fixes
  • Added static keyword to variables and functions in hebi_kinematic_parameters.h


Features Changes/Fixes
  • Added first version of a kinematics API.

  • Updating logging implementation to include output path option and packet loss statistics.

  • Removed the "module" object based on customer feedback

  • Separated out the libraries into platform specific directories (e.g., lib/winx64) to allow a single download for all platforms.

  • Documentation updates


Features Changes/Fixes
  • Easier deployment

    • Simplified CMake file

    • Separated library and examples

    • CMake files now demonstrate hierarchical build

  • Added trajectory API to assist in generation of smooth trajectories for robot motion

  • Added API for programmatically retrieving the current contents of the module lookup object

  • Added I/O pin command and feedback support

  • Added "hebi.h" convenience header file to include the entire HEBI C API

  • Added support for macOS

  • Added separate x86 and x64 libraries for Windows

  • Rename several functions to improve naming consistency

    • Functions with Create always require calling a corresponding Release to free resources

    • Functions with Get return temporary variables that do not need to be freed

    • Functions taking an object of type <TypeName> always start with Hebi<TypeName>

  • Changed GetString calls to take in a buffer instead of return a pointer. Previously, return values could point to invalid memory

Firmware Changelog

R8, R8+, T5/8, and T5/8+ (A and B)

Release Changes Bugfixes


  • Added adjustable start point for thermal model

  • Add T5/8 series and T/R"+" designations to supported hardware types

  • Return additional motor-related feedback:

  • hall state

  • motor position/velocity filter sizes

  • motor encoder details

  • gear ratio

  • various motor constants

  • Added settable + persistable velocity filter

  • Added calibration process that can use external sensor for ground truth

  • Add ability to calibrate hall sensor offsets

  • Note — code freeze for X-series; these will no longer be updated alongside R/T

X5_8 (C, D, E, F, G, I, and K); R8 (A and B)

Release Changes Bugfixes

15.7.4 (X5_8 K and R8 B only)

  • Addressed issue where the motor could stop commanding due to current sensor and modeling differences

15.7.3 (X5_8 K and R8 B only)

  • Optimizations to reduce packet loss and improve overall performance

15.7.2 (X5_8 K and R8 B only)

  • Adjust gyro filter parameters

15.7.1 (X5_8 K and R8 B only)

  • Addressed issue with IMU feedback after startup in certain conditions.

15.7.0 (X5_8 K and R8 B only)

  • Initial Release of X5_8K and R8B firmware


  • Addressed issue with encoder feedback when booting up with certain unstable voltage sources.


  • Improved initial absolute encoder lookup to increase robustness to noise


  • "Accelerometer includes gravity" toggle supported for IMU feedback

  • Punch term of PID controller now based on target, not error


  • Initial Release of R8A firmware

  • Added reset button state to returned feedback

  • Added atmospheric pressure feedback (in kPa, for supporting module types)


  • Improved performance of motor control at low speeds


  • Improved performance of the pose filter


  • Fixed cases where the pose filter could initialize poorly or return NaNs in the feedback


  • Initial release of X5-8I firmware.


  • LED state for manually setting static IP via reset button now overrides "searching for IP" green/orange blink


  • Added effort gain scaling with deflection for nonlinear springs.


  • Actuator velocity and effort safety limits (settable via Scope and some APIs)

  • Changeable position limit strategies — "hold", "motor off", "damped spring", or "disabled"

  • Can reset IP address if reset button is held down

  • Module reports static/dynamic IP address state

  • Motor velocity limiting implementation is less noisy

  • Add support for nonlinear springs in calibration and effort calculation

  • Can offset deflection and position calibration

  • Disallow setting torque reference to non-zero values


  • Fixed issue that could cause slower response/packet loss on certain modules in conjunction with recent (>=1.1) C-family APIs

13.1091.1083 (C-F) 13.1097.1092 (G)

  • Initial release of X5-8G firmware.

  • Fixed problem where modules could occasionally boot up incorrectly when DHCP is enabled.


  • Module reports orientation feedback from onboard pose filter.

  • Module now returns "module state" feedback (e.g., joint limit, m-stop, temperature limiting state).

  • DHCP fully supported in app mode; supports new bootloaders which skip the "waiting to boot" phase.

  • Reduce IP renewal problems on routers with short lease times.

  • Allow commands which drive a robot back to "inside" the joint limit range, even if the module booted up "outside" of this zone.

  • Joint limit LED state no longer shown if module is close to joint limit but not actively limiting commanded output.

  • Adjusted performance curves.

  • Encoder resolution no longer reduced at large number of rotations.

  • Reduced packet loss at high command and feedback request load.


  • Initial release of X5-8F firmware.

  • Corrected sign when setting non-zero effort offsets.


  • Ki and Kd gains now have SI units. In particular time-scaling was changed from millieseconds to seconds.

    • Ki gains will be need to be multiplied by 1000 to have same effect as before.

    • Kd gains should be multiplied by .001 to have the same effect as before.

  • Feedforward gain change: 1.0 is now the appropriate default gain value for velocity and effort loops that output PWM.

  • Deadzone is changed to not accumulate integral error. Error outside of deadzone is now shifted to start at zero instead of being a discontinous jump.

  • Additional feedback sensor: motorPosition

  • Direct PWM control strategy now has settable min/max target PWM values.

  • Improved parameters of onboard gyro zero-update

  • Improved internal safety controllers to better protect the modules when running voltages above 24V

  • Improved motor winding thermal estimation

  • Improved stability of software position safety limits

  • Improved performance under high network communications loads

9.811.807 (C/D) 9.834.830 (E)

  • Initial release of X5-8E firmware.

  • Processed network packets more efficiently to improve responsiveness under high load.


  • Improved onboard thermal model by accounting for more secondary electronic effects.

  • Improved control stability of X8 while near velocity limits.


  • Internal calibration procedure updates


  • Internal calibration procedure updates


  • Firmware now supports X8 and X5 modules

  • Added 3-mode M-stop functionality (disabled, 'hold', and 'off' modes)

  • Improved onboard thermal limiting for the motor based on additional experimental data

  • Fixed an issue with the onboard timer that could theoretically lead to occasional very large, inaccurate reported time steps

  • Updated gyro low pass filter

4.0 rev629 (D only)

  • Fixed an issue in the thermal model that could cause a motor to overheat after a reset under continuous load

3.1 rev617 (D only)

  • Fixed an issue in the safety controller that could cause a motor to spin faster in one direction

3.0 rev629 (C) 3.0 rev606 (D)

  • Initial release of X5-8_D firmware.

  • Added auto-voltage scaling so that gains behave the same way under any voltage

  • Improved accelerometer bias (requires calibration)

  • Added a filter to continuously estimate and compensate for the gyro bias

  • Fixed an issue in the thermal model that could cause a motor to overheat after a reset under continuous load

  • Fixed an issue in the safety controller that could cause a motor to spin faster in one direction

2.0 rev519

  • Improved factory calibration for position and torque

1.0 rev480

  • Initial release of X5-8_C firmware.

MD (Motor Driver) C

Release Changes Bugfixes


  • ADC values are reported in real units instead of bits

  • Aux output channel has added safety current limit, and respects command lifetime of received commands

  • Thermal model allows selection of temperature source (including external sensor that can be attached or user commanded value), as well as initial temperature value (as a proportion from sensed temperature to maximum winding temperature)

  • Fixed hang when motor driver resets when motor is spinning


  • Update/improve current and ADC scaling and calibration

  • Add virtual encoder support

  • Added i_q and i_d commands and FOC mode


  • Allow partial setting of thermal parameters

  • More sanity checks when setting thermal parameters

  • Check for encoder port collisions when setting

  • Reset button enabled

  • Control divider now takes effect

  • Torque FF value is now properly scaled


  • Initial release


Release Changes Bugfixes


  • Added handing of reset button


  • Fixed temperature sensor value


  • Added "Electrical Type" to returned data.


  • Initial release


Release Changes Bugfixes


  • Initial release


Release Changes Bugfixes


  • Initial release


Release Changes Bugfixes


  • Initial release; duplicate of SEA_D release 2 except for electronics updates


Release Changes Bugfixes


  • Update thermal model

  • Limit LED brightness to ensure safe steady-state performance


  • Initial release


Release Changes Bugfixes


  • Auto gyro-unbiasing in IMU

  • Addition of settable accelerometer bias

  • Gains auto-scaled when supply voltage changes

  • Automatically persist name/family when these values are changed

  • New calibration routine that includes automatic determination and sanity checking of spring constant to help detect early spring failure

  • Added support for "command lifetime" feature

  • Updated default gains

  • Added user-settable torque offset (via GUI "zero torque" button)

  • Fixed an issue in the thermal model that could cause a motor to overheat after a reset under continuous load

  • Improved motor current estimate and IMU filtering settings


Release Changes Bugfixes


  • Compatible with bootloaders >= v10 (dynamic IP address support in application mode)

  • Reports static/dynamic IP address state


  • Initial release


Release Changes Bugfixes


  • Address packet loss at moderate to high feedback rates

1.0 rev552

  • Initial release


Release Changes Bugfixes


  • By default, boot to application directly. DHCP is now handled by application code (>12 for X5_8)


  • Added support for new modules (internal)


  • Processed network packets more efficiently to improve responsiveness under high load


  • Disabled clearing of internal storage via the reset button

  • Updated version number display

  • Added support for new modules (internal)

5.0 rev599

  • Added support for new modules (internal)

  • Fixed an issue that caused IMU calibration to be cleared after a database erase

4.0 rev548

  • Added support for new modules (internal)

3.0 rev514

  • Added "auto-update"

2.0 rev478

  • Added support for new modules (internal)

1.0 rev345

  • Initial release