Visual Servoing Platform version 3.5.0
vpRobotKinova.h
1/****************************************************************************
2 *
3 * ViSP, open source Visual Servoing Platform software.
4 * Copyright (C) 2005 - 2019 by Inria. All rights reserved.
5 *
6 * This software is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 * See the file LICENSE.txt at the root directory of this source
11 * distribution for additional information about the GNU GPL.
12 *
13 * For using ViSP with software that can not be combined with the GNU
14 * GPL, please contact Inria about acquiring a ViSP Professional
15 * Edition License.
16 *
17 * See http://visp.inria.fr for more information.
18 *
19 * This software was developed at:
20 * Inria Rennes - Bretagne Atlantique
21 * Campus Universitaire de Beaulieu
22 * 35042 Rennes Cedex
23 * France
24 *
25 * If you have questions regarding the use of this file, please contact
26 * Inria at visp@inria.fr
27 *
28 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
29 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30 *
31 * Description:
32 * Interface for Kinova Jaco robot.
33 *
34 * Authors:
35 * Fabien Spindler
36 *
37 *****************************************************************************/
38
39#ifndef vpRobotKinova_h
40#define vpRobotKinova_h
41
50#include <visp3/core/vpConfig.h>
51
52#ifdef VISP_HAVE_JACOSDK
53
54#include <KinovaTypes.h>
55
56#ifdef __linux__
57#include <dlfcn.h>
58#include <vector>
59#include <stdio.h>
60#include <unistd.h>
61#include <Kinova.API.CommLayerUbuntu.h>
62#include <Kinova.API.UsbCommandLayerUbuntu.h>
63#elif _WIN32
64#include <Windows.h>
65#include <conio.h>
66#include <iostream>
67#include <CommunicationLayer.h>
68#include <CommandLayer.h>
69#endif
70
71#include <visp3/core/vpHomogeneousMatrix.h>
72#include <visp3/robot/vpRobot.h>
73
91class VISP_EXPORT vpRobotKinova : public vpRobot
92{
93public:
94 typedef enum {
97 CMD_LAYER_UNSET
98 } CommandLayer;
99
101 virtual ~vpRobotKinova();
102
103 int connect();
104
105 void get_eJe(vpMatrix &eJe);
106 void get_fJe(vpMatrix &fJe);
107
112 vpHomogeneousMatrix get_eMc() const { return m_eMc; }
113
114 int getActiveDevice() const { return m_active_device; }
115 int getNumDevices() const { return m_devices_count; }
117 void getPosition(const vpRobot::vpControlFrameType frame, vpColVector &position);
119
120 void homing();
121
126 void set_eMc(vpHomogeneousMatrix &eMc) { m_eMc = eMc; }
127 void setActiveDevice(int device);
132 void setCommandLayer(CommandLayer command_layer) { m_command_layer = command_layer; }
133 void setDoF(unsigned int dof);
134 void setPosition(const vpRobot::vpControlFrameType frame, const vpColVector &q);
141 void setPluginLocation(const std::string &plugin_location) { m_plugin_location = plugin_location; }
142 void setVelocity(const vpRobot::vpControlFrameType frame, const vpColVector &vel);
148 void setVerbose(bool verbose) { m_verbose = verbose; }
149
150protected:
151 void closePlugin();
152 void getJointPosition(vpColVector &q);
153 void init();
154 void loadPlugin();
155 void setCartVelocity(const vpRobot::vpControlFrameType frame, const vpColVector &v);
156 void setJointVelocity(const vpColVector &qdot);
157
158protected:
160 std::string m_plugin_location;
164 KinovaDevice *m_devices_list;
167
168#ifdef __linux__
169 void * m_command_layer_handle;
170#elif _WIN32
171 HINSTANCE m_command_layer_handle;
172#endif
173
174private:
175 int (*KinovaCloseAPI)();
176 int (*KinovaGetAngularCommand)(AngularPosition &);
177 int (*KinovaGetCartesianCommand)(CartesianPosition &);
178 int (*KinovaGetDevices)(KinovaDevice devices[MAX_KINOVA_DEVICE], int &result);
179 int (*KinovaInitFingers)();
180 int (*KinovaInitAPI)();
181 int (*KinovaMoveHome)();
182 int (*KinovaSendBasicTrajectory)(TrajectoryPoint command);
183 int (*KinovaSetActiveDevice)(KinovaDevice device);
184 int (*KinovaSetAngularControl)();
185 int (*KinovaSetCartesianControl)();
186};
187
188#endif
189#endif
Implementation of column vector and the associated operations.
Definition: vpColVector.h:131
Implementation of an homogeneous matrix and operations on such kind of matrices.
Implementation of a matrix and operations on matrices.
Definition: vpMatrix.h:154
Implementation of a pose vector and operations on poses.
Definition: vpPoseVector.h:152
void set_eMc(vpHomogeneousMatrix &eMc)
void setCommandLayer(CommandLayer command_layer)
KinovaDevice * m_devices_list
int getNumDevices() const
std::string m_plugin_location
vpHomogeneousMatrix m_eMc
Constant transformation between end-effector and tool (or camera) frame.
CommandLayer m_command_layer
vpHomogeneousMatrix get_eMc() const
void setVerbose(bool verbose)
void setPluginLocation(const std::string &plugin_location)
int getActiveDevice() const
Class that defines a generic virtual robot.
Definition: vpRobot.h:59
virtual void getPosition(const vpRobot::vpControlFrameType frame, vpColVector &q)=0
Get the robot position (frame has to be specified).
vpControlFrameType
Definition: vpRobot.h:75
virtual void get_eJe(vpMatrix &_eJe)=0
Get the robot Jacobian expressed in the end-effector frame.
virtual void setVelocity(const vpRobot::vpControlFrameType frame, const vpColVector &vel)=0
virtual void init()=0
virtual void get_fJe(vpMatrix &_fJe)=0
virtual void getDisplacement(const vpRobot::vpControlFrameType frame, vpColVector &q)=0
virtual void setPosition(const vpRobot::vpControlFrameType frame, const vpColVector &q)=0
Set a displacement (frame has to be specified) in position control.