44 #define RAD2DEG (M_PI/180.0) 89 double sr = sin(roll), cr = cos(roll);
90 double sp = sin(pitch), cp = cos(pitch);
91 double sy = sin(yaw), cy = cos(yaw);
93 Eigen::MatrixXd mat_roll(4,4);
94 Eigen::MatrixXd mat_pitch(4,4);
95 Eigen::MatrixXd mat_yaw(4,4);
115 Eigen::MatrixXd mat_xyzrpy = (mat_yaw*mat_pitch)*mat_roll;
117 mat_xyzrpy.coeffRef(0, 3) = position_x;
118 mat_xyzrpy.coeffRef(1, 3) = position_y;
119 mat_xyzrpy.coeffRef(2, 3) = position_z;
127 *position_x = matTransform.coeff(0, 3);
128 *position_y = matTransform.coeff(1, 3);
129 *position_z = matTransform.coeff(2, 3);
130 *roll = atan2( matTransform.coeff(2,1), matTransform.coeff(2,2));
131 *pitch = atan2(-matTransform.coeff(2,0), sqrt(matTransform.coeff(2,1)*matTransform.coeff(2,1) + matTransform.coeff(2,2)*matTransform.coeff(2,2)) );
132 *yaw = atan2( matTransform.coeff(1,0), matTransform.coeff(0,0));
137 thormang3_walking_module_msgs::PoseXYZRPY pose;
142 double pose_roll = 0;
143 double pose_pitch = 0;
151 pose.roll = pose_roll;
152 pose.pitch = pose_pitch;
162 Eigen::Vector3d vec_boa;
163 Eigen::Vector3d vec_x, vec_y, vec_z;
164 Eigen::MatrixXd inv_t(4,4);
166 vec_boa(0) = -transform(0,3);
167 vec_boa(1) = -transform(1,3);
168 vec_boa(2) = -transform(2,3);
170 vec_x(0) = transform(0,0); vec_x(1) = transform(1,0); vec_x(2) = transform(2,0);
171 vec_y(0) = transform(0,1); vec_y(1) = transform(1,1); vec_y(2) = transform(2,1);
172 vec_z(0) = transform(0,2); vec_z(1) = transform(1,2); vec_z(2) = transform(2,2);
175 vec_x(0), vec_x(1), vec_x(2), vec_boa.dot(vec_x),
176 vec_y(0), vec_y(1), vec_y(2), vec_boa.dot(vec_y),
177 vec_z(0), vec_z(1), vec_z(2), vec_boa.dot(vec_z),
183 void FootStepGenerator::getStepData(thormang3_walking_module_msgs::AddStepDataArray::Request::_step_data_array_type* step_data_array,
const thormang3_walking_module_msgs::StepData& ref_step_data,
int desired_step_type)
185 step_data_array->clear();
205 const thormang3_walking_module_msgs::StepData& ref_step_data,
206 const thormang3_foot_step_generator::Step2DArray::ConstPtr& request_step_2d)
208 step_data_array->clear();
210 thormang3_walking_module_msgs::StepData stp_data;
212 stp_data = ref_step_data;
215 stp_data.time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING_STARTING;
216 stp_data.time_data.start_time_delay_ratio_x = 0.0;
217 stp_data.time_data.start_time_delay_ratio_y = 0.0;
218 stp_data.time_data.start_time_delay_ratio_z = 0.0;
219 stp_data.time_data.start_time_delay_ratio_roll = 0.0;
220 stp_data.time_data.start_time_delay_ratio_pitch = 0.0;
221 stp_data.time_data.start_time_delay_ratio_yaw = 0.0;
222 stp_data.time_data.finish_time_advance_ratio_x = 0.0;
223 stp_data.time_data.finish_time_advance_ratio_y = 0.0;
224 stp_data.time_data.finish_time_advance_ratio_z = 0.0;
225 stp_data.time_data.finish_time_advance_ratio_roll = 0.0;
226 stp_data.time_data.finish_time_advance_ratio_pitch = 0.0;
227 stp_data.time_data.finish_time_advance_ratio_yaw = 0.0;
229 stp_data.position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::STANDING;
230 stp_data.position_data.foot_z_swap = 0;
231 stp_data.position_data.body_z_swap = 0;
233 step_data_array->push_back(stp_data);
235 for(
unsigned int stp_idx = 0; stp_idx < request_step_2d->footsteps_2d.size(); stp_idx++)
238 stp_data.time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING;
240 if(request_step_2d->footsteps_2d[stp_idx].moving_foot == thormang3_foot_step_generator::Step2D::LEFT_FOOT_SWING)
242 stp_data.position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
245 stp_data.position_data.left_foot_pose.x = request_step_2d->footsteps_2d[stp_idx].step2d.x;
246 stp_data.position_data.left_foot_pose.y = request_step_2d->footsteps_2d[stp_idx].step2d.y;
247 stp_data.position_data.left_foot_pose.yaw = request_step_2d->footsteps_2d[stp_idx].step2d.theta;
250 else if(request_step_2d->footsteps_2d[stp_idx].moving_foot == thormang3_foot_step_generator::Step2D::RIGHT_FOOT_SWING)
252 stp_data.position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
255 stp_data.position_data.right_foot_pose.x = request_step_2d->footsteps_2d[stp_idx].step2d.x;
256 stp_data.position_data.right_foot_pose.y = request_step_2d->footsteps_2d[stp_idx].step2d.y;
257 stp_data.position_data.right_foot_pose.yaw = request_step_2d->footsteps_2d[stp_idx].step2d.theta;
262 step_data_array->clear();
266 if(fabs(stp_data.position_data.right_foot_pose.yaw - stp_data.position_data.left_foot_pose.yaw) > M_PI)
268 stp_data.position_data.body_pose.yaw = 0.5*(stp_data.position_data.right_foot_pose.yaw + stp_data.position_data.left_foot_pose.yaw)
269 -
sign(0.5*(stp_data.position_data.right_foot_pose.yaw - stp_data.position_data.left_foot_pose.yaw))*M_PI;
273 stp_data.position_data.body_pose.yaw = 0.5*(stp_data.position_data.right_foot_pose.yaw
274 + stp_data.position_data.left_foot_pose.yaw);
277 step_data_array->push_back(stp_data);
282 stp_data.time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING_ENDING;
283 stp_data.time_data.start_time_delay_ratio_x = 0.0;
284 stp_data.time_data.start_time_delay_ratio_y = 0.0;
285 stp_data.time_data.start_time_delay_ratio_z = 0.0;
286 stp_data.time_data.start_time_delay_ratio_roll = 0.0;
287 stp_data.time_data.start_time_delay_ratio_pitch = 0.0;
288 stp_data.time_data.start_time_delay_ratio_yaw = 0.0;
289 stp_data.time_data.finish_time_advance_ratio_x = 0.0;
290 stp_data.time_data.finish_time_advance_ratio_y = 0.0;
291 stp_data.time_data.finish_time_advance_ratio_z = 0.0;
292 stp_data.time_data.finish_time_advance_ratio_roll = 0.0;
293 stp_data.time_data.finish_time_advance_ratio_pitch = 0.0;
294 stp_data.time_data.finish_time_advance_ratio_yaw = 0.0;
296 stp_data.position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::STANDING;
297 stp_data.position_data.foot_z_swap = 0;
298 stp_data.position_data.body_z_swap = 0;
300 step_data_array->push_back(stp_data);
307 thormang3_walking_module_msgs::StepData stp_data[2];
309 thormang3_walking_module_msgs::PoseXYZRPY poseGtoRF, poseGtoLF;
310 thormang3_walking_module_msgs::PoseXYZRPY poseLtoRF, poseLtoLF;
312 poseGtoRF = ref_step_data.position_data.right_foot_pose;
313 poseGtoLF = ref_step_data.position_data.left_foot_pose;
315 Eigen::MatrixXd mat_g_to_rf =
getTransformationXYZRPY(poseGtoRF.x, poseGtoRF.y, poseGtoRF.z, 0, 0, poseGtoRF.yaw);
316 Eigen::MatrixXd mat_g_to_lf =
getTransformationXYZRPY(poseGtoLF.x, poseGtoLF.y, poseGtoLF.z, 0, 0, poseGtoLF.yaw);
324 Eigen::MatrixXd mat_global_to_local, mat_local_to_global;
325 if(ref_step_data.position_data.moving_foot == thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING)
327 mat_global_to_local = mat_g_to_rf*mat_rf_to_local;
333 mat_global_to_local = mat_g_to_lf * mat_lf_to_local;;
338 Eigen::MatrixXd mat_local_to_rf = mat_local_to_global * mat_g_to_rf;
339 Eigen::MatrixXd mat_local_to_lf = mat_local_to_global * mat_g_to_lf;
354 stp_data[0] = ref_step_data;
355 stp_data[0].position_data.torso_yaw_angle_rad = 0.0*M_PI;
357 stp_data[0].position_data.right_foot_pose = poseLtoRF;
358 stp_data[0].position_data.left_foot_pose = poseLtoLF;
359 stp_data[0].time_data.start_time_delay_ratio_x = 0.0;
360 stp_data[0].time_data.start_time_delay_ratio_y = 0.0;
361 stp_data[0].time_data.start_time_delay_ratio_z = 0.0;
362 stp_data[0].time_data.start_time_delay_ratio_roll = 0.0;
363 stp_data[0].time_data.start_time_delay_ratio_pitch = 0.0;
364 stp_data[0].time_data.start_time_delay_ratio_yaw = 0.0;
365 stp_data[0].time_data.finish_time_advance_ratio_x = 0.0;
366 stp_data[0].time_data.finish_time_advance_ratio_y = 0.0;
367 stp_data[0].time_data.finish_time_advance_ratio_z = 0.0;
368 stp_data[0].time_data.finish_time_advance_ratio_roll = 0.0;
369 stp_data[0].time_data.finish_time_advance_ratio_pitch = 0.0;
370 stp_data[0].time_data.finish_time_advance_ratio_yaw = 0.0;
373 if(stp_data[0].time_data.walking_state != thormang3_walking_module_msgs::StepTimeData::IN_WALKING)
388 if(desired_step_type != previous_step_type)
390 stp_data[0].time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING;
391 if((fabs(poseLtoRF.yaw - poseLtoLF.yaw) > 0)
393 || (fabs(poseLtoRF.x - poseLtoLF.x) > 0))
396 if(ref_step_data.position_data.moving_foot == thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING)
398 stp_data[0].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
399 stp_data[0].position_data.right_foot_pose.x = stp_data[0].position_data.left_foot_pose.x;
400 stp_data[0].position_data.right_foot_pose.y = stp_data[0].position_data.left_foot_pose.y -
default_y_feet_offset_m_;
401 stp_data[0].position_data.right_foot_pose.yaw = stp_data[0].position_data.left_foot_pose.yaw;
405 stp_data[0].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
406 stp_data[0].position_data.left_foot_pose.x = stp_data[0].position_data.right_foot_pose.x;
407 stp_data[0].position_data.left_foot_pose.y = stp_data[0].position_data.right_foot_pose.y +
default_y_feet_offset_m_;
408 stp_data[0].position_data.left_foot_pose.yaw = stp_data[0].position_data.right_foot_pose.yaw;
504 stp_data[1] = stp_data[0];
511 if(stp_data[0].position_data.moving_foot == thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING)
514 stp_data[1].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
520 if(stp_data[0].position_data.moving_foot == thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING)
523 stp_data[1].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
617 thormang3_walking_module_msgs::StepData stp_data[
num_of_step_];
618 stp_data[0] = ref_step_data;
620 if(ref_step_data.time_data.walking_state == thormang3_walking_module_msgs::StepTimeData::IN_WALKING)
626 if(stp_data[0].position_data.moving_foot == thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING)
628 stp_data[0].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
629 stp_data[0].position_data.right_foot_pose.x = stp_data[0].position_data.left_foot_pose.x + (double)direction*
fb_step_length_m_;
633 stp_data[0].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
634 stp_data[0].position_data.left_foot_pose.x = stp_data[0].position_data.right_foot_pose.x + (double)direction*
fb_step_length_m_;
637 for(
int stp_idx = 1; stp_idx <
num_of_step_-2; stp_idx++)
639 stp_data[stp_idx] = stp_data[stp_idx-1];
641 if(stp_data[stp_idx].position_data.moving_foot == thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING)
643 stp_data[stp_idx].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
644 stp_data[stp_idx].position_data.right_foot_pose.x = stp_data[stp_idx].position_data.left_foot_pose.x + (double)direction*
fb_step_length_m_;
648 stp_data[stp_idx].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
649 stp_data[stp_idx].position_data.left_foot_pose.x = stp_data[stp_idx].position_data.right_foot_pose.x + (double)direction*
fb_step_length_m_;
653 stp_data[num_of_step_-2] = stp_data[num_of_step_-3];
654 stp_data[num_of_step_-2].time_data.abs_step_time +=
step_time_sec_;
655 if(stp_data[num_of_step_-2].position_data.moving_foot == thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING)
657 stp_data[num_of_step_-2].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
658 stp_data[num_of_step_-2].position_data.right_foot_pose.x = stp_data[num_of_step_-2].position_data.left_foot_pose.x;
662 stp_data[num_of_step_-2].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
663 stp_data[num_of_step_-2].position_data.left_foot_pose.x = stp_data[num_of_step_-2].position_data.right_foot_pose.x;
666 stp_data[num_of_step_-1] = stp_data[num_of_step_-2];
668 stp_data[num_of_step_-1].time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING_ENDING;
669 stp_data[num_of_step_-1].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::STANDING;
670 stp_data[num_of_step_-1].position_data.body_z_swap = 0;
674 stp_data[0].time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING_STARTING;
676 stp_data[0].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::STANDING;
677 stp_data[0].position_data.body_z_swap = 0;
679 for(
int stp_idx = 1; stp_idx <
num_of_step_-2; stp_idx++)
681 stp_data[stp_idx] = stp_data[stp_idx-1];
682 stp_data[stp_idx].time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING;
684 stp_data[stp_idx].time_data.dsp_ratio =
dsp_ratio_;
688 if(stp_data[stp_idx].position_data.moving_foot == thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING)
690 stp_data[stp_idx].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
691 stp_data[stp_idx].position_data.right_foot_pose.x = stp_data[stp_idx].position_data.left_foot_pose.x + (double)direction*
fb_step_length_m_;
695 stp_data[stp_idx].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
696 stp_data[stp_idx].position_data.left_foot_pose.x = stp_data[stp_idx].position_data.right_foot_pose.x + (double)direction*
fb_step_length_m_;
700 stp_data[num_of_step_-2] = stp_data[num_of_step_-3];
701 stp_data[num_of_step_-2].time_data.abs_step_time +=
step_time_sec_;
702 if(stp_data[num_of_step_-2].position_data.moving_foot == thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING)
704 stp_data[num_of_step_-2].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
705 stp_data[num_of_step_-2].position_data.right_foot_pose.x = stp_data[num_of_step_-2].position_data.left_foot_pose.x;
709 stp_data[num_of_step_-2].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
710 stp_data[num_of_step_-2].position_data.left_foot_pose.x = stp_data[num_of_step_-2].position_data.right_foot_pose.x;
713 stp_data[num_of_step_-1] = stp_data[num_of_step_-2];
715 stp_data[num_of_step_-1].time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING_ENDING;
716 stp_data[num_of_step_-1].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::STANDING;
717 stp_data[num_of_step_-1].position_data.body_z_swap = 0;
728 thormang3_walking_module_msgs::StepData stp_data[
num_of_step_];
729 stp_data[0] = ref_step_data;
731 if(ref_step_data.time_data.walking_state == thormang3_walking_module_msgs::StepTimeData::IN_WALKING)
737 if(stp_data[0].position_data.moving_foot == thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING)
739 stp_data[0].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
740 stp_data[0].position_data.right_foot_pose.y = stp_data[0].position_data.right_foot_pose.y + (double)direction*
rl_step_length_m_;
744 stp_data[0].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
745 stp_data[0].position_data.left_foot_pose.y = stp_data[0].position_data.left_foot_pose.y + (double)direction*
rl_step_length_m_;
748 for(
int stp_idx = 1; stp_idx <
num_of_step_-2; stp_idx++)
750 stp_data[stp_idx] = stp_data[stp_idx-1];
752 if(stp_data[stp_idx].position_data.moving_foot == thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING)
754 stp_data[stp_idx].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
755 stp_data[stp_idx].position_data.right_foot_pose.y = stp_data[stp_idx].position_data.right_foot_pose.y + (double)direction*
rl_step_length_m_;
759 stp_data[stp_idx].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
760 stp_data[stp_idx].position_data.left_foot_pose.y = stp_data[stp_idx].position_data.left_foot_pose.y + (double)direction*
rl_step_length_m_;
764 stp_data[num_of_step_-2] = stp_data[num_of_step_-3];
765 stp_data[num_of_step_-2].time_data.abs_step_time +=
step_time_sec_;
766 if(stp_data[num_of_step_-2].position_data.moving_foot == thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING)
768 stp_data[num_of_step_-2].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
769 stp_data[num_of_step_-2].position_data.right_foot_pose.y = stp_data[num_of_step_-2].position_data.left_foot_pose.y -
default_y_feet_offset_m_;
773 stp_data[num_of_step_-2].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
774 stp_data[num_of_step_-2].position_data.left_foot_pose.y = stp_data[num_of_step_-2].position_data.right_foot_pose.y +
default_y_feet_offset_m_;
777 stp_data[num_of_step_-1] = stp_data[num_of_step_-2];
779 stp_data[num_of_step_-1].time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING_ENDING;
780 stp_data[num_of_step_-1].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::STANDING;
781 stp_data[num_of_step_-1].position_data.body_z_swap = 0;
785 stp_data[0].time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING_STARTING;
787 stp_data[0].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::STANDING;
788 stp_data[0].position_data.body_z_swap = 0;
791 stp_data[1] = stp_data[0];
792 stp_data[1].time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING;
800 stp_data[1].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
801 stp_data[1].position_data.right_foot_pose.y = stp_data[1].position_data.right_foot_pose.y + (double)direction*
rl_step_length_m_;
805 stp_data[1].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
806 stp_data[1].position_data.left_foot_pose.y = stp_data[1].position_data.left_foot_pose.y + (double)direction*
rl_step_length_m_;
809 for(
int stp_idx = 2; stp_idx <
num_of_step_-2; stp_idx++)
811 stp_data[stp_idx] = stp_data[stp_idx-1];
813 if(stp_data[stp_idx].position_data.moving_foot == thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING)
815 stp_data[stp_idx].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
816 stp_data[stp_idx].position_data.right_foot_pose.y = stp_data[stp_idx].position_data.right_foot_pose.y + (double)direction*
rl_step_length_m_;
820 stp_data[stp_idx].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
821 stp_data[stp_idx].position_data.left_foot_pose.y = stp_data[stp_idx].position_data.left_foot_pose.y + (double)direction*
rl_step_length_m_;
825 stp_data[num_of_step_-2] = stp_data[num_of_step_-3];
826 stp_data[num_of_step_-2].time_data.abs_step_time +=
step_time_sec_;
827 if(stp_data[num_of_step_-2].position_data.moving_foot == thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING)
829 stp_data[num_of_step_-2].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
830 stp_data[num_of_step_-2].position_data.right_foot_pose.y = stp_data[num_of_step_-2].position_data.left_foot_pose.y -
default_y_feet_offset_m_;
834 stp_data[num_of_step_-2].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
835 stp_data[num_of_step_-2].position_data.left_foot_pose.y = stp_data[num_of_step_-2].position_data.right_foot_pose.y +
default_y_feet_offset_m_;
838 stp_data[num_of_step_-1] = stp_data[num_of_step_-2];
840 stp_data[num_of_step_-1].time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING_ENDING;
841 stp_data[num_of_step_-1].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::STANDING;
842 stp_data[num_of_step_-1].position_data.body_z_swap = 0;
854 thormang3_walking_module_msgs::StepData stp_data[
num_of_step_];
855 stp_data[0] = ref_step_data;
856 if(ref_step_data.time_data.walking_state == thormang3_walking_module_msgs::StepTimeData::IN_WALKING)
858 stp_data[0].time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING;
864 if(stp_data[0].position_data.moving_foot == thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING)
866 stp_data[0].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
867 stp_data[0].position_data.right_foot_pose.yaw = stp_data[0].position_data.right_foot_pose.yaw + (double)direction*
rotate_step_angle_rad_;
869 if(fabs(stp_data[0].position_data.right_foot_pose.yaw) > 2.0*M_PI)
870 stp_data[0].position_data.right_foot_pose.yaw += -2.0*M_PI*
sign(stp_data[0].position_data.right_foot_pose.yaw);
872 stp_data[0].position_data.right_foot_pose.x = 0.5*
default_y_feet_offset_m_*sin(stp_data[0].position_data.right_foot_pose.yaw);
873 stp_data[0].position_data.right_foot_pose.y = -0.5*
default_y_feet_offset_m_*cos(stp_data[0].position_data.right_foot_pose.yaw);
877 stp_data[0].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
878 stp_data[0].position_data.left_foot_pose.yaw = stp_data[0].position_data.left_foot_pose.yaw + (double)direction*
rotate_step_angle_rad_;
880 if(fabs(stp_data[0].position_data.left_foot_pose.yaw) > 2.0*M_PI)
881 stp_data[0].position_data.left_foot_pose.yaw += -2.0*M_PI*
sign(stp_data[0].position_data.left_foot_pose.yaw);
883 stp_data[0].position_data.left_foot_pose.x = -0.5*
default_y_feet_offset_m_*sin(stp_data[0].position_data.left_foot_pose.yaw);
884 stp_data[0].position_data.left_foot_pose.y = 0.5*
default_y_feet_offset_m_*cos(stp_data[0].position_data.left_foot_pose.yaw);
888 for(
int stp_idx = 1; stp_idx <
num_of_step_-2; stp_idx++)
890 stp_data[stp_idx] = stp_data[stp_idx-1];
892 if(stp_data[stp_idx].position_data.moving_foot == thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING)
894 stp_data[stp_idx].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
895 stp_data[stp_idx].position_data.right_foot_pose.yaw = stp_data[stp_idx].position_data.right_foot_pose.yaw + (double)direction*
rotate_step_angle_rad_;
897 if(fabs(stp_data[stp_idx].position_data.right_foot_pose.yaw) > 2.0*M_PI)
898 stp_data[stp_idx].position_data.right_foot_pose.yaw += -2.0*M_PI*
sign(stp_data[stp_idx].position_data.right_foot_pose.yaw);
900 stp_data[stp_idx].position_data.right_foot_pose.x = 0.5*
default_y_feet_offset_m_*sin(stp_data[stp_idx].position_data.right_foot_pose.yaw);
901 stp_data[stp_idx].position_data.right_foot_pose.y = -0.5*
default_y_feet_offset_m_*cos(stp_data[stp_idx].position_data.right_foot_pose.yaw);
905 stp_data[stp_idx].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
906 stp_data[stp_idx].position_data.left_foot_pose.yaw = stp_data[stp_idx].position_data.left_foot_pose.yaw + (double)direction*
rotate_step_angle_rad_;
908 if(fabs(stp_data[stp_idx].position_data.left_foot_pose.yaw) > 2.0*M_PI)
909 stp_data[stp_idx].position_data.left_foot_pose.yaw += -2.0*M_PI*
sign(stp_data[stp_idx].position_data.left_foot_pose.yaw);
911 stp_data[stp_idx].position_data.left_foot_pose.x = -0.5*
default_y_feet_offset_m_*sin(stp_data[stp_idx].position_data.left_foot_pose.yaw);
912 stp_data[stp_idx].position_data.left_foot_pose.y = 0.5*
default_y_feet_offset_m_*cos(stp_data[stp_idx].position_data.left_foot_pose.yaw);
916 if(fabs(stp_data[stp_idx].position_data.right_foot_pose.yaw) > M_PI)
917 stp_data[stp_idx].position_data.right_foot_pose.yaw -= 2.0*M_PI*
sign(stp_data[stp_idx].position_data.right_foot_pose.yaw);
918 if(fabs(stp_data[stp_idx].position_data.left_foot_pose.yaw) > M_PI)
919 stp_data[stp_idx].position_data.left_foot_pose.yaw -= 2.0*M_PI*
sign(stp_data[stp_idx].position_data.left_foot_pose.yaw);
922 stp_data[num_of_step_-2] = stp_data[num_of_step_-3];
923 stp_data[num_of_step_-2].time_data.abs_step_time +=
step_time_sec_;
924 if(stp_data[num_of_step_-2].position_data.moving_foot == thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING)
926 stp_data[num_of_step_-2].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
927 stp_data[num_of_step_-2].position_data.right_foot_pose.yaw = stp_data[num_of_step_-2].position_data.left_foot_pose.yaw;
928 stp_data[num_of_step_-2].position_data.right_foot_pose.x = 0.5*
default_y_feet_offset_m_*sin(stp_data[num_of_step_-2].position_data.left_foot_pose.yaw);
929 stp_data[num_of_step_-2].position_data.right_foot_pose.y = -0.5*
default_y_feet_offset_m_*cos(stp_data[num_of_step_-2].position_data.left_foot_pose.yaw);
934 stp_data[num_of_step_-2].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
935 stp_data[num_of_step_-2].position_data.left_foot_pose.yaw = stp_data[num_of_step_-2].position_data.right_foot_pose.yaw;
936 stp_data[num_of_step_-2].position_data.left_foot_pose.x = -0.5*
default_y_feet_offset_m_*sin(stp_data[num_of_step_-2].position_data.right_foot_pose.yaw);
937 stp_data[num_of_step_-2].position_data.left_foot_pose.y = 0.5*
default_y_feet_offset_m_*cos(stp_data[num_of_step_-2].position_data.right_foot_pose.yaw);
940 stp_data[num_of_step_-1] = stp_data[num_of_step_-2];
942 stp_data[num_of_step_-1].time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING_ENDING;
943 stp_data[num_of_step_-1].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::STANDING;
944 stp_data[num_of_step_-1].position_data.body_z_swap = 0;
948 stp_data[0].time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING_STARTING;
950 stp_data[0].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::STANDING;
951 stp_data[0].position_data.body_z_swap = 0;
952 stp_data[0].position_data.foot_z_swap = 0;
955 stp_data[1] = stp_data[0];
956 stp_data[1].time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING;
964 stp_data[1].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
965 stp_data[1].position_data.right_foot_pose.yaw = stp_data[1].position_data.right_foot_pose.yaw + (double)direction*
rotate_step_angle_rad_;
967 if(fabs(stp_data[1].position_data.right_foot_pose.yaw) > 2.0*M_PI)
968 stp_data[1].position_data.right_foot_pose.yaw += -2.0*M_PI*
sign(stp_data[1].position_data.right_foot_pose.yaw);
970 stp_data[1].position_data.right_foot_pose.x = 0.5*
default_y_feet_offset_m_*sin(stp_data[1].position_data.left_foot_pose.yaw);
971 stp_data[1].position_data.right_foot_pose.y = -0.5*
default_y_feet_offset_m_*cos(stp_data[1].position_data.left_foot_pose.yaw);
975 stp_data[1].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
976 stp_data[1].position_data.left_foot_pose.yaw = stp_data[1].position_data.left_foot_pose.yaw + (double)direction*
rotate_step_angle_rad_;
978 if(fabs(stp_data[1].position_data.left_foot_pose.yaw) > 2.0*M_PI)
979 stp_data[1].position_data.left_foot_pose.yaw += -2.0*M_PI*
sign(stp_data[1].position_data.left_foot_pose.yaw);
982 stp_data[1].position_data.left_foot_pose.x = -0.5*
default_y_feet_offset_m_*sin(stp_data[1].position_data.left_foot_pose.yaw);
983 stp_data[1].position_data.left_foot_pose.y = 0.5*
default_y_feet_offset_m_*cos(stp_data[1].position_data.left_foot_pose.yaw);
986 for(
int stp_idx = 2; stp_idx <
num_of_step_-2; stp_idx++)
988 stp_data[stp_idx] = stp_data[stp_idx-1];
990 if(stp_data[stp_idx].position_data.moving_foot == thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING)
992 stp_data[stp_idx].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
993 stp_data[stp_idx].position_data.right_foot_pose.yaw = stp_data[stp_idx].position_data.right_foot_pose.yaw + (double)direction*
rotate_step_angle_rad_;
995 if(fabs(stp_data[stp_idx].position_data.right_foot_pose.yaw) > 2.0*M_PI)
996 stp_data[stp_idx].position_data.right_foot_pose.yaw += -2.0*M_PI*
sign(stp_data[stp_idx].position_data.right_foot_pose.yaw);
998 stp_data[stp_idx].position_data.right_foot_pose.x = 0.5*
default_y_feet_offset_m_*sin(stp_data[stp_idx].position_data.right_foot_pose.yaw);
999 stp_data[stp_idx].position_data.right_foot_pose.y = -0.5*
default_y_feet_offset_m_*cos(stp_data[stp_idx].position_data.right_foot_pose.yaw);
1003 stp_data[stp_idx].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
1004 stp_data[stp_idx].position_data.left_foot_pose.yaw = stp_data[stp_idx].position_data.left_foot_pose.yaw + (double)direction*
rotate_step_angle_rad_;
1006 if(fabs(stp_data[stp_idx].position_data.left_foot_pose.yaw) > 2.0*M_PI)
1007 stp_data[stp_idx].position_data.left_foot_pose.yaw += -2.0*M_PI*
sign(stp_data[stp_idx].position_data.left_foot_pose.yaw);
1009 stp_data[stp_idx].position_data.left_foot_pose.x = -0.5*
default_y_feet_offset_m_*sin(stp_data[stp_idx].position_data.left_foot_pose.yaw);
1010 stp_data[stp_idx].position_data.left_foot_pose.y = 0.5*
default_y_feet_offset_m_*cos(stp_data[stp_idx].position_data.left_foot_pose.yaw);
1014 if(fabs(stp_data[stp_idx].position_data.right_foot_pose.yaw) > M_PI)
1015 stp_data[stp_idx].position_data.right_foot_pose.yaw -= 2.0*M_PI*
sign(stp_data[stp_idx].position_data.right_foot_pose.yaw);
1016 if(fabs(stp_data[stp_idx].position_data.left_foot_pose.yaw) > M_PI)
1017 stp_data[stp_idx].position_data.left_foot_pose.yaw -= 2.0*M_PI*
sign(stp_data[stp_idx].position_data.left_foot_pose.yaw);
1020 stp_data[num_of_step_-2] = stp_data[num_of_step_-3];
1021 stp_data[num_of_step_-2].time_data.abs_step_time +=
step_time_sec_;
1022 if(stp_data[num_of_step_-2].position_data.moving_foot == thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING)
1024 stp_data[num_of_step_-2].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
1025 stp_data[num_of_step_-2].position_data.right_foot_pose.yaw = stp_data[num_of_step_-2].position_data.left_foot_pose.yaw;
1026 stp_data[num_of_step_-2].position_data.right_foot_pose.x = 0.5*
default_y_feet_offset_m_*sin(stp_data[num_of_step_-2].position_data.left_foot_pose.yaw);
1027 stp_data[num_of_step_-2].position_data.right_foot_pose.y = -0.5*
default_y_feet_offset_m_*cos(stp_data[num_of_step_-2].position_data.left_foot_pose.yaw);
1032 stp_data[num_of_step_-2].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
1033 stp_data[num_of_step_-2].position_data.left_foot_pose.yaw = stp_data[num_of_step_-2].position_data.right_foot_pose.yaw;
1034 stp_data[num_of_step_-2].position_data.left_foot_pose.x = -0.5*
default_y_feet_offset_m_*sin(stp_data[num_of_step_-2].position_data.right_foot_pose.yaw);
1035 stp_data[num_of_step_-2].position_data.left_foot_pose.y = 0.5*
default_y_feet_offset_m_*cos(stp_data[num_of_step_-2].position_data.right_foot_pose.yaw);
1038 stp_data[num_of_step_-1] = stp_data[num_of_step_-2];
1040 stp_data[num_of_step_-1].time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING_ENDING;
1041 stp_data[num_of_step_-1].position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::STANDING;
1042 stp_data[num_of_step_-1].position_data.body_z_swap = 0;
1046 for(
int stp_idx = 0; stp_idx <
num_of_step_; stp_idx++)
1055 thormang3_walking_module_msgs::StepData stp_data;
1056 stp_data = ref_step_data;
1057 stp_data.time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING_ENDING;
1059 stp_data.position_data.body_z_swap = 0;
1060 stp_data.position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::STANDING;
1067 const thormang3_walking_module_msgs::StepData& ref_step_data)
1069 thormang3_walking_module_msgs::StepData step_data_msg;
1071 double kick_height = 0.08;
1072 double kick_far = 0.18;
1073 double kick_pitch = 15.0*M_PI/180.0;
1076 double kick_time = 0.8;
1078 step_data_msg = ref_step_data;
1080 step_data_array->clear();
1084 step_data_msg.time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING_STARTING;
1085 step_data_msg.time_data.abs_step_time += kick_time*1.8;
1086 step_data_msg.time_data.dsp_ratio = 1.0;
1088 step_data_msg.position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::STANDING;
1089 step_data_msg.position_data.foot_z_swap = 0;
1090 step_data_msg.position_data.body_z_swap = 0;
1095 step_data_msg.time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING;
1096 step_data_msg.time_data.abs_step_time += kick_time*1.0;
1097 step_data_msg.time_data.dsp_ratio = 0.0;
1099 step_data_msg.position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
1100 step_data_msg.position_data.right_foot_pose.x = -0.8*kick_far;
1101 step_data_msg.position_data.right_foot_pose.z += kick_height;
1102 step_data_msg.position_data.right_foot_pose.pitch = kick_pitch;
1103 step_data_msg.position_data.foot_z_swap = 0.05;
1108 step_data_msg.time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING;
1109 step_data_msg.time_data.abs_step_time += kick_time*1.2;
1110 step_data_msg.time_data.dsp_ratio = 0.0;
1112 step_data_msg.position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
1113 step_data_msg.position_data.right_foot_pose.x = 1.5*kick_far;
1114 step_data_msg.position_data.right_foot_pose.pitch = -kick_pitch;
1115 step_data_msg.position_data.foot_z_swap = 0.0;
1120 step_data_msg.time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING;
1121 step_data_msg.time_data.abs_step_time += kick_time*1.2;
1122 step_data_msg.time_data.dsp_ratio = 0.0;
1124 step_data_msg.position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::RIGHT_FOOT_SWING;
1125 step_data_msg.position_data.right_foot_pose.x = 0;
1126 step_data_msg.position_data.right_foot_pose.z -= kick_height;
1127 step_data_msg.position_data.right_foot_pose.pitch = 0;
1128 step_data_msg.position_data.foot_z_swap = 0.05;
1133 step_data_msg.time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING_ENDING;
1134 step_data_msg.time_data.abs_step_time += kick_time*1.8;
1135 step_data_msg.time_data.dsp_ratio = 0.0;
1137 step_data_msg.position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::STANDING;
1140 for(
unsigned int stp_idx = 0; stp_idx <
step_data_array_.size(); stp_idx++)
1148 const thormang3_walking_module_msgs::StepData& ref_step_data)
1150 thormang3_walking_module_msgs::StepData step_data_msg;
1152 double kick_height = 0.08;
1153 double kick_far = 0.18;
1154 double kick_pitch = 15.0*M_PI/180.0;
1157 double kick_time = 0.8;
1159 step_data_msg = ref_step_data;
1161 step_data_array->clear();
1165 step_data_msg.time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING_STARTING;
1166 step_data_msg.time_data.abs_step_time += kick_time*1.8;
1167 step_data_msg.time_data.dsp_ratio = 1.0;
1169 step_data_msg.position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::STANDING;
1170 step_data_msg.position_data.foot_z_swap = 0;
1171 step_data_msg.position_data.body_z_swap = 0;
1176 step_data_msg.time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING;
1177 step_data_msg.time_data.abs_step_time += kick_time*1.0;
1178 step_data_msg.time_data.dsp_ratio = 0.0;
1180 step_data_msg.position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
1181 step_data_msg.position_data.left_foot_pose.x = -0.8*kick_far;
1182 step_data_msg.position_data.left_foot_pose.z += kick_height;
1183 step_data_msg.position_data.left_foot_pose.pitch = kick_pitch;
1184 step_data_msg.position_data.foot_z_swap = 0.05;
1189 step_data_msg.time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING;
1190 step_data_msg.time_data.abs_step_time += kick_time*1.2;
1191 step_data_msg.time_data.dsp_ratio = 0.0;
1193 step_data_msg.position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
1194 step_data_msg.position_data.left_foot_pose.x = 1.5*kick_far;
1195 step_data_msg.position_data.left_foot_pose.pitch = -kick_pitch;
1196 step_data_msg.position_data.foot_z_swap = 0.0;
1201 step_data_msg.time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING;
1202 step_data_msg.time_data.abs_step_time += kick_time*1.2;
1203 step_data_msg.time_data.dsp_ratio = 0.0;
1205 step_data_msg.position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::LEFT_FOOT_SWING;
1206 step_data_msg.position_data.left_foot_pose.x = 0;
1207 step_data_msg.position_data.left_foot_pose.z -= kick_height;
1208 step_data_msg.position_data.left_foot_pose.pitch = 0;
1209 step_data_msg.position_data.foot_z_swap = 0.05;
1214 step_data_msg.time_data.walking_state = thormang3_walking_module_msgs::StepTimeData::IN_WALKING_ENDING;
1215 step_data_msg.time_data.abs_step_time += kick_time*1.8;
1216 step_data_msg.time_data.dsp_ratio = 0.0;
1218 step_data_msg.position_data.moving_foot = thormang3_walking_module_msgs::StepPositionData::STANDING;
1221 for(
unsigned int stp_idx = 0; stp_idx <
step_data_array_.size(); stp_idx++)