Run Trajectory#


#include <iostream>

#include <cxxopts/cxxopts.hpp>

#include <jacobi/planner.hpp>
#include <jacobi/drivers/abb.hpp>
#include <jacobi/robots/abb_irb4600_60_205.hpp>

using namespace jacobi;
using namespace jacobi::drivers;
using namespace jacobi::robots;

int main(int argc, char *argv[]) {
    cxxopts::Options options("abb-driver", "Run a pre-calculated trajectory on an ABB robot.");
        ("trajectory", "File of the trajectory.", cxxopts::value<std::string>())
        ("speed", "Speed of the driver.", cxxopts::value<double>()->default_value("1.0"))
        ("host", "IP address of the robot.", cxxopts::value<std::string>()->default_value(""))
        ("port", "Port of the EGM Server.", cxxopts::value<int>()->default_value("6511"))
        ("move-to-start", "Move to the start of the trajectory.", cxxopts::value<bool>()->default_value("false"))
        ("h,help", "Print usage")


    const auto args = options.parse(argc, argv);
    if (args.count("help")) {
        std::cout << << std::endl;

    } else if (args.count("trajectory") == 0) {
        std::cout << "Please specifiy a '*.json' trajectory file to run." << std::endl;

    auto robot = std::make_shared<ABBIRB460060205>();
    auto planner = std::make_shared<Planner>(robot);

    auto driver = std::make_shared<ABBDriver>(planner, args["host"].as<std::string>(), args["port"].as<int>());

    const auto trajectory = Trajectory::from_json_file(args["trajectory"].as<std::string>());

    if (args["move-to-start"].as<bool>()) {
        const auto result = driver->move_to(trajectory.positions.front());
        if (!result) {
            std::cout << "Move to start failed with result: " << result.get_description() << std::endl;

    const auto result = driver->run(trajectory);
    if (!result) {
        std::cout << "Failed to run the trajectory: " << result.get_description() << std::endl;


from argparse import ArgumentParser

from jacobi import Planner, Trajectory
from jacobi.drivers import ABBDriver
from jacobi.robots import ABBIRB1200590

if __name__ == '__main__':
    parser = ArgumentParser('abb-driver', description='Run a pre-calculated trajectory on an ABB robot.')
    parser.add_argument('trajectory', type=str, help='File of the trajectory.')
    parser.add_argument('--speed', default=1.0, type=float, help='Speed of the driver.')
    parser.add_argument('--host', default='', help='IP address of the robot.')
    parser.add_argument('--port', default=6511, type=int, help='Port of the EGM Server.')
    parser.add_argument('--move-to-start', action='store_true', help='Move to the start of the trajectory.')

    args = parser.parse_args()

    robot = ABBIRB1200590()
    planner = Planner(robot)

    driver = ABBDriver(planner,, port=args.port)
    driver.speed = args.speed

    trajectory = Trajectory.from_json_file(args.trajectory)

    if args.move_to_start:
        result = driver.move_to(trajectory.positions[0])
        if not result:
            print(f'Move to start failed with result: {result}')

    result =
    if not result:
        print(f'Failed to run the trajectory: {result}')