GrabBag/Robot/FairinoWrapper/FairinoRobotWrapper.h

296 lines
10 KiB
C
Raw Normal View History

/**
* @file FairinoRobotWrapper.h
* @brief Fairino机器人SDK二次封装
* @details Fairino机器人moveL, moveJ等基本运动指令
*/
#ifndef FAIRINO_ROBOT_WRAPPER_H
#define FAIRINO_ROBOT_WRAPPER_H
#include "robot.h"
#include "robot_types.h"
#include "robot_error.h"
#include <string>
#include <memory>
// 导出宏定义
#ifdef FAIRINO_WRAPPER_LIB
#ifdef _WIN32
#define FAIRINO_WRAPPER_EXPORT __declspec(dllexport)
#else
#define FAIRINO_WRAPPER_EXPORT __attribute__((visibility("default")))
#endif
#else
#ifdef _WIN32
#define FAIRINO_WRAPPER_EXPORT __declspec(dllimport)
#else
#define FAIRINO_WRAPPER_EXPORT
#endif
#endif
/**
* @class FairinoRobotWrapper
* @brief Fairino机器人SDK二次封装类
*
* Fairino机器人
* 1. moveL - 线姿
* 2. moveJ - 姿
* 3.
*/
class FAIRINO_WRAPPER_EXPORT FairinoRobotWrapper
{
public:
/**
* @brief
*/
FairinoRobotWrapper();
/**
* @brief
*/
~FairinoRobotWrapper();
/**
* @brief
* @param ip IP地址192.168.58.2
* @return 0
*/
errno_t Connect(const std::string& ip = "192.168.58.2");
/**
* @brief
* @return 0
*/
errno_t Disconnect();
/**
* @brief
* @return true-false-
*/
bool IsConnected() const;
// ==================== 运动控制接口 ====================
/**
* @brief 线
* @param x X坐标mm
* @param y Y坐标mm
* @param z Z坐标mm
* @param rx X轴旋转角度deg
* @param ry Y轴旋转角度deg
* @param rz Z轴旋转角度deg
* @param vel [0~100]50
* @param acc [0~100]50
* @param blendR -1.0[0~1000.0]mm-1.0
* @param tool [0~14]0
* @param user [0~14]0
* @return 0
*/
errno_t MoveL(double x, double y, double z, double rx, double ry, double rz,
float vel = 50.0f, float acc = 50.0f, float blendR = -1.0f,
int tool = 0, int user = 0);
/**
* @brief 姿
* @param x X坐标mm
* @param y Y坐标mm
* @param z Z坐标mm
* @param rx X轴旋转角度deg
* @param ry Y轴旋转角度deg
* @param rz Z轴旋转角度deg
* @param vel [0~100]50
* @param acc [0~100]50
* @param blendT -1.0[0~500.0]ms-1.0
* @param tool [0~14]0
* @param user [0~14]0
* @return 0
*/
errno_t MoveJByPose(double x, double y, double z, double rx, double ry, double rz,
float vel = 50.0f, float acc = 50.0f, float blendT = -1.0f,
int tool = 0, int user = 0);
/**
* @brief
* @param j1 1deg
* @param j2 2deg
* @param j3 3deg
* @param j4 4deg
* @param j5 5deg
* @param j6 6deg
* @param vel [0~100]50
* @param acc [0~100]50
* @param blendT -1.0[0~500.0]ms-1.0
* @param tool [0~14]0
* @param user [0~14]0
* @return 0
*/
errno_t MoveJByJoint(double j1, double j2, double j3, double j4, double j5, double j6,
float vel = 50.0f, float acc = 50.0f, float blendT = -1.0f,
int tool = 0, int user = 0);
// ==================== 辅助接口 ====================
/**
* @brief
* @return 0
*/
errno_t StopMotion();
/**
* @brief
* @return 0
*/
errno_t PauseMotion();
/**
* @brief
* @return 0
*/
errno_t ResumeMotion();
/**
* @brief 使/使
* @param state 0-使1-使
* @return 0
*/
errno_t RobotEnable(uint8_t state);
/**
* @brief
* @return 0
*/
errno_t ResetAllError();
/**
* @brief
* @param j1~j6 deg
* @param blocking 0-1-0
* @return 0
*/
errno_t GetCurrentJointPos(double& j1, double& j2, double& j3,
double& j4, double& j5, double& j6,
uint8_t blocking = 0);
/**
* @brief TCP位姿
* @param x,y,z mm
* @param rx,ry,rz 姿deg
* @param blocking 0-1-0
* @return 0
*/
errno_t GetCurrentTCPPose(double& x, double& y, double& z,
double& rx, double& ry, double& rz,
uint8_t blocking = 0);
/**
* @brief
* @param state 0-1-
* @return 0
*/
errno_t GetMotionDone(uint8_t& state);
/**
* @brief
* @param maincode
* @param subcode
* @return 0
*/
errno_t GetErrorCode(int& maincode, int& subcode);
/**
* @brief
* @param state
* @return 0
*/
errno_t GetRobotState(ROBOT_STATE_PKG& state);
/**
* @brief
* @param id [0~14]
* @param x,y,z mm
* @param rx,ry,rz 姿deg
* @return 0
*/
errno_t SetToolCoord(int id, double x, double y, double z,
double rx, double ry, double rz);
/**
* @brief
* @param id [0~14]
* @param x,y,z mm
* @param rx,ry,rz 姿deg
* @param refFrame 0
* @return 0
*/
errno_t SetWObjCoord(int id, double x, double y, double z,
double rx, double ry, double rz, int refFrame = 0);
/**
* @brief
* @param vel [0~100]
* @return 0
*/
errno_t SetSpeed(int vel);
/**
* @brief
* @param ms ms
* @return 0
*/
errno_t Wait(int ms);
/**
* @brief SDK版本号
* @return SDK版本号字符串
*/
std::string GetSDKVersion();
/**
* @brief IP地址
* @return IP地址
*/
std::string GetControllerIP();
/**
* @brief 姿
* @param j1~j6 deg
* @param x,y,z mm
* @param rx,ry,rz 姿deg
* @return 0
*/
errno_t ForwardKinematics(double j1, double j2, double j3, double j4, double j5, double j6,
double& x, double& y, double& z, double& rx, double& ry, double& rz);
/**
* @brief 姿
* @param x,y,z mm
* @param rx,ry,rz 姿deg
* @param j1~j6 deg
* @param config [-1]-[0~7]--1
* @return 0
*/
errno_t InverseKinematics(double x, double y, double z, double rx, double ry, double rz,
double& j1, double& j2, double& j3, double& j4, double& j5, double& j6,
int config = -1);
/**
* @brief
* @return
*/
std::string GetLastErrorString() const;
private:
std::unique_ptr<FRRobot> robot_; ///< Fairino机器人SDK对象
bool connected_; ///< 连接状态
errno_t last_error_; ///< 最后一次错误码
/**
* @brief
* @param error
* @return
*/
std::string ErrorToString(errno_t error) const;
};
#endif // FAIRINO_ROBOT_WRAPPER_H