CloudPendulum — Language Bindings

Language Bindings

Here is an overview of the different language bindings that exist for the cloud pendulum system.

C++

Example


#include <libcloudpendulum/client.hpp>
#include <chrono>
#include <cmath>
#include <iostream>

const std::string user_token = "user token";
const std::string experiment_type = "SimplePendulum";
const double experiment_time = 30.0;
const double preparation_time = 5.0;
const bool record = false;
const std::optional<int> cell_id = std::nullopt;
const double delta_time = 0.01;
const std::vector<std::optional<double>> kp = { 0.04 };
const std::vector<std::optional<double>> kd = { 0.017 };

int main() {
    Client client;

    const auto [session_token, livestream_url] = client.start_experiment(
        user_token, experiment_type, experiment_time,
        preparation_time, record, cell_id
    );
    std::cout << "Session token: " << session_token << std::endl;

    client.set_impedance_controller_params(kp, kd, session_token);

    auto t_experiment_start = std::chrono::steady_clock::now();
    auto t_iteration_start = std::chrono::steady_clock::now();
    while (true) {
        double t = std::chrono::duration<double>(
            t_iteration_start - t_experiment_start
        ).count();
        if (t >= experiment_time) break;

        std::vector<double> position = { std::sin(t) };
        client.set_position(position, session_token);

        while (true) {
            double t = std::chrono::duration<double>(
                std::chrono::steady_clock::now() - t_iteration_start
            ).count();
            if (t >= delta_time) break;
        }

        t_iteration_start = std::chrono::steady_clock::now();
    }

    client.stop_experiment(session_token);
    std::cout << "Stopped experiment" << std::endl;
}

Compile

To compile a program using the cloud pendulum system you simply have to link to the libcloudpendulum library:

g++ <filename> -l libcloudpendulum

Python

Example


from pycloudpendulum import Client
import time
import math

user_token = "user token"
experiment_type = "SimplePendulum"
experiment_time = 30.0
preparation_time = 5.0
record = False
cell_id = None
delta_time = 0.01
kp = [0.04]
kd = [0.017]

client = Client()
session_token, livestream_url = client.start_experiment(
    user_token, experiment_type, experiment_time, preparation_time, record, cell_id,
    None, None, None
)
print("Session token: ", session_token)

client.set_impedance_controller_params(kp, kd, session_token)

t_experiment_start = time.time()
t_iteration_start = time.time()
t = 0.0
while time.time() - t_experiment_start < experiment_time:
    target_pos = [math.sin(t)]
    client.set_position(target_pos, session_token)

    while time.time() - t_iteration_start < delta_time:
        pass

    current_time = time.time()
    t = current_time - t_experiment_start
    t_iteration_start = current_time

client.stop_experiment(session_token)
print("Stopped experiment")

Julia

Example


import jlcloudpendulum

user_token = "user token"
experiment_type = "SimplePendulum"
experiment_time = 10.0
preparation_time = 5.0
record = false
cell_id = nothing
delta_time = 0.01
kp = [0.04]
kd = [0.017]

client = jlcloudpendulum.Client()
session_token, livestream_url = jlcloudpendulum.start_experiment(
    client, user_token,
    experiment_type, experiment_time, preparation_time, record, cell_id,
    nothing, nothing, nothing
)
println("Session token: ", session_token)

jlcloudpendulum.set_impedance_controller_params(client, kp, kd, session_token)

t_experiment_start = time()
t_iteration_start = time()
t = 0.0
while time() - t_experiment_start < experiment_time
    target_pos = [sin(t * 2.0) * 2.0]
    jlcloudpendulum.set_position(client, target_pos, session_token)

    while time() - t_iteration_start < delta_time
    end

    current_time = time()
    global t = current_time - t_experiment_start
    global t_iteration_start = current_time
end

jlcloudpendulum.stop_experiment(client, session_token)
println("Stopped experiment")