• Stars
    star
    164
  • Rank 230,032 (Top 5 %)
  • Language
    C++
  • License
    Other
  • Created over 4 years ago
  • Updated over 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

OpenSHC: A Versatile Multilegged Robot Controller

Syropod High-level Controller

Syropod Banner

Version License

Syropod High-level Controller (SHC) is a versatile controller capable of generating body poses and gaits for quasi-static multilegged robots. This ROS package implemented in C++ can be easily deployed on legged robots with different sensor, leg and joint configurations. SHC is designed to generate foot tip trajectories for a given gait sequence, step clearance, step frequency and input body velocity. Input sensors such as IMU and joint effort feedback can be utilised by the controller to provide robust trajectories even in inclined and uneven terrain. SHC was developed at CSIRO’s Robotics and Autonomous Systems Group to support its ongoing legged robot locomotion research. It is now being released as an open-sourced package, along with tutorials, for the benefit of the wider community as OpenSHC. The banner image and the video clip below shows a number of CSIRO's legged robots running SHC.

Gizmo Wizmo Zero

Table of Contents

Getting Started

If you haven't looked at the tutorials for using OpenSHC, see OpenSHC Tutorials.

Please refer to the readme in the launch folder of individual platforms for information on setting up the platform for use with OpenSHC.

Video overview of OpenSHC:

OpenSHC

Requirements

  • Ubuntu 18.04 LTS and ROS Melodic; or
  • Ubuntu 20.04 LTS and ROS Noetic

Dependencies

  • OpenSHC requires a robot specific configuration and launch repository such as Bullet Syropod to run. Please refer to that readme for more information.

Installation

mkdir -p openshc_ws/src
cd openshc_ws/src
git clone https://github.com/csiro-robotics/syropod_highlevel_controller.git
cd ..
catkin build

Publications

The details of OpenSHC is published in the following article:

B. Tam, F. Talbot, R. Steindl, A. Elfes and N. Kottege, "OpenSHC: A Versatile Multilegged Robot Controller," in IEEE Access, vol. 8, pp. 188908-188926, 2020, doi: 10.1109/ACCESS.2020.3031019.

How to cite

@article{tam2020openshc,
    author={Benjamin Tam and Fletcher Talbot and Ryan Steindl and Alberto Elfes and Navinda Kottege},
    title={OpenSHC: A Versatile Multilegged Robot Controller},
    journal={IEEE Access},
    year={2020},
    volume={8},
    number={},
    pages={188908-188926},
    doi={10.1109/ACCESS.2020.3031019}
}

Features

Bullet Syropod

  • Fully configurable for a variety of platform designs with differing physical characteristics, including up to eight legs each with up to 5 degrees of freedom.
  • Four dynamically switchable gait options (Wave, Amble, Ripple and Tripod) plus ability to easily design custom gaits. (see config/readme.md)
  • User defined body clearance, step clearance and step frequency.
  • Manual body posing in 6 degrees of freedom.
  • Manual leg manipulation - select up to two legs simultaneously and toggle manual manipulation of either tip position in Cartesian space or direct control of joint positions (3DOF legs only).
  • Choice between two modes of start-up:
    • Direct mode which move leg tip positions linearly from initial position to default walking stance positions.
    • Full chain of start-up/shutdown sequences which allow a Syropod to start from a 'packed' state and generate a sequence to stand up off the ground into its default walking stance. Similarly able to shut-down and transition back to a packed state.
  • Optional impedance controller with dynamic leg stiffness to ensure leg contact with ground and offer a degree of rough terrain walking ability.
  • Optional IMU body compensation which uses IMU data to keep body horizontally level at all times.
  • Optional inclination compensation which strives to keep body centre of gravity over the estimated centre of support whilst walking on inclined planes.
  • Optional bespoke automatic body posing system which poses each robot leg cyclically as defined by auto-pose parameters. (see config/readme.md)
  • Cruise control mode which may either force a constant predefined input velocity for the Syropod or set the current input velocity as constant.
  • Auto navigation mode which when combined with the correct sensing capabilities and running syropod_auto_navigation node, give autonomous navigation with obstacles avoidance to an input waypoint.

Config Files

For information on parameters see readme.md in config folder.

Nodes

syropod_highlevel_control

Subscribed Topics

syropod_remote
  • System State:
    • Description: The desired state of the entire Syropod High-level Controller system.
    • Topic: /syropod_remote/system_state
    • Type: std_msgs::Int8
  • Robot State:
    • Description: The desired state of the robot.
    • Topic: /syropod_remote/robot_state
    • Type: std_msgs::Int8
  • Desired Velocity:
    • Description: The desired body velocity of the robot.
    • Topic: /syropod_remote/desired_velocity
    • Type: geometry_msgs::Twist
  • Desired Pose:
    • Description: The desired body pose of the robot.
    • Topic: /syropod_remote/desired_pose
    • Type: geometry_msgs::Twist
  • Posing Mode:
    • Description: The desired manual body posing input mode.
    • Topic: /syropod_remote/posing_mode
    • Type: std_msgs::Int8
  • Pose Reset Mode:
    • Description: The desired manual body pose reset mode.
    • Topic: /syropod_remote/pose_reset_mode
    • Type: std_msgs::Int8
  • Gait Selection:
    • Description: The desired gait selection for the walk controller of the robot.
    • Topic: /syropod_remote/gait_selection
    • Type: std_msgs::Int8
  • Cruise Control Mode:
    • Description: The desired cruise control mode.
    • Topic: /syropod_remote/cruise_control_mode
    • Type: std_msgs::Int8
  • Auto-Nagivation Mode:
    • Description: The desired auto-navigation mode.
    • Topic: /syropod_remote/auto_navigation_mode
    • Type: std_msgs::Int8
  • Primary Leg Selection:
    • Description: The desired leg selected for primary manipulation.
    • Topic: /syropod_remote/primary_leg_selection
    • Type: std_msgs::Int8
  • Primary Leg State:
    • Description: The desired state of the leg selected for primary manipulation.
    • Topic: /syropod_remote/primary_leg_state
    • Type: std_msgs::Int8
  • Primary Tip Velocity:
    • Description: The desired tip velocity for the leg selected for primary manipulation.
    • Topic: /syropod_remote/primary_tip_velocity
    • Type: geometry_msgs::Point
  • Secondary Leg Selection:
    • Description: The desired leg selected for secondary manipulation.
    • Topic: /syropod_remote/secondary_leg_selection
    • Type: std_msgs::Int8
  • Secondary Leg State:
    • Description: The desired state of the leg selected for secondary manipulation.
    • Topic: /syropod_remote/secondary_leg_state
    • Type: std_msgs::Int8
  • Secondary Tip Velocity:
    • Description: The desired tip velocity for the leg selected for secondary manipulation.
    • Topic: /syropod_remote/secondary_tip_velocity
    • Type: geometry_msgs::Point
  • Parameter Selection:
    • Description: The desired parameter selection for possible adjustment.
    • Topic: /syropod_remote/parameter_selection
    • Type: std_msgs::Int8
  • Parameter Adjustment:
    • Description: The desired adjustment of the selected parameter (increment/decrement).
    • Topic: /syropod_remote/parameter_adjustment
    • Type: std_msgs::Int8
syropod_manipulation
  • Primary Leg Tip Pose:

    • Description: The desired pose for the leg selected for primary manipulation within Cartesian space.
    • Topic: /syropod_manipulation/primary_tip_pose
    • Type: geometry_msgs::Pose
  • Secondary Leg Tip Pose:

    • Description: The desired pose for the leg selected for secondary manipulation within Cartesian space.
    • Topic: /syropod_manipulation/secondary_tip_pose
    • Type: geometry_msgs::Pose
Motor and Sensor Inputs
  • IMU Data:
    • Description: The input data from onboard IMU.
    • Topic: /imu/data
    • Type: sensor_msgs::Imu
  • Tip State Data:
    • Description: Custom message containing force/torque and range sensor data at the tip of each leg.
    • Topic: /tip_states
    • Type: syropod_high-level_controller::TipState
  • Joint State Data:
    • Description: The actual state of joints within the Syropod as published by hardware.
    • Topic: "/joint_states
    • Type: sensor_msgs::JointState

Published Topics

Dynamixel Motor Interface
  • Desired Joint Position (per joint)
    • Description: Desired joint position for each individual joint.
    • Topic: /syropod/*LEG_ID*_*JOINT_ID*_joint/command
    • Type: std_msgs::Float64
  • Desired Joint State (combined)
    • Description: Desired joint state array for all joints.
    • Topic: /desired_joint_state
    • Type: sensor_msgs::JointState
Miscellaneous
  • Body Velocity:
    • Description: The desired velocity of the robot body.
    • Topic: /syropod_highlevel_controller/body_velocity
    • Type: geometry_msgs::Twist
  • Body Pose:
    • Description: The desired pose of the robot body.
    • Topic: /syropod_highlevel_controller/pose
    • Type: geometry_msgs::Twist
  • ASC Hexapod State: (To be removed)
    • Description: ASC Hexapod specific message for toggling of magnetic feet (bool of whether each leg is in stance state or not)
    • Topic: /leg_state_*LEG_ID*_bool
    • Type: std_msgs::Bool
  • Leg State:
    • Description: The leg state message combines several leg specific data for use in debugging.
      • header: Header with timestamp
      • name: Leg designation
      • walker_tip_pose: Desired tip pose generated from the walk controller (walk_plane frame)
      • target_tip_pose: Future desired tip pose at end of swing period (walk_plane frame)
      • poser_tip_pose: Desired tip pose generated from the pose controller (base_link frame)
      • model_tip_pose: Desired tip pose finalised by the model inverse/forward kinematics (base_link frame)
      • model_tip_velocity: Desired tip velocity finalised by the model inverse/forward kinematics (model).
      • joint_positions: Array of desired joint positions for each joint.
      • joint_velocities: Array of desired joint velocities for each joint.
      • joint_efforts: Array of desired joint efforts for each joint.
      • stance_progress: Progress along stance state (0.0->1.0 OR -1 if not in stance)
      • swing_progress: Progress along swing state (0.0->1.0 OR -1 if not in swing)
      • time_to_swing_end: Time until this leg completes swing period.
      • pose_delta: The estimated change in pose of the walk_plane frame with regard to world frame from current time to end of swing period.
      • auto_pose: The automatic cyclic posing applied to this leg from the auto-pose system.
      • tip_force: Tip force vector used in impedance control calculations
      • admittance_delta: Vertical tip position offset - output of admittance control.
      • virtual_stiffness: Current virtual stiffness used in admittance control calculations
    • Topic: /shc/*LEG_ID*_leg/state
    • Type: syropod_highlevel_controller::LegState (custom message)

Changelog

See CHANGELOG.md for release details.

Authors

  • Fletcher Talbot
  • Ryan Steindl
  • Thomas Molnar
  • Thomas Lowe
  • Oshada Jayasinghe
  • Navinda Kottege

License

This project is licensed under the CSIRO Open Source Software Licence Agreement (variation of the BSD / MIT License) - see the LICENSE file for details.

Contributing

Thank you for being interested in contributing. We encourage the community to create new features and to fix bugs. If it is a new feature, please create a new issue via the Issue Tracker and describe the intended feature so that we can discuss the implementation. Else, search for the existing issue and comment on your proposed work. Please fork the repo, work on your changes and then send a pull request.

Issues

Please report bugs using Issue Tracker or contact us via email [email protected].

More Repositories

1

ohm

An efficient, extensible occupancy map supporting probabilistic occupancy, normal distribution transforms in CPU and GPU.
C++
176
star
2

locus

[ICRA 2021] This repository contains the code for "Locus: LiDAR-based Place Recognition using Spatiotemporal Higher-Order Pooling".
Python
121
star
3

LoGG3D-Net

[ICRA 2022] The official repository for "LoGG3D-Net: Locally Guided Global Descriptor Learning for 3D Place Recognition", In 2022 International Conference on Robotics and Automation (ICRA), pp. 2215-2221.
Python
102
star
4

Wild-Places

🏞️ [IEEE ICRA2023] The official repository for paper "Wild-Places: A Large-Scale Dataset for Lidar Place Recognition in Unstructured Natural Environments" To appear in 2023 IEEE International Conference on Robotics and Automation (ICRA)
Python
76
star
5

raycloudtools

C++
66
star
6

Uncertainty-LPR

📣 [IEEE IROS 2023] Official Repository of IROS 23 paper "Uncertainty-Aware Lidar Place Recognition in Novel Environments"
Python
59
star
7

Forest_Localisation

C++
56
star
8

ElasticLidar-plusplus

Elasticity Meets Continuous-Time: Map-Centric Dense 3D SLAM
55
star
9

TCE

This repository contains the code implementation used in the paper Temporally Coherent Embeddings for Self-Supervised Video Representation Learning (TCE).
Python
52
star
10

InCloud

[IROS2022] Official repository of InCloud: Incremental Learning for Point Cloud Place Recognition, Published in IROS2022 https://arxiv.org/abs/2203.00807
Python
37
star
11

SpectralGV

[RA-L 2023] Official Repository of "Spectral Geometric Verification: Re-Ranking Point Cloud Retrieval for Metric Localization", RA-L, Volume 8, Issue 5, May 2023
Python
35
star
12

WildScenes

[IJRR2024 ACCEPTED] The official repository for the WildScenes: A Benchmark for 2D and 3D Semantic Segmentation in Natural Environments
Python
28
star
13

UPGen

The official repository for the paper: Scalable learning for bridging the species gap in image-based plant phenotyping.
Python
23
star
14

P-GAT

[IEEE RA-L 2024] This repository contains the implementation code for the paper "P-GAT : Pose-Graph Attentional Network for Lidar Place Recognition".
Python
23
star
15

shc_tutorials

Tutorials for using OpenSHC
20
star
16

dynamixel_interface

Fast, scalable driver for controlling dynamixel servo motors
C++
19
star
17

FactoFormer

[TGRS 2024] The official repository for Journal Article “FactoFormer: Factorized Hyperspectral Transformers with Self-Supervised Pre-Training”, Accepted to IEEE Transactions on Geoscience and Remote Sensing, December 2023.
Python
17
star
18

deepseagrass

This repository contains the code implementation used in the paper "Multi-species Seagrass Detection and Classification from Underwater Images"
Python
12
star
19

3rdEyeScene

3rd Eye Scene is a generalised visual debugger and debugging aid in the vein of rviz.
C#
10
star
20

agscan3d

This repository contains the code and datasets used in the paper "Canopy Density Estimation in Perennial HorticultureCrops Using 3D Spinning Lidar SLAM" https://onlinelibrary.wiley.com/doi/abs/10.1002/rob.22006
10
star
21

deep-terrain-classification

Source code to run the algorithms presented in the paper titled "Semi-supervised Gated Recurrent Neural Networks for Robotic Terrain Classification"
Jupyter Notebook
10
star
22

iSICE

[CVPR2023] The official repository for paper "Learning Partial Correlation based Deep Visual Representation for Image Classification" To appear in 2023 The IEEE / CVF Computer Vision and Pattern Recognition Conference (CVPR)
Python
8
star
23

ROPIM

[ICLR 2024 Spotlight] 🚀 The official repository of Self-Supervised Learning method "ROPIM", "Pre-training with Random Orthogonal Projection Image Modeling"
Python
7
star
24

fn_mechanisms

The official repository of IEEE RAL 2022 paper "What's in the Black Box? The False Negative Mechanisms Inside Object Detectors" https://arxiv.org/abs/2203.07662
Python
7
star
25

ohm_assay

This repo is provided to assess the performance of OHM against several other voxel or octree based libraries.
C++
6
star
26

Reg-NF

[ICRA 2024] Official repository of Reg-NF: Efficient Registration of Implicit Surfaces within Neural Fields
Python
5
star
27

treetools

Command line tools for manipulating geometrical descriptions of forests. Used to analyse and process the forest reconstructions primarily from raycloudtools.
C++
4
star
28

3es-core

C++
4
star
29

SDCL

[Neural Networks 2023] The official repository of Neural Networks Journal "Subspace Distillation for Continual Learning"
Python
3
star
30

L3DMC

🤖[MICCAI 2023] The official repository for paper "L3DMC: Lifelong Learning using Distillation via Mixed-Curvature Space"
Python
3
star
31

MDL

🔥[IEEE TPAMI 2023] Official repository TPAMI 2023 paper "Exploiting Field Dependencies for Learning on Categorical Data"
Python
3
star
32

GRAPE

[Journal of Hazardous Materials 2024] Official repository for Graph Neural Networks-enhanced RelAtion Prediction for Ecotoxicology (GRAPE)
Python
2
star
33

GeoAdapt

The official repository of GeoAdapt paper. The code, checkpoint and training procedure will be release upon acceptance.
2
star
34

syropod_remote

C++
2
star
35

bullet_syropod

CMake
2
star
36

CL3

[J. Imaging 2023] The official repository for paper CL3: Generalization of Contrastive Loss for Lifelong Learning J. Imaging 2023, 9(12), 259; https://doi.org/10.3390/jimaging9120259
Python
2
star
37

UPGen-Webpage

1
star
38

SOFA_mesh_partitioning_tools

C++
1
star
39

Pair-VPR

[Under Review] The official repository for Pair-VPR: Place-Aware Pre-training and Contrastive Pair Classification for Visual Place Recognition with Vision Transformers
1
star