humotion / include / server / joint_interface.h @ 5972e317
History | View | Annotate | Download (3.533 KB)
1 | 8c6c1163 | Simon Schulz | /*
|
---|---|---|---|
2 | * This file is part of humotion
|
||
3 | *
|
||
4 | * Copyright(c) sschulz <AT> techfak.uni-bielefeld.de
|
||
5 | * http://opensource.cit-ec.de/projects/humotion
|
||
6 | *
|
||
7 | * This file may be licensed under the terms of the
|
||
8 | * GNU Lesser General Public License Version 3 (the ``LGPL''),
|
||
9 | * or (at your option) any later version.
|
||
10 | *
|
||
11 | * Software distributed under the License is distributed
|
||
12 | * on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
|
||
13 | * express or implied. See the LGPL for the specific language
|
||
14 | * governing rights and limitations.
|
||
15 | *
|
||
16 | * You should have received a copy of the LGPL along with this
|
||
17 | * program. If not, go to http://www.gnu.org/licenses/lgpl.html
|
||
18 | * or write to the Free Software Foundation, Inc.,
|
||
19 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||
20 | *
|
||
21 | * The development of this software was supported by the
|
||
22 | * Excellence Cluster EXC 277 Cognitive Interaction Technology.
|
||
23 | * The Excellence Cluster EXC 277 is a grant of the Deutsche
|
||
24 | * Forschungsgemeinschaft (DFG) in the context of the German
|
||
25 | * Excellence Initiative.
|
||
26 | */
|
||
27 | |||
28 | #pragma once
|
||
29 | #include <cstdio> |
||
30 | #include <cstdint> |
||
31 | #include <string> |
||
32 | #include <map> |
||
33 | #include "../timestamped_list.h" |
||
34 | #include "../mouth_state.h" |
||
35 | #include "../gaze_state.h" |
||
36 | #include "boost/date_time/posix_time/posix_time.hpp" |
||
37 | #include <boost/thread/thread_time.hpp> |
||
38 | #include <boost/thread/thread.hpp> |
||
39 | #include <boost/thread/mutex.hpp> |
||
40 | |||
41 | namespace humotion{ |
||
42 | namespace server{ |
||
43 | |||
44 | //forward declaration to solve include loop
|
||
45 | class Controller; |
||
46 | |||
47 | |||
48 | class JointInterface{ |
||
49 | public:
|
||
50 | JointInterface(); |
||
51 | ~JointInterface(); |
||
52 | |||
53 | void set_target_position(int joint_id, float position); |
||
54 | float get_target_position(int joint_id); |
||
55 | virtual void publish_target_position(int joint_id) = 0; |
||
56 | virtual void execute_motion() = 0; |
||
57 | |||
58 | typedef std::map<int, TimestampedList> joint_tsl_map_t; |
||
59 | |||
60 | TimestampedList get_ts_position(int joint_id);
|
||
61 | TimestampedList get_ts_speed(int joint_id);
|
||
62 | |||
63 | void set_framerate(float f); |
||
64 | |||
65 | void enable_mouth_joints();
|
||
66 | void disable_mouth_joints();
|
||
67 | bool mouth_target_input_active();
|
||
68 | |||
69 | void enable_gaze_joints();
|
||
70 | void disable_gaze_joints();
|
||
71 | bool gaze_target_input_active();
|
||
72 | |||
73 | float get_joint_min(int joint_id); |
||
74 | float get_joint_max(int joint_id); |
||
75 | |||
76 | void dump_angles();
|
||
77 | |||
78 | unsigned int get_and_clear_incoming_position_count(); |
||
79 | |||
80 | enum JOINT_ID_ENUM{
|
||
81 | ZERO = 0,
|
||
82 | ID_LIP_LEFT_UPPER, |
||
83 | ID_LIP_LEFT_LOWER, |
||
84 | ID_LIP_CENTER_UPPER, |
||
85 | ID_LIP_CENTER_LOWER, |
||
86 | ID_LIP_RIGHT_UPPER, |
||
87 | ID_LIP_RIGHT_LOWER, |
||
88 | ID_NECK_PAN, |
||
89 | ID_NECK_TILT, |
||
90 | ID_NECK_ROLL, |
||
91 | ID_EYES_LEFT_LR, |
||
92 | ID_EYES_RIGHT_LR, |
||
93 | ID_EYES_BOTH_UD, |
||
94 | ID_EYES_LEFT_LID_LOWER, |
||
95 | ID_EYES_LEFT_LID_UPPER, |
||
96 | ID_EYES_RIGHT_LID_LOWER, |
||
97 | ID_EYES_RIGHT_LID_UPPER, |
||
98 | ID_EYES_LEFT_BROW, |
||
99 | ID_EYES_RIGHT_BROW, |
||
100 | JOINT_ID_ENUM_SIZE |
||
101 | }; |
||
102 | |||
103 | bool get_joint_position_map_empty();
|
||
104 | |||
105 | protected:
|
||
106 | |||
107 | void store_incoming_position(int joint_id, float position, double timestamp); |
||
108 | void store_incoming_speed(int joint_id, float speed, double timestamp); |
||
109 | |||
110 | virtual void enable_joint(int id) = 0; |
||
111 | virtual void disable_joint(int id) = 0; |
||
112 | float framerate;
|
||
113 | |||
114 | float joint_min[JOINT_ID_ENUM_SIZE];
|
||
115 | float joint_max[JOINT_ID_ENUM_SIZE];
|
||
116 | float joint_target[JOINT_ID_ENUM_SIZE];
|
||
117 | |||
118 | |||
119 | |||
120 | private:
|
||
121 | boost::mutex joint_ts_position_map_access_mutex; |
||
122 | boost::mutex joint_ts_speed_map_access_mutex; |
||
123 | joint_tsl_map_t joint_ts_position_map; |
||
124 | joint_tsl_map_t joint_ts_speed_map; |
||
125 | |||
126 | bool mouth_enabled;
|
||
127 | bool gaze_enabled;
|
||
128 | unsigned int incoming_position_count; |
||
129 | |||
130 | }; |
||
131 | |||
132 | } |
||
133 | } |