libkindrv  0.1
kindrv.h
1 
2 /***************************************************************************
3  * kindrv.h - KinDrv main header file for arm control
4  *
5  * Created: Fri Oct 11 00:31:00 2013
6  * Copyright 2013 Bahram Maleki-Fard
7  * Copyright 2014 Tekin Mericli
8  ****************************************************************************/
9 
10 /* This file is part of libkindrv.
11  *
12  * libkindrv is free software: you can redistribute it and/or modify
13  * it under the terms of the GNU Lesser Public License as published by
14  * the Free Software Foundation, either version 3 of the License, or
15  * (at your option) any later version.
16  *
17  * Foobar is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20  * GNU Lesser Public License for more details.
21  *
22  * You should have received a copy of the GNU Lesser Public License
23  * along with libkindrv. If not, see <http://www.gnu.org/licenses/>.
24  */
25 
26 #ifndef _KINDRV_H
27 #define _KINDRV_H
28 
29 #include "types.h"
30 #include "exception.h"
31 
32 #include <boost/thread/mutex.hpp>
33 
34 struct libusb_device;
35 struct libusb_device_handle;
36 
37 namespace KinDrv {
38 
39 // internally used struct (see kindrv.cpp for details)
40 typedef struct usb_device_struct usb_device_t;
41 
42 // just to allow using them explicitly. The API will use them implicitly if necessary
43 error_t init_usb();
44 void close_usb();
45 
46 void list_devices();
47 
49 class JacoArm
50 {
51  public:
52  JacoArm();
53  virtual ~JacoArm();
54 
55  // controlling the arm via API (instead of connected joystick)
56  void start_api_ctrl();
57  void stop_api_ctrl();
58 
59  // start/stop force control / compliance mode
60  void start_force_ctrl();
61  void stop_force_ctrl();
62 
63  // getter; receiving commands
66 
75 
76  jaco_client_config_t get_client_config(bool refresh=true);
77  jaco_retract_mode_t get_status();
78 
79  // setter; sending basic commands
80  void set_control_ang();
81  void set_control_cart();
82  void erase_trajectories();
83 
84  // joystick functionaliy
85  void push_joystick_button(unsigned short id);
86  void push_joystick_button(jaco_joystick_button_t &buttons);
88  void move_joystick(jaco_joystick_t &state);
89  void release_joystick();
90 
91  // arm movement
93  void set_target_cart(float x, float y, float z, float euler_1, float euler_2, float euler_3, float finger_1, float finger_2, float finger_3);
94  void set_target_cart(float coord[], float fingers[]);
95  void set_target_ang(float j1, float j2, float j3, float j4, float j5, float j6, float finger_1, float finger_2, float finger_3);
96  void set_target_ang(float joints[], float fingers[]);
97 
98  private:
99  void Create(usb_device_t &dev);
100  void _flush();
101 
102  libusb_device_handle *__devh;
103  boost::mutex __lock;
104 
105  jaco_client_config_t __client_config;
106 
107  inline void _usb_header(usb_packet_t &p, unsigned short pid, unsigned short pquant, unsigned short cmdid, unsigned short cmdsize);
108  inline int _usb_in(usb_packet_t &p, int &transferred);
109  inline int _usb_out(usb_packet_t &p, int &transferred);
110 
111  // generic USB data transfer methods
112  error_t _cmd_out_in(usb_packet_t &p);
113  error_t _cmd_out(short cmdid);
114 
115  // Jaco specific commands
116  error_t _get_cart_pos(jaco_position_t &pos);
117  error_t _get_ang_pos(jaco_position_t &pos);
118 
119  error_t _get_ang_command(jaco_position_t &pos);
120  error_t _get_cart_command(jaco_position_t &pos);
121  error_t _get_ang_vel(jaco_position_t &pos);
122  error_t _get_cart_force(jaco_position_t &pos);
123  error_t _get_ang_force(jaco_position_t &pos);
124  error_t _get_ang_current(jaco_position_t &pos);
125  error_t _get_ang_current_motor(jaco_position_t &pos);
126  error_t _get_sensor_info(jaco_sensor_info_t &info);
127 
128  error_t _update_client_config();
129 
130  error_t _send_basic_traj(jaco_basic_traj_point_t &traj);
131 
132 
133 };
134 
135 } // end namespace KinDrv
136 #endif
KinDrv::JacoArm::erase_trajectories
void erase_trajectories()
Definition: kindrv.cpp:829
KinDrv::JacoArm::get_ang_force
jaco_position_t get_ang_force()
Definition: kindrv.cpp:941
KinDrv::jaco_position_t
Jaco universal position struct.
Definition: types.h:87
KinDrv::jaco_joystick_axis_t
Struct for joystick axis movement. Make sure to initialze with 0s!
Definition: types.h:110
KinDrv::JacoArm::~JacoArm
virtual ~JacoArm()
Definition: kindrv.cpp:448
KinDrv::JacoArm::set_control_cart
void set_control_cart()
Definition: kindrv.cpp:818
KinDrv::JacoArm::move_joystick
void move_joystick(jaco_joystick_t &state)
Definition: kindrv.cpp:1093
KinDrv::jaco_client_config_t
Struct containing the client information and configuration.
Definition: types.h:151
KinDrv::JacoArm::stop_force_ctrl
void stop_force_ctrl()
Definition: kindrv.cpp:796
KinDrv::JacoArm::JacoArm
JacoArm()
Definition: kindrv.cpp:392
KinDrv::usb_device_struct
Definition: kindrv.cpp:74
KinDrv::jaco_joystick_t
Each joystick action (button,axis) as a whole is represented by one of this struct....
Definition: types.h:125
KinDrv::JacoArm::get_cart_force
jaco_position_t get_cart_force()
Definition: kindrv.cpp:925
KinDrv::usb_packet_t
USB packet struct. All USB I/O is one of this.
Definition: types.h:206
KinDrv::JacoArm::set_target_cart
void set_target_cart(float x, float y, float z, float euler_1, float euler_2, float euler_3, float finger_1, float finger_2, float finger_3)
Definition: kindrv.cpp:1176
KinDrv::JacoArm::get_cart_command
jaco_position_t get_cart_command()
Definition: kindrv.cpp:909
KinDrv::jaco_sensor_info_t
Struct that holds values of various sensors of the robot.
Definition: types.h:131
KinDrv::JacoArm::get_ang_vel
jaco_position_t get_ang_vel()
Definition: kindrv.cpp:877
KinDrv::JacoArm::get_sensor_info
jaco_sensor_info_t get_sensor_info()
Definition: kindrv.cpp:989
KinDrv::JacoArm::get_ang_current
jaco_position_t get_ang_current()
Definition: kindrv.cpp:957
KinDrv::JacoArm::get_status
jaco_retract_mode_t get_status()
Definition: kindrv.cpp:1024
KinDrv::JacoArm::push_joystick_button
void push_joystick_button(unsigned short id)
Definition: kindrv.cpp:1048
KinDrv::jaco_basic_traj_point_t
Basic trajectory struct.
Definition: types.h:99
KinDrv::JacoArm::get_ang_current_motor
jaco_position_t get_ang_current_motor()
Definition: kindrv.cpp:973
KinDrv::JacoArm::set_target_ang
void set_target_ang(float j1, float j2, float j3, float j4, float j5, float j6, float finger_1, float finger_2, float finger_3)
Definition: kindrv.cpp:1207
KinDrv::JacoArm::get_ang_pos
jaco_position_t get_ang_pos()
Definition: kindrv.cpp:861
KinDrv::JacoArm
Main JacoArm class. All communication is done via an instance of this.
Definition: kindrv.h:49
KinDrv::JacoArm::release_joystick
void release_joystick()
Definition: kindrv.cpp:1109
KinDrv::JacoArm::move_joystick_axis
void move_joystick_axis(jaco_joystick_axis_t &axes)
Definition: kindrv.cpp:1080
KinDrv::JacoArm::start_force_ctrl
void start_force_ctrl()
Definition: kindrv.cpp:784
KinDrv::JacoArm::get_ang_command
jaco_position_t get_ang_command()
Definition: kindrv.cpp:893
KinDrv::JacoArm::set_control_ang
void set_control_ang()
Definition: kindrv.cpp:807
KinDrv::JacoArm::set_target
void set_target(jaco_basic_traj_point_t &traj)
Definition: kindrv.cpp:1123
KinDrv::JacoArm::get_client_config
jaco_client_config_t get_client_config(bool refresh=true)
Definition: kindrv.cpp:1008
KinDrv::JacoArm::get_cart_pos
jaco_position_t get_cart_pos()
Definition: kindrv.cpp:845
KinDrv::JacoArm::stop_api_ctrl
void stop_api_ctrl()
Definition: kindrv.cpp:772
KinDrv::JacoArm::start_api_ctrl
void start_api_ctrl()
Definition: kindrv.cpp:756