void unigripper_motoman_plant_t::update_phys_configs(config_list_t& configs, unsigned& index) const { bool update = true; VectorNd tmpVec = VectorNd::Zero(3); VectorNd pos; Matrix3d orient; Quaternion quat; double qw,qx,qy,qz; for(unsigned i=0;i<simple_rigid_body_names.size();i++) { unsigned int id = body_ids[i];//model.GetBodyId(simple_rigid_body_names[i].c_str()); pos = CalcBodyToBaseCoordinates(model,Q,id,tmpVec,update); update = false; orient = CalcBodyWorldOrientation(model,Q,id,update); quat = Quaternion::fromMatrix(orient); augment_config_list(configs,index); configs[index].first = config_names[i]; configs[index].second.set_position(pos[0],pos[1],pos[2]); configs[index].second.set_orientation(quat.x(),quat.y(),quat.z(),quat.w()); if(std::isnan(quat.w()) || std::isnan(quat.x()) || std::isnan(quat.y()) || std::isnan(quat.z()) ) { uni_convert_matrix_to_quaternion(orient,qx,qy,qz,qw); configs[index].second.set_orientation(qx,qy,qz,qw); } index++; } }
void two_link_acrobot_t::update_phys_configs(config_list_t& configs, unsigned& index) const { augment_config_list(configs,index); configs[index].first = config_names[2]; configs[index].second.set_position((length / 2.0) * cos(_theta1 - M_PI / 2), (length / 2.0) * sin(_theta1 - M_PI / 2), 1.5); configs[index].second.set_orientation(0, 0, sin((_theta1 - M_PI / 2) / 2.0), cos((_theta1 - M_PI / 2) / 2.0)); index++; augment_config_list(configs,index); configs[index].first = config_names[1]; configs[index].second.set_position((length) * cos(_theta1 - M_PI / 2)+(length / 2.0) * cos(_theta1 + _theta2 - M_PI / 2), (length) * sin(_theta1 - M_PI / 2)+(length / 2.0) * sin(_theta1 + _theta2 - M_PI / 2), 1.5); configs[index].second.set_orientation(0, 0, sin((_theta1 + _theta2 - M_PI / 2) / 2.0), cos((_theta1 + _theta2 - M_PI / 2) / 2.0)); index++; augment_config_list(configs,index); configs[index].first = config_names[0]; configs[index].second.set_position((length) * cos(_theta1 - M_PI / 2)+(length) * cos(_theta1 + _theta2 - M_PI / 2), (length) * sin(_theta1 - M_PI / 2)+(length) * sin(_theta1 + _theta2 - M_PI / 2), 1.5); configs[index].second.zero(); index++; }