This pages introduces the FITHVDemoMachine, an example CORC app showing the basic use of the FIT-HV waist exoskeleton by ULS Robotics (see manufacturer webpage here).
The FIT-HV is a waist/lumbar exoskeleton. It consists of a rigid backpack structure, holding the battery and control electronics, attached via backpack style straps. For each leg, the exoskeleton has one active degree of freedom (DoF) for hip flexion-extension and one passive DoF for the hip abduction-adduction. The exoskeleton is secured at the thigh with semi-rigid cuffs, thus transmitting forces between the upper body and each leg.
FIT-HV exoskeleton on a stand.
The state machine code can be found in the folder src/apps/FITHVExoDemoMachine.
It demonstrates the use of:
- The use of FIT-HV exo absolute encoders for calibration
- The use of the torque control of the joints and friction compensation
- The use of the libFLNL comunication library to pusblish the robot state and control state machine transitions (from a Python script).
The state machine and associated FITTHVExo class have been developed and tested for an FIT-HV CI60DRV model and behaviours migh differ for different models or systems.
The CAN bus of the exoskeleton can be accessed from one of the two Lemo connectors at the top of the backpack. Each connector has four pins, providing CAN bus connection (CAN-H, CAN-L), +36V and a ground (see Figure below). The connectors are from the Lemo FGG-0B-304 series.
CAN and power are also accessible within the pad/controller via JST GH connectors 2 pins (power) and 3 pins(CAN).
The two active joints (hip flexion/extension) of the exoskeleton are controlled by two Copley Accelnet motor drives with Node IDs 1 and 2. The joints have the following properties:
| Joint property | Value |
|---|---|
| Motor rated torque | 0.570Nm |
| Joint reduction | 1:46.368 |
| Continuous output torque | 24Nm |
| Encoders counts | 8000/rev |
| Joint ROM | 225degrees |
There are absolute encoders as dedicated CAN devices on with Node IDs 3 and 4 that can be read with an SDO request.
Typically using "read 0x9210 0 i16". 0x9210 is a register of integer 16 containing abs encoder value in pulses.
Four bytes response with LSB first. Typically decoded with pulse=std::stoul(hex[3]+hex[2]+hex[1]+hex[0], 0, 16);
Example of full CAN exange:
CAN_ID=603, Data: 40 10 92 00 00 00 00 00
CAN_ID=583, Data: 43 10 92 00 x0 x1 x2 x3
To compile and use the FITHVDemoMachine, simply select it in the CMakeLists.txt and set the flags for using a real robot:
#include(src/apps/ExoTestMachine/app.cmake)
include(src/apps/FITHVExoDemoMachine/app.cmake)
#include(src/apps/M1DemoMachine/app.cmake)
#include(src/apps/M1DemoMachineROS/app.cmake)
...
# Comment to use actual hardware, uncomment for a nor robot (virtual) app
set(NO_ROBOT OFF)If you intend to cross-compile for a BeagleBone, run: $ rm -r build && mkdir build && cd build && cmake -DCMAKE_TOOLCHAIN_FILE=../armhf.cmake ..
otherwise, to run the state machine locally use: $ rm -r build && mkdir build && cd build && cmake ..
Then simply compile the state machine: $ make
This should create the application FITHVExoDemoMachine_APP within the build folder. After initialising the CANbus (using the initCAN0.sh or initCAN1.sh script) you should be able to run the application, either locally or on the BB (through SSH).
The device will silently calibrate at each start by using the built-in absolute encoders. The other demo states can be accessed using the keyboard keys 0, 1 and 2 or by sending relevant FLNL command (see code for details).
The FITT-HV platform use the following parameters, currently fixed and set in RobotFITHVExo.h and cannot be loaded dynamically at this point.
double dqMax = 400 * M_PI / 180.; //!< Max joint speed (rad.s-1). Set to 400deg/s for safety.
double tauMax = 30; //!< Max joint torque (Nm). Set to 30Nm for safety, hardware support higher torque.
std::vector<double> qSigns = {-1., 1.}; //!< Joint direction (as compared to built-in drives direction). Set for extension +
std::vector<double> linkLengths = {0.27, 0.27}; //!< Link lengths used for kinematic models (in m) and mass compensation (i.e. center of mass pos). Distance from hip center to passive joint center.
std::vector<double> massCoeff = {0.0, 0.0}; //!< Mass coefficients (identified) used for gravity compensation (in kg). Equivalent mass at distance linkLengths from hip.
std::vector<double> frictionVis = {0.25, 0.25}; //!< Joint viscous friction compensation coefficients
std::vector<double> frictionCoul = {0.4, 0.4}; //!< Joint Coulomb (static) friction compensation coefficients
std::vector<double> qLimits = { /*q1_min*/ -30 * M_PI / 180., /*q1_max*/ 150 * M_PI / 180.,
/*q2_min*/ -30 * M_PI / 180., /*q2_max*/ 150 * M_PI / 180. }; //!< Joints limits (in rad)
std::vector<double> qCalibration = {-96*M_PI/180., -76*M_PI/180.}; //!< Calibration configuration: difference between abs encoder reading and expected pose
bool calibrated;
The FIT-HV robot only provide simple joint space interaction methods:
- Obtaining current joint state (as for any CORC robot):
robot->getPosition(),robot->getVelocity(),robot->getTorque(). - Joint level interaction:
setJointPosition(V2 q),setJointVelocity(V2 q)andsetJointTorque(V2 tau)allow to apply a position, velocity or torque control using an Eigen:vector of length 2. Only Velocity and Torque control modes have been tested. - Finally, the method
setJointTorqueWithCompensation(V2 tau)can be used to apply a torque in addition to the robot friction compensation.
See the Doxygen page of the RobotFITHVExo class for a full list of available methods.
The FITHVExoDemoMachine app is using libFLNL to publish the robot states and read incoming commands over a TCP/IP connection. Together with the use of an FLNLHelper object (UIserver = std::make_shared<FLNLHelper>("0.0.0.0");), the library allows the robot state to be sent at every control loop (UIserver->sendState(); within the FITHVExoDemoMachine::hwStateUpdate(void) method) and send and process incoming commands. The CORC app is here acting as a server on the specified IP (and port, optional, default is 2048) to which client application can connect to.
Note: This FITTHVDemoMachine was designed for and tested on sheep shearing tasks. A description of the system and associated study is available in the following conference publication:
@inproceedings{vandenberg2025design,
title={Design and Evaluation of Assistive Modes in a Lower Back Exoskeleton
for Sheep Shearing: a Case Study},
author={van den Berg, Jasper and Crocher, Vincent and Tan, Ying and Oetomo, Denny},
booktitle={Proceedings of the 2025 Australasian Conference on Robotics and Automation, ACRA 2025},
year={2025}
}
