Program Listing for File active_control.h

Return to documentation for file (include/franka/active_control.h)

// Copyright (c) 2023 Franka Robotics GmbH
// Use of this source code is governed by the Apache-2.0 license, see LICENSE
#pragma once

#include <franka/active_control_base.h>
#include <franka/exception.h>

#include "robot.h"

namespace franka {

class ActiveControl : public ActiveControlBase {
 public:
  ~ActiveControl() override;

  std::pair<RobotState, Duration> readOnce() override;

  void writeOnce(const Torques& /* control_input */) override {
    throw franka::ControlException(wrong_write_once_method_called);
  };

  void writeOnce(const JointPositions& /* motion_generator_input */,
                 const std::optional<const Torques>& /*control_input*/) override {
    throw franka::ControlException(wrong_write_once_method_called);
  };

  void writeOnce(const JointVelocities& /* motion_generator_input */,
                 const std::optional<const Torques>& /* control_input */) override {
    throw franka::ControlException(wrong_write_once_method_called);
  };

  void writeOnce(const CartesianPose& /* motion_generator_input */,
                 const std::optional<const Torques>& /* control_input */) override {
    throw franka::ControlException(wrong_write_once_method_called);
  };

  void writeOnce(const CartesianVelocities& /* motion_generator_input */,
                 const std::optional<const Torques>& /* control_input */) override {
    throw franka::ControlException(wrong_write_once_method_called);
  };

  void writeOnce(const JointPositions& motion_generator_input) override {
    writeOnce(motion_generator_input, std::optional<const Torques>());
  };

  void writeOnce(const JointVelocities& motion_generator_input) override {
    writeOnce(motion_generator_input, std::optional<const Torques>());
  };

  void writeOnce(const CartesianPose& motion_generator_input) override {
    writeOnce(motion_generator_input, std::optional<const Torques>());
  };

  void writeOnce(const CartesianVelocities& motion_generator_input) override {
    writeOnce(motion_generator_input, std::optional<const Torques>());
  };

 protected:
  ActiveControl(std::shared_ptr<Robot::Impl> robot_impl,
                uint32_t motion_id,
                std::unique_lock<std::mutex> control_lock);

  std::shared_ptr<Robot::Impl> robot_impl;

  uint32_t motion_id;

  std::unique_lock<std::mutex> control_lock;

  bool control_finished;

  std::optional<Duration> last_read_access;

 private:
  const std::string wrong_write_once_method_called{
      "Wrong writeOnce method called for currently active control!"};
};

}  // namespace franka