Skip to main content

Instantaneous Motion Generation for Robots and Machines.

Project description

Ruckig

Instantaneous Motion Generation for Robots and Machines.

CI Issues Releases MIT

Ruckig generates trajectories on-the-fly, allowing robots and machines to react instantaneously to sensor input. Ruckig calculates a trajectory to a target waypoint (with position, velocity, and acceleration) starting from any initial state limited by velocity, acceleration, and jerk constraints. Besides the target state, Ruckig allows to define intermediate positions for waypoint following. For state-to-state motions, Ruckig guarantees a time-optimal solution. With intermediate waypoints, Ruckig calculates the path and its time parametrization jointly, resulting in significantly faster trajectories compared to traditional methods.

More information can be found at ruckig.com and in the corresponding paper Jerk-limited Real-time Trajectory Generation with Arbitrary Target States, accepted for the Robotics: Science and Systems (RSS), 2021 conference.

Installation

Ruckig has no dependencies (except for testing). To build Ruckig using CMake, just run

mkdir -p build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make

To install Ruckig in a system-wide directory, use (sudo) make install. An example of using Ruckig in your CMake project is given by examples/CMakeLists.txt. However, you can also include Ruckig as a directory within your project and call add_subdirectory(ruckig) in your parent CMakeLists.txt. To enable the Online API for intermediate waypoints, just pass the BUILD_ONLINE_CLIENT flag to CMake.

Ruckig is also available as a Python module, in particular for development or debugging purposes. The Ruckig Community Version can be installed from PyPI via

pip install ruckig

When using CMake, the Python module can be built using the BUILD_PYTHON_MODULE flag. If you're only interested in the Python module (and not in the C++ library), you can build and install Ruckig via pip install ..

Tutorial

Furthermore, we will explain the basics to get started with online generated trajectories within your application. There is also a collection of examples that guide you through the most important features of Ruckig. A time-optimal trajectory for a single degree of freedom is shown in the figure below. We also added plots for the resulting trajectories of all examples. Let's get started!

Trajectory Profile

Waypoint-based Trajectory Generation

Ruckig provides three main interface classes: the Ruckig, the InputParameter, and the OutputParameter class.

First, you'll need to create a Ruckig instance with the number of DoFs as a template parameter, and the control cycle (e.g. in seconds) in the constructor.

Ruckig<6> ruckig {0.001}; // Number DoFs; control cycle in [s]

The input type has 3 blocks of data: the current state, the target state and the corresponding kinematic limits.

InputParameter<6> input; // Number DoFs
input.current_position = {0.2, ...};
input.current_velocity = {0.1, ...};
input.current_acceleration = {0.1, ...};
input.target_position = {0.5, ...};
input.target_velocity = {-0.1, ...};
input.target_acceleration = {0.2, ...};
input.max_velocity = {0.4, ...};
input.max_acceleration = {1.0, ...};
input.max_jerk = {4.0, ...};

OutputParameter<6> output; // Number DoFs

Given all input and output resources, we can iterate over the trajectory at each discrete time step. For most applications, this loop must run within a real-time thread and controls the actual hardware.

while (ruckig.update(input, output) == Result::Working) {
  // Make use of the new state here!
  // e.g. robot->setJointPositions(output.new_position);

  output.pass_to_input(input); // Don't forget this!
}

Within the control loop, you need to update the current state of the input parameter according to the calculated trajectory. Therefore, the pass_to_input method copies the new kinematic state of the output to the current kinematic state of the input parameter. If (in the next step) the current state is not the expected, pre-calculated trajectory, Ruckig will calculate a new trajectory based on the novel input. When the trajectory has reached the target state, the update function will return Result::Finished.

Intermediate Waypoints

The Ruckig Community Version now supports intermediate waypoints via a remote API. Make sure to include -DBUILD_ONLINE_CLIENT=ON as a CMake flag when compiling - the PyPI Python version should bring that out of the box. To allocate the necessary memory for a variable number of waypoints beforehand, we need to pass the maximum number of waypoints to Ruckig via

Ruckig<6> otg {0.001, 8};
InputParameter<6> input {8};
OutputParameter<6> output {8};

The InputParameter class takes the number of waypoints as an optional input, however usually you will fill in the values (and therefore reserve its memory) yourself. Then you're ready to set intermediate via points by

input.intermediate_positions = {
  {0.2, ...},
  {0.8, ...},
};

As soon as at least one intermediate positions is given, the Ruckig Community Version switches to the mentioned (of course, non real-time capable) remote API. If you require real-time calculation on your own hardware, we refer to the Ruckig Pro Version.

When using intermediate positions, both the underlying motion planning problem as well as its calculation changes significantly. In particular, there are some fundamental limitations for jerk-limited online trajectory generation regarding the usage of waypoints. Please find more information about these limitations here, and in general we recommend to use

input.intermediate_positions = otg.filter_intermediate_positions(input.intermediate_positions, {0.1, ...});

to filter waypoints according to a (high) threshold distance. Setting interrupt_calculation_duration makes sure to be real-time capable by refining the solution in the next control invocation. Note that this is a soft interruption of the calculation. Currently, no minimum or discrete durations are supported when using intermediate positions.

Input Parameter

To go into more detail, the InputParameter type has following members:

using Vector = std::array<double, DOFs>; // By default

Vector current_position;
Vector current_velocity; // Initialized to zero
Vector current_acceleration; // Initialized to zero

std::vector<Vector> intermediate_positions; // (only in Pro Version)

Vector target_position;
Vector target_velocity; // Initialized to zero
Vector target_acceleration; // Initialized to zero

Vector max_velocity;
Vector max_acceleration;
Vector max_jerk;

std::optional<Vector> min_velocity; // If not given, the negative maximum velocity will be used.
std::optional<Vector> min_acceleration; // If not given, the negative maximum acceleration will be used.

std::optional<Vector> min_position; // (only in Pro Version)
std::optional<Vector> max_position; // (only in Pro Version)

std::array<bool, DOFs> enabled; // Initialized to true
std::optional<double> minimum_duration;
std::optional<double> interrupt_calculation_duration; // [µs], (only in Pro Version)

ControlInterface control_interface; // The default position interface controls the full kinematic state.
Synchronization synchronization; // Synchronization behavior of multiple DoFs
DurationDiscretization duration_discretization; // Whether the duration should be a discrete multiple of the control cycle (off by default)

std::optional<Vector<ControlInterface>> per_dof_control_interface; // Sets the control interface for each DoF individually, overwrites global control_interface
std::optional<Vector<Synchronization>> per_dof_synchronization; // Sets the synchronization for each DoF individually, overwrites global synchronization

On top of the current state, target state, and constraints, Ruckig allows for a few more advanced settings:

  • A minimum velocity and acceleration can be specified - these should be a negative number. If they are not given, the negative maximum velocity or acceleration will be used (similar to the jerk limit). For example, this might be useful in human robot collaboration settings with a different velocity limit towards a human. Or, when switching between different moving coordinate frames like picking from a conveyer belt.
  • You can overwrite the global kinematic limits to specify limits for each section between two waypoints separately by using e.g. per_section_max_velocity.
  • If a DoF is not enabled, it will be ignored in the calculation. Ruckig will output a trajectory with constant acceleration for those DoFs.
  • A minimum duration can be optionally given. Note that Ruckig can not guarantee an exact, but only a minimum duration of the trajectory.
  • The control interface (position or velocity control) can be switched easily. For example, a stop trajectory or visual servoing can be easily implemented with the velocity interface.
  • Different synchronization behaviors (i.a. phase, time, or no synchonization) are implemented. Phase synchronization results in straight-line motions.
  • The trajectory duration might be constrained to a multiple of the control cycle. This way, the exact state can be reached at a control loop execution.

We refer to the API documentation of the enumerations within the ruckig namespace for all available options.

Input Validation

To check that Ruckig is able to generate a trajectory before the actual calculation step,

ruckig.validate_input(input, check_current_state_within_limits=false, check_target_state_within_limits=true);
// returns boolean

returns false if an input is not valid. The two boolean arguments check that the current or target state are within the limits. The check includes a typical catch of jerk-limited trajectory generation: When the current state is at maximal velocity, any positive acceleration will inevitable lead to a velocity violation at a future timestep. In general, this condition is fulfilled when

Abs(acceleration) <= Sqrt(2 * max_jerk * (max_velocity - Abs(velocity))).

If both arguments are set to true, the calculated trajectory is guaranteed to be within the kinematic limits throughout its duration. Also, note that there are range constraints of the input due to numerical reasons, see below for more details.

Result Type

The update function of the Ruckig class returns a Result type that indicates the current state of the algorithm. This can either be working, finished if the trajectory has finished, or an error type if something went wrong during calculation. The result type can be compared as a standard integer.

State Error Code
Working 0
Finished 1
Error -1
ErrorInvalidInput -100
ErrorTrajectoryDuration -101
ErrorPositionalLimits -102
ErrorExecutionTimeCalculation -110
ErrorSynchronizationCalculation -111

Output Parameter

The output class includes the new kinematic state and the overall trajectory.

Vector new_position;
Vector new_velocity;
Vector new_acceleration;

Trajectory trajectory; // The current trajectory
double time; // The current, auto-incremented time. Reset to 0 at a new calculation.

size_t new_section; // Index of the section between two (possibly filtered) intermediate positions.
bool did_section_change; // Was a new section reached in the last cycle?

bool new_calculation; // Whether a new calculation was performed in the last cycle
bool was_calculation_interrupted; // Was the trajectory calculation interrupted? (only in Pro Version)
double calculation_duration; // Duration of the calculation in the last cycle [µs]

Moreover, the trajectory class has a range of useful parameters and methods.

double duration; // Duration of the trajectory
std::array<double, DOFs> independent_min_durations; // Time-optimal profile for each independent DoF

<...> at_time(double time); // Get the kinematic state of the trajectory at a given time
<...> get_position_extrema(); // Returns information about the position extrema and their times

Again, we refer to the API documentation for the exact signatures.

Offline Calculation

Ruckig also supports an offline approach for calculating a trajectory:

result = ruckig.calculate(input, trajectory);

When only using this method, the Ruckig constructor does not need a control cycle as an argument.

Dynamic Number of Degrees of Freedom

So far, we have told Ruckig the number of DoFs as a template parameter. If you don't know the number of DoFs at compile-time, you can set the template parameter to DynamicDOFs and pass the DoFs to the constructor:

Ruckig<DynamicDOFs> otg {6, 0.001};
InputParameter<DynamicDOFs> input {6};
OutputParameter<DynamicDOFs> output {6};

However, we recommend to keep the template parameter when possible: First, it has a performance benefit of a few percent. Second, it is convenient for real-time programming due to its easier handling of memory allocations. When using dynamic degrees of freedom, make sure to allocate the memory of all vectors beforehand.

Tests and Numerical Stability

The current test suite validates over 5.000.000.000 random trajectories. The numerical exactness is tested for the final position and final velocity to be within 1e-8, for the final acceleration to be within 1e-10, and for the velocity, acceleration and jerk limit to be within of a numerical error of 1e-12. These are absolute values - we suggest to scale your input so that these correspond to your required precision of the system. For example, for most real-world systems we suggest to use input values in [m] (instead of e.g. [mm]), as 1e-8m is sufficient precise for practical trajectory generation. Furthermore, all kinematic limits should be below 1e12. The maximal supported trajectory duration is 7e3, which again should suffice for most applications seeking for time-optimality. Note that Ruckig will also output values outside of this range, there is however no guarantee for correctness.

Benchmark

We find that Ruckig is more than twice as fast as Reflexxes Type IV for state-to-state motions and well-suited for control cycles as low as 250 microseconds. The Ruckig Community Version is in general a more powerful and open-source alternative to the Reflexxes Type IV library. In fact, Ruckig is the first Type V trajectory generator for arbitrary target states and even supports directional velocity and acceleration limits, while also being faster on top.

Benchmark

For trajectories with intermediate waypoints, we compare Ruckig to Toppra, a state-of-the-art library for robotic motion planning. Ruckig is able to improve the trajectory duration on average by around 10%, as the path planning and time parametrization are calculated jointly. Moreover, Ruckig is real-time capable and supports jerk-constraints.

Benchmark

Development

Ruckig is written in C++17. It is continuously tested on ubuntu-latest, macos-latest, and windows-latest against following versions

  • Doctest v2.4 (only for testing)
  • Pybind11 v2.9 (only for python wrapper)

If you still need to use C++11, you can patch the Ruckig Community Version by calling sh scripts/patch-c++11.sh. Note that this will result in a performance drop of a few percent. Moreover, the Python module is not supported.

Used By

  • CoppeliaSim in their upcoming release.
  • MoveIt 2 for trajectory smoothing.
  • Struckig, a port of Ruckig to Restructered Text for usage on PLCs.
  • Frankx for controlling the Franka Emika robot arm.
  • and many others!

Citation

@article{berscheid2021jerk,
  title={Jerk-limited Real-time Trajectory Generation with Arbitrary Target States},
  author={Berscheid, Lars and Kr{\"o}ger, Torsten},
  journal={Robotics: Science and Systems XVII},
  year={2021}
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ruckig-0.6.5.tar.gz (282.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

ruckig-0.6.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.12+ x86-64

ruckig-0.6.5-cp39-cp39-win_amd64.whl (367.2 kB view details)

Uploaded CPython 3.9Windows x86-64

ruckig-0.6.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ x86-64

ruckig-0.6.5-cp39-cp39-macosx_11_0_x86_64.whl (360.8 kB view details)

Uploaded CPython 3.9macOS 11.0+ x86-64

ruckig-0.6.5-cp38-cp38-win_amd64.whl (372.3 kB view details)

Uploaded CPython 3.8Windows x86-64

ruckig-0.6.5-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64

ruckig-0.6.5-cp38-cp38-macosx_11_0_x86_64.whl (360.8 kB view details)

Uploaded CPython 3.8macOS 11.0+ x86-64

ruckig-0.6.5-cp37-cp37m-win_amd64.whl (371.0 kB view details)

Uploaded CPython 3.7mWindows x86-64

ruckig-0.6.5-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64

ruckig-0.6.5-cp37-cp37m-macosx_11_0_x86_64.whl (356.1 kB view details)

Uploaded CPython 3.7mmacOS 11.0+ x86-64

ruckig-0.6.5-cp36-cp36m-win_amd64.whl (371.0 kB view details)

Uploaded CPython 3.6mWindows x86-64

ruckig-0.6.5-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ x86-64

ruckig-0.6.5-cp36-cp36m-macosx_11_0_x86_64.whl (356.0 kB view details)

Uploaded CPython 3.6mmacOS 11.0+ x86-64

File details

Details for the file ruckig-0.6.5.tar.gz.

File metadata

  • Download URL: ruckig-0.6.5.tar.gz
  • Upload date:
  • Size: 282.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.12

File hashes

Hashes for ruckig-0.6.5.tar.gz
Algorithm Hash digest
SHA256 c691e930c017ea4f55e40aa209d2a332aec80bce526245c6dd2f295c8ce8c3cb
MD5 e06a79939f5c2b9ae9363c046525a28c
BLAKE2b-256 04a8d961e8d781d17b1c1d9e87f600cc5754617453234f7da072152b06ef5892

See more details on using hashes here.

File details

Details for the file ruckig-0.6.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

  • Download URL: ruckig-0.6.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.10, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.12

File hashes

Hashes for ruckig-0.6.5-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 3177d6d74d96cb702704de23bf446d14712e9b58410f6f6a136bb08ae52607c3
MD5 ab7e347986765b887cf4a9ed28e621bc
BLAKE2b-256 8ae435f171fdc904a53b3e9663974e8bcfd1dc6a6fe5fe639ac73f8bfb444b58

See more details on using hashes here.

File details

Details for the file ruckig-0.6.5-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: ruckig-0.6.5-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 367.2 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for ruckig-0.6.5-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 6ca94e94551d5e2082362d30507c6d00c93d799eeaf66de4eba0f9779afe180f
MD5 dbd6e11639004e3c3e893cbc20d95181
BLAKE2b-256 4b34ccd00a70980e7ef077b1b3edc1455ef6e8ea62e090b3fac1f94e1ca1245a

See more details on using hashes here.

File details

Details for the file ruckig-0.6.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

  • Download URL: ruckig-0.6.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.9, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.12

File hashes

Hashes for ruckig-0.6.5-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 5a33b9ea065295ca37b62ae993f452f5bb8e271e742db94e8d850d0985ddffe2
MD5 30d9650f927603e5c3e01bdcd7e02262
BLAKE2b-256 6ae80c9c3fdfd7bf85e6db34b063e453de1e0bf730bacc7362ab069b9c367e17

See more details on using hashes here.

File details

Details for the file ruckig-0.6.5-cp39-cp39-macosx_11_0_x86_64.whl.

File metadata

  • Download URL: ruckig-0.6.5-cp39-cp39-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 360.8 kB
  • Tags: CPython 3.9, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.10

File hashes

Hashes for ruckig-0.6.5-cp39-cp39-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 15a9db4a9c35d17f357a37d6f436e723a44576adb31ccc0fa15a3469d70b9fb6
MD5 d734793fb44d97c8dd8f33a72bbf3a5b
BLAKE2b-256 c64036ac7c2a79b44d5b7a83aae44ddb8180b4ef4fb11fb889c4c5f83859f66f

See more details on using hashes here.

File details

Details for the file ruckig-0.6.5-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: ruckig-0.6.5-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 372.3 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.10

File hashes

Hashes for ruckig-0.6.5-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 df3d0931aac32c91461eaf1cd59cf893c895045f57eb75c49e21a134cc5218ec
MD5 ea9070ba43d33c9f21ee08b6febb8894
BLAKE2b-256 645ed7579e25057304dd69667e8192bdd6c6b5974b44f493bf3379fbde6450fb

See more details on using hashes here.

File details

Details for the file ruckig-0.6.5-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

  • Download URL: ruckig-0.6.5-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.12

File hashes

Hashes for ruckig-0.6.5-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 91c04ab2466531a41a0679fcf155586edbff4fa9b7ccd1707083b5c145bbd550
MD5 d7e5376946a2dcabfb9f6efec92349cc
BLAKE2b-256 9548e657f463a3d2ed88c4678b0eba235d6669d234c38d69e1f938999d7f76ee

See more details on using hashes here.

File details

Details for the file ruckig-0.6.5-cp38-cp38-macosx_11_0_x86_64.whl.

File metadata

  • Download URL: ruckig-0.6.5-cp38-cp38-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 360.8 kB
  • Tags: CPython 3.8, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.12

File hashes

Hashes for ruckig-0.6.5-cp38-cp38-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 987dfc91c43a9dd1a9bdf8789ac31f059ee3bd43380eb289037c0e4796ff3556
MD5 a94781c023dc9f642e33cf001695299d
BLAKE2b-256 d0dc6b9a8bf33040ef3b73aed8c56533c185b6a730ad315f8a37ce8f9830fc72

See more details on using hashes here.

File details

Details for the file ruckig-0.6.5-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: ruckig-0.6.5-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 371.0 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.7.9

File hashes

Hashes for ruckig-0.6.5-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 4f96520371e7b97283795a06a3bdb3d12699a20075cc003e069fb3928fa7ed62
MD5 9db5c9f8d64f7d7b74106aa17c5d9ec7
BLAKE2b-256 174021c3b8e615fbba4f1321816387f84f6d89f62cb9f53e958d52d59e7d38fe

See more details on using hashes here.

File details

Details for the file ruckig-0.6.5-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

  • Download URL: ruckig-0.6.5-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.12

File hashes

Hashes for ruckig-0.6.5-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 9727e0204cfbad8f702143c47e25b474d4e4c18e653b2076204f85d90bc72daf
MD5 ffaabe8edd2448cffc8c7cc106f7341b
BLAKE2b-256 5d8f7548201bf7e8adfe156d9d137f60cdc7c87fee29d7818a280a524d98edc8

See more details on using hashes here.

File details

Details for the file ruckig-0.6.5-cp37-cp37m-macosx_11_0_x86_64.whl.

File metadata

  • Download URL: ruckig-0.6.5-cp37-cp37m-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 356.1 kB
  • Tags: CPython 3.7m, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.7.12

File hashes

Hashes for ruckig-0.6.5-cp37-cp37m-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 13efcaf11ae4009d539124bfa1c47dc13b5145724fcc9b364450d3a4baf49ef0
MD5 1e7c75ed203503c3154b5d331c4435e0
BLAKE2b-256 4fb629ae4b5d6d4b7bdbe4afb4845c7e632bfe256420c228834ae387715e4e11

See more details on using hashes here.

File details

Details for the file ruckig-0.6.5-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: ruckig-0.6.5-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 371.0 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.8.3 keyring/23.4.1 rfc3986/1.5.0 colorama/0.4.4 CPython/3.6.8

File hashes

Hashes for ruckig-0.6.5-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 5c7ff1412838d69afa54d1643c1f2a658a0352505c792eb698bac19c3f32cba0
MD5 989409e1ad8a9fb5bfa426949eb85058
BLAKE2b-256 0fbd71f720da03d485669ba6834f6023d7445e0701c9405d45a36dbb82626405

See more details on using hashes here.

File details

Details for the file ruckig-0.6.5-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

  • Download URL: ruckig-0.6.5-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.11.2 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.8.12

File hashes

Hashes for ruckig-0.6.5-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 834ebbe88d4e71c7dc166cb7dbaaec28167c3207f2b9ad0442783aec8ffdfdc5
MD5 bf4b3b75c096fac9ee86d52fae22cd5b
BLAKE2b-256 f451a15988ec89c0db2c2ab0e19ea1f825620a1d3640b6c2d27a78c7a3855dd2

See more details on using hashes here.

File details

Details for the file ruckig-0.6.5-cp36-cp36m-macosx_11_0_x86_64.whl.

File metadata

  • Download URL: ruckig-0.6.5-cp36-cp36m-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 356.0 kB
  • Tags: CPython 3.6m, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/33.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.8.3 keyring/23.4.1 rfc3986/1.5.0 colorama/0.4.4 CPython/3.6.15

File hashes

Hashes for ruckig-0.6.5-cp36-cp36m-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 b214b912c9dd4cec46ff0cbc99dc92bf9a4d19c814161939a50752a3a11f086b
MD5 604915de34f154a22de1b6b089a5b0b0
BLAKE2b-256 d9358cba51ca2cf306708944ff22f9533e6c3fb04775a037f9eff1a30c3bd33c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page