sas
Modularised monitoring, logging, and control of robots.
Loading...
Searching...
No Matches
sas_robot_driver_coppeliasim.hpp
Go to the documentation of this file.
1#pragma once
2/*
3# Copyright (c) 2016-2025 Murilo Marques Marinho
4#
5# This file is part of sas_robot_driver_coppeliasim.
6#
7# sas_robot_driver_coppeliasim is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Lesser General Public License as published by
9# the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
11#
12# sas_robot_driver_coppeliasim is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Lesser General Public License for more details.
16#
17# You should have received a copy of the GNU Lesser General Public License
18# along with sas_robot_driver_coppeliasim. If not, see <https://www.gnu.org/licenses/>.
19#
20# ################################################################
21#
22# Author: Murilo M. Marinho, email: murilomarinho@ieee.org
23# Based on `sas` ros composer.
24#
25# ################################################################*/
26
31
32#include <atomic>
33#include <memory>
34
35#include <sas_core/sas_robot_driver.hpp>
36
37#include <dqrobotics/interfaces/coppeliasim/DQ_CoppeliaSimInterfaceZMQ.h>
38
39
40namespace sas
41{
42
47{
48 int port;
49 std::string ip;
50 int timeout = 1000;
51 std::vector<std::string> robot_joint_names;
52};
53
57class RobotDriverCoppeliaSim: public RobotDriver
58{
59private:
61 Eigen::VectorXd joint_positions_;
62 std::shared_ptr<DQ_CoppeliaSimInterfaceZMQ> csi_;
63
64public:
65
66 // Prevent copies as usually drivers have threads
67 RobotDriverCoppeliaSim(const RobotDriverCoppeliaSim&)=delete;
68 RobotDriverCoppeliaSim()=delete;
69 ~RobotDriverCoppeliaSim();
70
76 RobotDriverCoppeliaSim(const RobotDriverCoppeliaSimConfiguration &configuration, std::atomic_bool* break_loops);
77
82 Eigen::VectorXd get_joint_positions() override;
83
88 void set_target_joint_positions(const Eigen::VectorXd& desired_joint_positions_rad) override;
89
94 std::tuple<Eigen::VectorXd, Eigen::VectorXd> get_joint_limits() override;
95
99 void connect() override;
100
104 void disconnect() override;
105
109 void initialize() override;
110
114 void deinitialize() override;
115
116};
117}
void deinitialize() override
Deinitializes the driver state.
Definition sas_robot_driver_coppeliasim.cpp:103
Eigen::VectorXd get_joint_positions() override
Returns current joint positions in radians.
Definition sas_robot_driver_coppeliasim.cpp:59
std::tuple< Eigen::VectorXd, Eigen::VectorXd > get_joint_limits() override
Returns joint position limits.
Definition sas_robot_driver_coppeliasim.cpp:124
void connect() override
Connects to the CoppeliaSim instance.
Definition sas_robot_driver_coppeliasim.cpp:79
void disconnect() override
Disconnects from the CoppeliaSim instance.
Definition sas_robot_driver_coppeliasim.cpp:111
void set_target_joint_positions(const Eigen::VectorXd &desired_joint_positions_rad) override
Sets joint positions and target joint positions.
Definition sas_robot_driver_coppeliasim.cpp:68
void initialize() override
Initializes the driver state.
Definition sas_robot_driver_coppeliasim.cpp:95
Configuration for RobotDriverCoppeliaSim.
Definition sas_robot_driver_coppeliasim.hpp:47
int port
ZMQ port number.
Definition sas_robot_driver_coppeliasim.hpp:48
std::string ip
CoppeliaSim IP address.
Definition sas_robot_driver_coppeliasim.hpp:49
std::vector< std::string > robot_joint_names
Names of the joints to control.
Definition sas_robot_driver_coppeliasim.hpp:51
int timeout
Connection timeout in milliseconds.
Definition sas_robot_driver_coppeliasim.hpp:50