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.

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.

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.
  • 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

Note that there are range constraints of the input due to numerical reasons, see below for more details. To check the input before a calculation step,

ruckig.validate_input(input); // returns boolean

returns false if an input is not valid. Of course, the target state needs to be within the given kinematic limits. Additionally, the target acceleration needs to fulfil

Abs(target_acceleration) <= Sqrt(2 * max_jerk * (max_velocity - Abs(target_velocity)))

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 intermediate positions (only in Pro Version)
bool did_section_change; // Was an intermediate position reached in the last cycle? (only in Pro Version)

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.

Intermediate Waypoints

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. You can overwrite the global kinematic limits to specify limits for each section between two waypoints separately by using e.g. input.per_section_max_velocity.

When using intermediate positions, both the underlying motion planning problem as well as its calculation changes significantly. Please find more information about generating trajectories with intermediate waypoints here. 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.

We are working on introducing a parameter for limiting the maximum distance between the calculated trajectory and a linear interpolation of the waypoints. This way, collision avoidance and safety guarantees become trivial to integrate!

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.

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.

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.6 (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 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.5.0.tar.gz (49.8 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.5.0-cp39-cp39-win_amd64.whl (244.0 kB view details)

Uploaded CPython 3.9Windows x86-64

ruckig-0.5.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (321.8 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.12+ x86-64

ruckig-0.5.0-cp39-cp39-macosx_10_15_x86_64.whl (236.7 kB view details)

Uploaded CPython 3.9macOS 10.15+ x86-64

ruckig-0.5.0-cp38-cp38-win_amd64.whl (244.0 kB view details)

Uploaded CPython 3.8Windows x86-64

ruckig-0.5.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (322.0 kB view details)

Uploaded CPython 3.8manylinux: glibc 2.12+ x86-64

ruckig-0.5.0-cp38-cp38-macosx_11_0_x86_64.whl (349.4 kB view details)

Uploaded CPython 3.8macOS 11.0+ x86-64

ruckig-0.5.0-cp38-cp38-macosx_10_15_x86_64.whl (236.7 kB view details)

Uploaded CPython 3.8macOS 10.15+ x86-64

ruckig-0.5.0-cp37-cp37m-win_amd64.whl (243.7 kB view details)

Uploaded CPython 3.7mWindows x86-64

ruckig-0.5.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (323.8 kB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.12+ x86-64

ruckig-0.5.0-cp37-cp37m-macosx_11_0_x86_64.whl (345.6 kB view details)

Uploaded CPython 3.7mmacOS 11.0+ x86-64

ruckig-0.5.0-cp37-cp37m-macosx_10_15_x86_64.whl (232.6 kB view details)

Uploaded CPython 3.7mmacOS 10.15+ x86-64

ruckig-0.5.0-cp36-cp36m-win_amd64.whl (243.7 kB view details)

Uploaded CPython 3.6mWindows x86-64

ruckig-0.5.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (323.9 kB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.12+ x86-64

ruckig-0.5.0-cp36-cp36m-macosx_11_0_x86_64.whl (345.6 kB view details)

Uploaded CPython 3.6mmacOS 11.0+ x86-64

ruckig-0.5.0-cp36-cp36m-macosx_10_15_x86_64.whl (232.6 kB view details)

Uploaded CPython 3.6mmacOS 10.15+ x86-64

File details

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

File metadata

  • Download URL: ruckig-0.5.0.tar.gz
  • Upload date:
  • Size: 49.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for ruckig-0.5.0.tar.gz
Algorithm Hash digest
SHA256 6f02800662ae8a085cba26f7422beb0622c2f0b15d3a26faf68b572137eac2a6
MD5 90faf6e31ab9709a7dbde705de2092ab
BLAKE2b-256 3f70d9ad370e81366ea20ab604a7563527dd5a8796a6b4272fd33456df73cf81

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ruckig-0.5.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 244.0 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.8

File hashes

Hashes for ruckig-0.5.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 b904dcdba20acef82d1f5a081ce0e5d6ffbf5b8225dd571d5f13cc313880d6f4
MD5 dc546568c59b6513fecb4deb27659806
BLAKE2b-256 977faf160090691e476dfb63bdb95b9669968f4e3a88afea2c9f44d70b5eda5c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ruckig-0.5.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
  • Upload date:
  • Size: 321.8 kB
  • Tags: CPython 3.9, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for ruckig-0.5.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 a7383e4e5962f7604f7d248ba1bd72c45cf87a8369356d23f353fe57874ac026
MD5 cb7e81aeca99b7fd8c85e12b322ff4ad
BLAKE2b-256 485f5c9a558843de8090a8d7fa71f7b5e87d752c13d26f3732752a47a9a85d79

See more details on using hashes here.

File details

Details for the file ruckig-0.5.0-cp39-cp39-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: ruckig-0.5.0-cp39-cp39-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 236.7 kB
  • Tags: CPython 3.9, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.8

File hashes

Hashes for ruckig-0.5.0-cp39-cp39-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 a71ff15ecd2597426699c4ca1fe13f34834fbe7f151868f2be345f84746cdb13
MD5 923894dcf8cdc3187c7b3c5fe3221b8e
BLAKE2b-256 f724e299b80ca0ce2bd3c7ac54fdda323246ae3917d414769e2a9fbd2b81d90d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ruckig-0.5.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 244.0 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.10

File hashes

Hashes for ruckig-0.5.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 e16b2eeb2a718f1f806c51b646c6f9ed8062635c787854d369baa75a47b04e3e
MD5 89f8bd172c2d9cbe264539ecd110bf67
BLAKE2b-256 50a09d17df7874b3e6acedc5a6b9d0455b476d88f0c6bd42a10ea6af6678bfaf

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ruckig-0.5.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
  • Upload date:
  • Size: 322.0 kB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for ruckig-0.5.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 b2ef99f490ff8bc1c0adc32aa875227caa3362eaafe94154a24573047004da09
MD5 f047713de9b2fa09499d28964c989c44
BLAKE2b-256 b0aaf708fefc905b83fefe6bab767b9193d89bf2b9607d54db9e3255bbfea135

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ruckig-0.5.0-cp38-cp38-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 349.4 kB
  • Tags: CPython 3.8, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for ruckig-0.5.0-cp38-cp38-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 d2b32e2f576898ad326f91355246d8a205fa89054249276c2dd152ba4a1e3495
MD5 c4cf36c16a17c1c0ace0d5bd272780f7
BLAKE2b-256 400d3e7495e293338304ce3296946e42e28a2a5d5f7b0976a098479afadb7d66

See more details on using hashes here.

File details

Details for the file ruckig-0.5.0-cp38-cp38-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: ruckig-0.5.0-cp38-cp38-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 236.7 kB
  • Tags: CPython 3.8, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.12

File hashes

Hashes for ruckig-0.5.0-cp38-cp38-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 ff97924eb961ec749134ca9ca278a4b9e80c54cfc471d5d6fc83710791565623
MD5 1cf5458af09b88934aa003d5407f4291
BLAKE2b-256 731616ba107cf2e175e8f7a1f48297321d59fc6ee4822adac75c1989735ea9e9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ruckig-0.5.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 243.7 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.9

File hashes

Hashes for ruckig-0.5.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 1c0cc750b9aa0d57f844604c510137061fa9b3e134221949e209375ac1d216f6
MD5 941b4e70ad8beaab09e751410dd7c272
BLAKE2b-256 60b98830d1d371bcdd4d8406dadc7b34e10fb8f5675001813f4cdc6d2a51264e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruckig-0.5.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 fd68457d2ef36e0149eab60a4729cba01d1c755908fb0fde27a8e921e08af8ca
MD5 e2fe8178e2ff90caeccf3b554c98ebb1
BLAKE2b-256 c786ead10e1b06e0c6c89b4d26d5c6391a3834cd24e3e79176a624a3e2a8470f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ruckig-0.5.0-cp37-cp37m-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 345.6 kB
  • Tags: CPython 3.7m, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.12

File hashes

Hashes for ruckig-0.5.0-cp37-cp37m-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 310324c4cac5b4f7d7814516b030124eb27b15428a8acd86528288d5c0e554b1
MD5 11454c510316f1c60734ddd7cfec6307
BLAKE2b-256 6a13fbcd5a03dd91c733427b6543dfaa3c54ba1ca7203458f04b9ee84ab096bc

See more details on using hashes here.

File details

Details for the file ruckig-0.5.0-cp37-cp37m-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: ruckig-0.5.0-cp37-cp37m-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 232.6 kB
  • Tags: CPython 3.7m, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.7.12

File hashes

Hashes for ruckig-0.5.0-cp37-cp37m-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 63146866321b4ff1653401ee55a57b055a32cf473b7677f068c7fe84b39cb328
MD5 7a8beef51a5dcbe4483a66b2a1d88ec7
BLAKE2b-256 2e6472e847e24d5bc45debad7ea3b448fec8eeb3c540b9f90b8ef7194b336a9a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ruckig-0.5.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 243.7 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.6.8

File hashes

Hashes for ruckig-0.5.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 7a0c7c311de16606c8d68f36b064e08b137bbe9736c908fc703541847b810bbe
MD5 eafb5772381ea686aa84316f3b40c8f9
BLAKE2b-256 7e618d83bc06231a7ca46556c6bb429b1dc2535c76688b687466119cccb2edda

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ruckig-0.5.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 64cc7328631c0b5005cce8d1215980cfd49c18f2aca331b52a45788285380a94
MD5 e4ef40e2d113148ab2637c815116adcf
BLAKE2b-256 d22934420abe71ebc3e166bb28963cc4d77038d39320955539eab75f481878a0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ruckig-0.5.0-cp36-cp36m-macosx_11_0_x86_64.whl
  • Upload date:
  • Size: 345.6 kB
  • Tags: CPython 3.6m, macOS 11.0+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.6.15

File hashes

Hashes for ruckig-0.5.0-cp36-cp36m-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 dd8112f0984250f6352044b37ecb0b7a22c9e7f6dd4b69f2d89c876b73231a3c
MD5 2306ac27b91a1b5827454f78eb3c14fe
BLAKE2b-256 532fe2ee5672dc7d4d06e97e35a58d5d1b12e45661986bbda297ef320cdc5662

See more details on using hashes here.

File details

Details for the file ruckig-0.5.0-cp36-cp36m-macosx_10_15_x86_64.whl.

File metadata

  • Download URL: ruckig-0.5.0-cp36-cp36m-macosx_10_15_x86_64.whl
  • Upload date:
  • Size: 232.6 kB
  • Tags: CPython 3.6m, macOS 10.15+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.6.15

File hashes

Hashes for ruckig-0.5.0-cp36-cp36m-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 11393bd23820409d246a102397a5238de92d91f1acb302bc14713f097d533fc6
MD5 bf2eefcd55376bcda4c6dee3bf8bea44
BLAKE2b-256 2499d17e903eb9486de52b89fb389a087b07cf9092c6276f824b339a72da7afe

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