Skip to content

Commit 99cf142

Browse files
authored
Merge pull request #36 from d-nakamichi/refactoring
Refactoring about khi_robot_control
2 parents 3ad42f9 + b2d6e51 commit 99cf142

14 files changed

+384
-406
lines changed

khi_robot_bringup/config/duaro_controllers.yaml

+8-6
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
1+
khi_robot_param:
2+
robot: WD002N
3+
arm:
4+
arm1:
5+
- duaro_lower_arm_controller
6+
arm2:
7+
- duaro_upper_arm_controller
8+
19
# Publish all joint states -----------------------------------
210
joint_state_controller:
311
type: joint_state_controller/JointStateController
412
publish_rate: 50
513

6-
khi_robot_controllers:
7-
robot: WD002N
8-
names:
9-
- duaro_lower_arm_controller
10-
- duaro_upper_arm_controller
11-
1214
# Position - Right and Left Joint Position Trajectory Controllers -------------------
1315
duaro_lower_arm_controller:
1416
type: "position_controllers/JointTrajectoryController"

khi_robot_bringup/config/rs007l_controllers.yaml

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1+
khi_robot_param:
2+
robot: RS007L
3+
arm:
4+
arm1:
5+
- rs007l_arm_controller
6+
17
# Publish all joint states -----------------------------------
28
joint_state_controller:
39
type: joint_state_controller/JointStateController
410
publish_rate: 50
511

6-
khi_robot_controllers:
7-
robot: RS007L
8-
names:
9-
- rs007l_arm_controller
10-
1112
# Position - Joint Position Trajectory Controller -------------------
1213
rs007l_arm_controller:
1314
type: "position_controllers/JointTrajectoryController"

khi_robot_bringup/config/rs007n_controllers.yaml

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1+
khi_robot_param:
2+
robot: RS007N
3+
arm:
4+
arm1:
5+
- rs007n_arm_controller
6+
17
# Publish all joint states -----------------------------------
28
joint_state_controller:
39
type: joint_state_controller/JointStateController
410
publish_rate: 50
511

6-
khi_robot_controllers:
7-
robot: RS007N
8-
names:
9-
- rs007n_arm_controller
10-
1112
# Position - Joint Position Trajectory Controller -------------------
1213
rs007n_arm_controller:
1314
type: "position_controllers/JointTrajectoryController"

khi_robot_bringup/config/rs080n_controllers.yaml

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1+
2+
khi_robot_param:
3+
robot: RS080N
4+
arm:
5+
arm1:
6+
- rs080n_arm_controller
7+
18
# Publish all joint states -----------------------------------
29
joint_state_controller:
310
type: joint_state_controller/JointStateController
411
publish_rate: 50
512

6-
khi_robot_controllers:
7-
robot: RS080N
8-
names:
9-
- rs080n_arm_controller
10-
1113
# Position - Joint Position Trajectory Controller -------------------
1214
rs080n_arm_controller:
1315
type: "position_controllers/JointTrajectoryController"

khi_robot_control/CMakeLists.txt

+3
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ endif()
5454
find_library(krnx_LIBRARIES lib${krnx_lib_name}.so PATHS ${PROJECT_SOURCE_DIR}/lib)
5555
message(STATUS "Found KRNX library at: ${krnx_LIBRARIES}")
5656

57+
## Specify C++11
58+
add_definitions(-std=c++11)
59+
5760
## Declare a C++ library
5861
add_library(khi_robot_client src/khi_robot_client.cpp src/khi_robot_krnx_driver.cpp)
5962

khi_robot_control/include/khi_robot_client.h

+8-12
Original file line numberDiff line numberDiff line change
@@ -48,27 +48,23 @@ class KhiRobotClient
4848
KhiRobotClient(){};
4949
~KhiRobotClient(){};
5050

51-
bool open( std::string robot, std::string ip, double period, JointData joint, bool in_simulation = false );
52-
bool activate( JointData *joint );
53-
bool hold( const JointData joint );
54-
void deactivate();
51+
bool open( const std::string& ip, const double& period, KhiRobotData& data, const bool in_simulation = false );
52+
bool activate( KhiRobotData& data );
53+
bool hold( const KhiRobotData& data );
54+
void deactivate( const KhiRobotData& data );
5555
void close();
5656

57-
void write( const JointData joint );
58-
void read( JointData *joint );
57+
void write( const KhiRobotData& data );
58+
void read( KhiRobotData& data );
5959

60-
int updateState();
60+
int updateState( const KhiRobotData& data );
6161
int getStateTrigger();
62-
bool getPeriodDiff( double *diff );
62+
bool getPeriodDiff( double& diff );
6363
void startCommandService();
6464

6565
private:
6666
int cont_no;
67-
JointData joint_cmd;
68-
JointData joint_pos;
6967
KhiRobotDriver *driver;
70-
71-
void printJointData( std::string name, const JointData joint );
7268
};
7369

7470
} // namespace

khi_robot_control/include/khi_robot_driver.h

+53-60
Original file line numberDiff line numberDiff line change
@@ -41,26 +41,34 @@
4141
namespace khi_robot_control
4242
{
4343
#define KHI_MAX_CONTROLLER 8
44+
#define KHI_MAX_ARM 2
4445
#define KHI_MAX_JOINT 18
4546
#define KHI_MAX_SIG_SIZE 512
4647

47-
struct JointData
48+
struct KhiRobotArmData
4849
{
49-
int joint_num;
50+
int jt_num;
5051
std::string name[KHI_MAX_JOINT];
52+
int type[KHI_MAX_JOINT];
5153
double cmd[KHI_MAX_JOINT];
5254
double pos[KHI_MAX_JOINT];
5355
double vel[KHI_MAX_JOINT];
5456
double eff[KHI_MAX_JOINT];
57+
double home[KHI_MAX_JOINT];
5558
};
5659

57-
struct RobotInfo
60+
struct KhiRobotData
61+
{
62+
std::string robot_name;
63+
int arm_num;
64+
KhiRobotArmData arm[KHI_MAX_ARM];
65+
};
66+
67+
struct KhiRobotControllerInfo
5868
{
5969
int state;
6070
int state_trigger;
6171
std::string ip_address;
62-
std::string robot_name;
63-
int arm_num;
6472
double period;
6573
};
6674

@@ -119,23 +127,21 @@ class KhiRobotDriver
119127
{
120128
for ( int cno = 0; cno < KHI_MAX_CONTROLLER; cno++ )
121129
{
122-
robot_info[cno].state = INIT;
123-
robot_info[cno].state_trigger = NONE;
124-
robot_info[cno].ip_address = "127.0.0.1";
125-
robot_info[cno].robot_name = "";
126-
robot_info[cno].arm_num = -1;
130+
cont_info[cno].state = INIT;
131+
cont_info[cno].state_trigger = NONE;
132+
cont_info[cno].ip_address = "127.0.0.1";
127133
}
128134

129135
driver_name = __func__;
130136
}
131137

132-
int getState( const int cont_no )
138+
int getState( const int& cont_no )
133139
{
134140
if ( ( cont_no < 0 ) || ( cont_no > KHI_MAX_CONTROLLER ) ) { return NOT_REGISTERED; }
135-
else { return robot_info[cont_no].state; }
141+
else { return cont_info[cont_no].state; }
136142
}
137143

138-
std::string getStateName( const int cont_no )
144+
std::string getStateName( const int& cont_no )
139145
{
140146
int state;
141147
std::string name = "";
@@ -149,7 +155,7 @@ class KhiRobotDriver
149155
return name;
150156
}
151157

152-
bool setState( const int cont_no, const int state )
158+
bool setState( const int& cont_no, const int& state )
153159
{
154160
if ( !contLimitCheck( cont_no, KHI_MAX_CONTROLLER ) ) { return false; }
155161

@@ -159,16 +165,16 @@ class KhiRobotDriver
159165
}
160166
else
161167
{
162-
if ( robot_info[cont_no].state != state )
168+
if ( cont_info[cont_no].state != state )
163169
{
164-
infoPrint( "State %d: %s -> %s", cont_no, KhiRobotStateName[robot_info[cont_no].state].c_str(), KhiRobotStateName[state].c_str() );
165-
robot_info[cont_no].state = state;
170+
infoPrint( "State %d: %s -> %s", cont_no, KhiRobotStateName[cont_info[cont_no].state].c_str(), KhiRobotStateName[state].c_str() );
171+
cont_info[cont_no].state = state;
166172
}
167173
return true;
168174
}
169175
}
170176

171-
bool isTransitionState( const int cont_no )
177+
bool isTransitionState( const int& cont_no )
172178
{
173179
int state;
174180

@@ -183,20 +189,20 @@ class KhiRobotDriver
183189
}
184190
}
185191

186-
int getStateTrigger( const int cont_no )
192+
int getStateTrigger( const int& cont_no )
187193
{
188194
int state_trigger;
189195

190196
if ( ( cont_no < 0 ) || ( cont_no > KHI_MAX_CONTROLLER ) ) { return NONE; }
191197
else
192198
{
193-
state_trigger = robot_info[cont_no].state_trigger;
194-
robot_info[cont_no].state_trigger = NONE;
199+
state_trigger = cont_info[cont_no].state_trigger;
200+
cont_info[cont_no].state_trigger = NONE;
195201
return state_trigger;
196202
}
197203
}
198204

199-
bool setStateTrigger( const int cont_no, const int state_trigger )
205+
bool setStateTrigger( const int& cont_no, const int& state_trigger )
200206
{
201207
if ( !contLimitCheck( cont_no, KHI_MAX_CONTROLLER ) ) { return false; }
202208

@@ -206,25 +212,17 @@ class KhiRobotDriver
206212
}
207213
else
208214
{
209-
if ( robot_info[cont_no].state_trigger != NONE )
215+
if ( cont_info[cont_no].state_trigger != NONE )
210216
{
211217
warnPrint( "State Trigger is already done %d: %s", cont_no, KhiRobotStateTriggerName[state_trigger].c_str() );
212218
}
213219
infoPrint( "State Trigger %d: %s", cont_no, KhiRobotStateTriggerName[state_trigger].c_str() );
214-
robot_info[cont_no].state_trigger = state_trigger;
220+
cont_info[cont_no].state_trigger = state_trigger;
215221
return true;
216222
}
217223
}
218224

219-
bool setRobotName( const int cont_no, const std::string name )
220-
{
221-
if ( contLimitCheck( cont_no, KHI_MAX_CONTROLLER ) ) { return false; }
222-
223-
robot_info[cont_no].robot_name = name;
224-
return true;
225-
}
226-
227-
bool contLimitCheck( const int cont_no, const int limit )
225+
bool contLimitCheck( const int& cont_no, const int& limit )
228226
{
229227
if ( ( cont_no < 0 ) || ( cont_no > KHI_MAX_CONTROLLER ) || ( cont_no > limit ) )
230228
{
@@ -237,7 +235,7 @@ class KhiRobotDriver
237235
}
238236
}
239237

240-
void infoPrint( const char *format, ... )
238+
void infoPrint( const char* format, ... )
241239
{
242240
char msg[512] = { 0 };
243241
va_list ap;
@@ -248,7 +246,7 @@ class KhiRobotDriver
248246
ROS_INFO( "[%s] %s", driver_name.c_str(), msg );
249247
}
250248

251-
void warnPrint( const char *format, ... )
249+
void warnPrint( const char* format, ... )
252250
{
253251
char msg[512] = { 0 };
254252
va_list ap;
@@ -259,7 +257,7 @@ class KhiRobotDriver
259257
ROS_WARN( "[%s] %s", driver_name.c_str(), msg );
260258
}
261259

262-
void errorPrint( const char *format, ... )
260+
void errorPrint( const char* format, ... )
263261
{
264262
char msg[512] = { 0 };
265263
va_list ap;
@@ -270,48 +268,43 @@ class KhiRobotDriver
270268
ROS_ERROR( "[%s] %s", driver_name.c_str(), msg );
271269
}
272270

273-
void jointPrint( std::string name, const JointData joint )
271+
void jointPrint( std::string name, const KhiRobotData& data )
274272
{
275273
char msg[512] = { 0 };
276274
char jt_val[16] = { 0 };
275+
const double* value;
277276

278277
snprintf( msg, sizeof(msg), "[%s]\t", name.c_str() );
279-
if ( name == std::string("write") )
280-
{
281-
for ( int cnt = 0; cnt < joint.joint_num; cnt++ )
282-
{
283-
snprintf( jt_val, sizeof(jt_val), "%.3lf\t", joint.cmd[cnt] );
284-
strcat( msg, jt_val );
285-
}
286-
}
287-
else
278+
for ( int ano = 0; ano < KHI_MAX_ARM; ano++ )
288279
{
289-
for ( int cnt = 0; cnt < joint.joint_num; cnt++ )
280+
if ( name == std::string("write") ) { value = data.arm[ano].cmd; }
281+
else { value = data.arm[ano].pos; }
282+
for ( int jt = 0; jt < data.arm[ano].jt_num; jt++ )
290283
{
291-
snprintf( jt_val, sizeof(jt_val), "%.3lf\t", joint.pos[cnt] );
284+
snprintf( jt_val, sizeof(jt_val), "%.3lf\t", value[jt] );
292285
strcat( msg, jt_val );
293286
}
294287
}
295288
infoPrint( "[SIM]%s", msg );
296289
}
297290

298291
virtual ~KhiRobotDriver() {};
299-
virtual bool initialize( const int cont_no, const std::string robot_name, const double period, const JointData joint, bool in_simulation = false ) = 0;
300-
virtual bool open( const int cont_no, const std::string ip_address ) = 0;
301-
virtual bool close( const int cont_no ) = 0;
302-
virtual bool activate( const int cont_no, JointData *joint ) = 0;
303-
virtual bool hold( const int cont_no, const JointData joint ) = 0;
304-
virtual bool deactivate( const int cont_no ) = 0;
305-
virtual bool readData( const int cont_no, JointData *joint ) = 0;
306-
virtual bool writeData( const int cont_no, JointData joint ) = 0;
307-
virtual bool updateState( const int cont_no ) = 0;
308-
virtual bool getPeriodDiff( const int cont_no, double *diff ) = 0;
309-
virtual bool commandHandler( khi_robot_msgs::KhiRobotCmd::Request &req, khi_robot_msgs::KhiRobotCmd::Response &res ) = 0;
292+
virtual bool initialize( const int& cont_no, const double& period, KhiRobotData& data, const bool in_simulation = false ) = 0;
293+
virtual bool open( const int& cont_no, const std::string& ip_address, KhiRobotData& data ) = 0;
294+
virtual bool close( const int& cont_no ) = 0;
295+
virtual bool activate( const int& cont_no, KhiRobotData& data ) = 0;
296+
virtual bool hold( const int& cont_no, const KhiRobotData& data ) = 0;
297+
virtual bool deactivate( const int& cont_no, const KhiRobotData& data ) = 0;
298+
virtual bool readData( const int& cont_no, KhiRobotData& data ) = 0;
299+
virtual bool writeData( const int& cont_no, const KhiRobotData& data ) = 0;
300+
virtual bool updateState( const int& cont_no, const KhiRobotData& data ) = 0;
301+
virtual bool getPeriodDiff( const int& cont_no, double& diff ) = 0;
302+
virtual bool commandHandler( khi_robot_msgs::KhiRobotCmd::Request& req, khi_robot_msgs::KhiRobotCmd::Response& res ) = 0;
310303

311304
protected:
312305
bool in_simulation;
313306
std::string driver_name;
314-
RobotInfo robot_info[KHI_MAX_CONTROLLER];
307+
KhiRobotControllerInfo cont_info[KHI_MAX_CONTROLLER];
315308
int return_code;
316309
int error_code;
317310
};

0 commit comments

Comments
 (0)