Beispiel #1
0
void CQDlgTextures::_setTextureConfig(int index)
{
	QLineEdit* ww[6]={ui->qqX,ui->qqY,ui->qqZ,ui->qqAlpha,ui->qqBeta,ui->qqGamma};
	if (!isLinkedDataValid())
		return;
	CTextureProperty* tp=NULL;
	CShape* shape=NULL;
	if (_identification[1]==0)
	{ // texture is linked to a shape
		shape=App::ct->objCont->getShape(_identification[2]);
		tp=((CGeometric*)shape->geomData->geomInfo)->getTextureProperty();
		bool ok;
		float newVal=ww[index]->text().toFloat(&ok);
		if ((tp!=NULL)&&ok)
		{
			C7Vector tr(tp->getTextureRelativeConfig());
			if (index<3)
			{ // position
				newVal=tt::getLimitedFloat(-100.0f,100.0f,newVal*gv::userToMeter);
				tr.X(index)=newVal;
			}
			else
			{ // orientation
				C3Vector euler(tr.Q.getEulerAngles());
				euler(index-3)=newVal*gv::userToRad;
				tr.Q.setEulerAngles(euler);
			}
			tp->setTextureRelativeConfig(tr);
			App::ct->undoBufferContainer->announceChange(); // **************** UNDO THINGY ****************
		}
	}
}
void MasterController::slaveOdometryCallback(const nav_msgs::Odometry::ConstPtr& msg)
{
    // Pose slave
    Eigen::Matrix<double,3,1> euler=Eigen::Quaterniond(msg->pose.pose.orientation.w,
                                    msg->pose.pose.orientation.x,
                                    msg->pose.pose.orientation.y,
                                    msg->pose.pose.orientation.z).matrix().eulerAngles(2, 1, 0);
    double yaw = euler(0,0);
    double pitch = euler(1,0);
    double roll = euler(2,0);
    if(!init_slave_readings)
    {
        previous_pose_slave << msg->pose.pose.position.x,
                            msg->pose.pose.position.y,
                            msg->pose.pose.position.z,
                            roll-previous_pose_slave(3,0),
                            pitch-previous_pose_slave(4,0),
                            yaw; // should be relative
        // std::cout << "previous_pose_slave:" << previous_pose_slave(5,0) << " yaw:" << yaw << std::endl;
        // std::cout << "yaw:" << yaw << " yaw previous:" << yaw_slave_previous << std::endl;
        yaw_slave_previous=yaw;
        init_slave_readings=true;
        return;
    }
    else
    {
        // lastPositionUpdate = ros::Time::now().toSec();
        current_pose_slave << msg->pose.pose.position.x,
                           msg->pose.pose.position.y,
                           msg->pose.pose.position.z,
                           roll-previous_pose_slave(3,0),
                           pitch-previous_pose_slave(4,0),
                           yaw_slave_previous; // should be relative
        // std::cout << "current_pose_slave:" << current_pose_slave(5,0) << " yaw_slave_previous:" << yaw_slave_previous << std::endl;
        // std::cout << current_pose_slave(0,0) << std::endl ;
        // std::cout << current_pose_slave(1,0) << std::endl ;
        // std::cout << current_pose_slave(2,0) << std::endl ;
        // std::cout << current_pose_slave(3,0) << std::endl ;
        // std::cout << current_pose_slave(4,0) << std::endl ;
        // std::cout << current_pose_slave(5,0) << std::endl ;
        // double test = current_pose_slave(5,0) ;
        // std::cout << "yaw:" << yaw << " yaw previous:" << yaw_slave_previous << std::endl;
        // std::cout << "current_pose_slave:" << test << " previous_pose_slave previous:" << previous_pose_slave(5,0) << std::endl;
        // std::cout << "yaw TO DEG:" << yaw*RAD_TO_DEG << " yaw previous TO DEG:" << yaw_slave_previous * RAD_TO_DEG << std::endl;
        // std::cout << "current_pose_slave TO DEG (((:" << current_pose_slave(5,0)*RAD_TO_DEG << " previous_pose_slave previous TO DEG )))):" << previous_pose_slave(5,0) * RAD_TO_DEG << std::endl;
        yaw_slave_previous=yaw;
    }
    current_velocity_slave << msg->twist.twist.linear.x,
                           msg->twist.twist.linear.y,
                           msg->twist.twist.linear.z,
                           msg->twist.twist.angular.x,
                           msg->twist.twist.angular.y,
                           msg->twist.twist.angular.z;
    slave_new_readings=true;
    feedback();
    previous_pose_slave=current_pose_slave;
}
void
FixedwingEstimator::print_status()
{
	math::Quaternion q(_ekf->states[0], _ekf->states[1], _ekf->states[2], _ekf->states[3]);
	math::Matrix<3, 3> R = q.to_dcm();
	math::Vector<3> euler = R.to_euler();

	printf("attitude: roll: %8.4f, pitch %8.4f, yaw: %8.4f degrees\n",
	       (double)math::degrees(euler(0)), (double)math::degrees(euler(1)), (double)math::degrees(euler(2)));

	// State vector:
	// 0-3: quaternions (q0, q1, q2, q3)
	// 4-6: Velocity - m/sec (North, East, Down)
	// 7-9: Position - m (North, East, Down)
	// 10-12: Delta Angle bias - rad (X,Y,Z)
	// 13:    Accelerometer offset
	// 14-15: Wind Vector  - m/sec (North,East)
	// 16-18: Earth Magnetic Field Vector - gauss (North, East, Down)
	// 19-21: Body Magnetic Field Vector - gauss (X,Y,Z)

	printf("dtIMU: %8.6f IMUmsec: %d\n", (double)_ekf->dtIMU, (int)IMUmsec);
	printf("baro alt: %8.4f GPS alt: %8.4f\n", (double)_baro.altitude, (double)(_gps.alt / 1e3f));
	printf("ref alt: %8.4f baro ref offset: %8.4f baro GPS offset: %8.4f\n", (double)_baro_ref, (double)_baro_ref_offset, (double)_baro_gps_offset);
	printf("dvel: %8.6f %8.6f %8.6f accel: %8.6f %8.6f %8.6f\n", (double)_ekf->dVelIMU.x, (double)_ekf->dVelIMU.y, (double)_ekf->dVelIMU.z, (double)_ekf->accel.x, (double)_ekf->accel.y, (double)_ekf->accel.z);
	printf("dang: %8.4f %8.4f %8.4f dang corr: %8.4f %8.4f %8.4f\n" , (double)_ekf->dAngIMU.x, (double)_ekf->dAngIMU.y, (double)_ekf->dAngIMU.z, (double)_ekf->correctedDelAng.x, (double)_ekf->correctedDelAng.y, (double)_ekf->correctedDelAng.z);
	printf("states (quat)        [0-3]: %8.4f, %8.4f, %8.4f, %8.4f\n", (double)_ekf->states[0], (double)_ekf->states[1], (double)_ekf->states[2], (double)_ekf->states[3]);
	printf("states (vel m/s)     [4-6]: %8.4f, %8.4f, %8.4f\n", (double)_ekf->states[4], (double)_ekf->states[5], (double)_ekf->states[6]);
	printf("states (pos m)      [7-9]: %8.4f, %8.4f, %8.4f\n", (double)_ekf->states[7], (double)_ekf->states[8], (double)_ekf->states[9]);
	printf("states (delta ang) [10-12]: %8.4f, %8.4f, %8.4f\n", (double)_ekf->states[10], (double)_ekf->states[11], (double)_ekf->states[12]);

	if (n_states == 23) {
		printf("states (accel offs)   [13]: %8.4f\n", (double)_ekf->states[13]);
		printf("states (wind)      [14-15]: %8.4f, %8.4f\n", (double)_ekf->states[14], (double)_ekf->states[15]);
		printf("states (earth mag) [16-18]: %8.4f, %8.4f, %8.4f\n", (double)_ekf->states[16], (double)_ekf->states[17], (double)_ekf->states[18]);
		printf("states (body mag)  [19-21]: %8.4f, %8.4f, %8.4f\n", (double)_ekf->states[19], (double)_ekf->states[20], (double)_ekf->states[21]);
		printf("states (terrain)      [22]: %8.4f\n", (double)_ekf->states[22]);

	} else {
		printf("states (wind)      [13-14]: %8.4f, %8.4f\n", (double)_ekf->states[13], (double)_ekf->states[14]);
		printf("states (earth mag) [15-17]: %8.4f, %8.4f, %8.4f\n", (double)_ekf->states[15], (double)_ekf->states[16], (double)_ekf->states[17]);
		printf("states (body mag)  [18-20]: %8.4f, %8.4f, %8.4f\n", (double)_ekf->states[18], (double)_ekf->states[19], (double)_ekf->states[20]);
	}
	printf("states: %s %s %s %s %s %s %s %s %s %s\n",
		       (_ekf->statesInitialised) ? "INITIALIZED" : "NON_INIT",
		       (_ekf->onGround) ? "ON_GROUND" : "AIRBORNE",
		       (_ekf->fuseVelData) ? "FUSE_VEL" : "INH_VEL",
		       (_ekf->fusePosData) ? "FUSE_POS" : "INH_POS",
		       (_ekf->fuseHgtData) ? "FUSE_HGT" : "INH_HGT",
		       (_ekf->fuseMagData) ? "FUSE_MAG" : "INH_MAG",
		       (_ekf->fuseVtasData) ? "FUSE_VTAS" : "INH_VTAS",
		       (_ekf->useAirspeed) ? "USE_AIRSPD" : "IGN_AIRSPD",
		       (_ekf->useCompass) ? "USE_COMPASS" : "IGN_COMPASS",
		       (_ekf->staticMode) ? "STATIC_MODE" : "DYNAMIC_MODE");
}
C7Vector CQDlgTranslations::_getNewTransf(const C7Vector& transf,float newValueInUserUnit,bool orientation,int index)
{
	C7Vector retVal(transf);
	if (orientation)
	{
		C3Vector euler(retVal.Q.getEulerAngles());
		euler(index)=newValueInUserUnit*gv::userToRad;
		retVal.Q.setEulerAngles(euler(0),euler(1),euler(2));
	}
	else
		retVal.X(index)=newValueInUserUnit*gv::userToMeter;
	return(retVal);
}
// SLAVE MEASUREMENTS
void SlaveController::slaveOdometryCallback(const nav_msgs::Odometry::ConstPtr& msg)
{
    // Pose slave
    Eigen::Matrix<double,3,1> euler=Eigen::Quaterniond(msg->pose.pose.orientation.w,
                                                       msg->pose.pose.orientation.x,
                                                       msg->pose.pose.orientation.y,
                                                       msg->pose.pose.orientation.z).matrix().eulerAngles(2, 1, 0);
    double yaw = euler(0,0);
    double pitch = euler(1,0);
    double roll = euler(2,0);

    if(!init_slave_readings)
    {
        previous_pose_slave << msg->pose.pose.position.x,
                msg->pose.pose.position.y,
                msg->pose.pose.position.z,
                roll-previous_pose_slave(3,0),
                pitch-previous_pose_slave(4,0),
                yaw; // should be relative
        //std::cout << "yaw:" << yaw << " yaw previous:" << yaw_slave_previous << std::endl;

        yaw_slave_previous=yaw;
        init_slave_readings=true;
        return;
    }
    else
    {
        current_pose_slave << msg->pose.pose.position.x,
                msg->pose.pose.position.y,
                msg->pose.pose.position.z,
                roll-previous_pose_slave(3,0),
                pitch-previous_pose_slave(4,0),
                yaw-yaw_slave_previous; // should be relative
        //std::cout << "yaw:" << yaw << " yaw previous:" << yaw_slave_previous << std::endl;

        yaw_slave_previous=yaw;
    }

    current_velocity_slave << msg->twist.twist.linear.x,
            msg->twist.twist.linear.y,
            msg->twist.twist.linear.z,
            msg->twist.twist.angular.x,
            msg->twist.twist.angular.y,
            msg->twist.twist.angular.z;

    slave_new_readings=true;
    feedback();
    previous_pose_slave=current_pose_slave;

}
Beispiel #6
0
void Ekf::printStates()
{
	static int counter = 0;

	if (counter % 50 == 0) {
		printf("quaternion\n");

		for (int i = 0; i < 4; i++) {
			printf("quat %i %.5f\n", i, (double)_state.quat_nominal(i));
		}

		matrix::Euler<float> euler(_state.quat_nominal);
		printf("yaw pitch roll %.5f %.5f %.5f\n", (double)euler(2), (double)euler(1), (double)euler(0));

		printf("vel\n");

		for (int i = 0; i < 3; i++) {
			printf("v %i %.5f\n", i, (double)_state.vel(i));
		}

		printf("pos\n");

		for (int i = 0; i < 3; i++) {
			printf("p %i %.5f\n", i, (double)_state.pos(i));
		}

		printf("gyro_scale\n");

		for (int i = 0; i < 3; i++) {
			printf("gs %i %.5f\n", i, (double)_state.gyro_scale(i));
		}

		printf("mag earth\n");

		for (int i = 0; i < 3; i++) {
			printf("mI %i %.5f\n", i, (double)_state.mag_I(i));
		}

		printf("mag bias\n");

		for (int i = 0; i < 3; i++) {
			printf("mB %i %.5f\n", i, (double)_state.mag_B(i));
		}

		counter = 0;
	}

	counter++;

}
void InteractionHandler::keyboardCallback(Key key, KeyModifier modifier, KeyAction action) {
    // TODO package in script
    const float speed = _controllerSensitivity;
    const float dt = static_cast<float>(_deltaTime);
    if (action == KeyAction::Press || action == KeyAction::Repeat) {
        if ((key == Key::Right) && (modifier == KeyModifier::NoModifier)) {
            glm::vec3 euler(0.0, speed * dt*0.4, 0.0);
            glm::quat rot = glm::quat(euler);
            rotateDelta(rot);
        }
        if ((key == Key::Left) && (modifier == KeyModifier::NoModifier)) {
            glm::vec3 euler(0.0, -speed * dt*0.4, 0.0);
            glm::quat rot = glm::quat(euler);
            rotateDelta(rot);
        }
        if ((key == Key::Down) && (modifier == KeyModifier::NoModifier)) {
            glm::vec3 euler(speed * dt*0.4, 0.0, 0.0);
            glm::quat rot = glm::quat(euler);
            rotateDelta(rot);
        }
        if ((key == Key::Up) && (modifier == KeyModifier::NoModifier)) {
            glm::vec3 euler(-speed * dt*0.4, 0.0, 0.0);
            glm::quat rot = glm::quat(euler);
            rotateDelta(rot);
        }
        if ((key == Key::KeypadSubtract) && (modifier == KeyModifier::NoModifier)) {
            glm::vec2 s = OsEng.renderEngine().camera()->scaling();
            s[1] -= 0.5f;
            OsEng.renderEngine().camera()->setScaling(s);
        }
        if ((key == Key::KeypadAdd) && (modifier == KeyModifier::NoModifier)) {
            glm::vec2 s = OsEng.renderEngine().camera()->scaling();
            s[1] += 0.5f;
            OsEng.renderEngine().camera()->setScaling(s);
        }

        // iterate over key bindings
        //_validKeyLua = true;
        auto ret = _keyLua.equal_range({ key, modifier });
        for (auto it = ret.first; it != ret.second; ++it) {
            //OsEng.scriptEngine()->runScript(it->second);
            OsEng.scriptEngine().queueScript(it->second);
            //if (!_validKeyLua) {
            //    break;
            //}
        }
    }
}
Beispiel #8
0
int __EXPORT eulerAnglesTest()
{
	printf("Test EulerAngles\t: ");
	EulerAngles euler(0.1f, 0.2f, 0.3f);

	// test ctor
	ASSERT(vectorEqual(Vector3(0.1f, 0.2f, 0.3f), euler));
	ASSERT(equal(euler.getPhi(), 0.1f));
	ASSERT(equal(euler.getTheta(), 0.2f));
	ASSERT(equal(euler.getPsi(), 0.3f));

	// test dcm ctor
	euler = Dcm(EulerAngles(0.1f, 0.2f, 0.3f));
	ASSERT(vectorEqual(Vector3(0.1f, 0.2f, 0.3f), euler));

	// test quat ctor
	euler = Quaternion(EulerAngles(0.1f, 0.2f, 0.3f));
	ASSERT(vectorEqual(Vector3(0.1f, 0.2f, 0.3f), euler));

	// test assignment
	euler.setPhi(0.4f);
	euler.setTheta(0.5f);
	euler.setPsi(0.6f);
	ASSERT(vectorEqual(Vector3(0.4f, 0.5f, 0.6f), euler));

	printf("PASS\n");
	return 0;
}
list<int>::iterator euler(int at, int to,
    list<int>::iterator it) {
  if (at == to) return it;
  L.insert(it, at), --it;
  while (!adj[at].empty()) {
    int nxt = *adj[at].begin();
    adj[at].erase(adj[at].find(nxt));
    adj[nxt].erase(adj[nxt].find(at));
    if (to == -1) {
      it = euler(nxt, at, it);
      L.insert(it, at);
      --it;
    } else {
      it = euler(nxt, to, it);
      to = -1; } }
  return it; }
Beispiel #10
0
void OutputBase::_calculate_output_angles(const hrt_abstime &t)
{
	//take speed into account
	float dt = (t - _last_update) / 1.e6f;

	for (int i = 0; i < 3; ++i) {
		_angle_setpoints[i] += dt * _angle_speeds[i];
	}

	//get the output angles and stabilize if necessary
	vehicle_attitude_s vehicle_attitude;
	matrix::Eulerf euler;

	if (_stabilize[0] || _stabilize[1] || _stabilize[2]) {
		orb_copy(ORB_ID(vehicle_attitude), _vehicle_attitude_sub, &vehicle_attitude);
		euler = matrix::Quatf(vehicle_attitude.q);
	}

	for (int i = 0; i < 3; ++i) {
		if (_stabilize[i]) {
			_angle_outputs[i] = _angle_setpoints[i] - euler(i);

		} else {
			_angle_outputs[i] = _angle_setpoints[i];
		}

		//bring angles into proper range [-pi, pi]
		while (_angle_outputs[i] > M_PI_F) { _angle_outputs[i] -= 2.f * M_PI_F; }

		while (_angle_outputs[i] < -M_PI_F) { _angle_outputs[i] += 2.f * M_PI_F; }
	}
}
Beispiel #11
0
RSA::RSA(){
    long long p=Generar_primo(-1);
    long long q=Generar_primo(p);
    long long n=p*q;
    long long phi=euler(p,q);

}
Beispiel #12
0
/*! Construct a list of rotations for a given spacegroup and sampling.
  \param spgr The spacegroup.
  \param step The search andle step (in degrees, NOT radians). */
std::vector<clipper::RTop_orth> LLK_map_target::rtop_list( const clipper::Spacegroup& spgr, const clipper::ftype& step ) const
{
  std::vector<clipper::RTop_orth>  ops;
  // make a list of rotation ops to try
  float glim = 360.0;  // gamma
  float blim = 180.0;  // beta
  float alim = 360.0;  // alpha
  // reduce search angles by symmetry rotations
  alim /= float( spgr.order_of_symmetry_about_axis( clipper::Spacegroup::C ) );
  if ( spgr.order_of_symmetry_about_axis( clipper::Spacegroup::A ) % 2 == 0 ||
       spgr.order_of_symmetry_about_axis( clipper::Spacegroup::B ) % 2 == 0 )
    blim /= 2.0;
  // do a uniformly sampled search of orientation space
  float anglim = clipper::Util::min( alim, glim );
  for ( float bdeg=step/2; bdeg < 180.0; bdeg += step ) {
    float beta = clipper::Util::d2rad(bdeg);
    float spl = anglim/clipper::Util::intf(cos(0.5*beta)*anglim/step+1);
    float smi = anglim/clipper::Util::intf(sin(0.5*beta)*anglim/step+1);
    for ( float thpl=spl/2; thpl < 720.0; thpl += spl )
      for ( float thmi=smi/2; thmi < 360.0; thmi += smi ) {
	float adeg = clipper::Util::mod(0.5*(thpl+thmi),360.0);
	float gdeg = clipper::Util::mod(0.5*(thpl-thmi),360.0);
	if ( adeg <= alim && bdeg <= blim && gdeg <= glim ) {
	  float alpha = clipper::Util::d2rad(adeg);
	  float gamma = clipper::Util::d2rad(gdeg);
	  clipper::Euler_ccp4 euler( alpha, beta, gamma );
	  ops.push_back(clipper::RTop_orth(clipper::Rotation(euler).matrix()));
	}
      }
  }
  // return the rotations
  return ops;
}
Beispiel #13
0
/* calloc() wrapper
 */
link_t *
ecalloc (void)
{
  link_t *e;

  if (!euler ())
    {
      return NULL;
    }

  /* straight outta cache
   */
  e = E.next;
  E.next = e->next;

  e->next = NULL;		/* like calloc() */
  e->ptr = NULL;
  e->num = 0;

  /* yes one less in the E cache
   */
  E.num--;

  return e;

}				/* ecalloc() */
Beispiel #14
0
void LightAnimData::animate( LightInfo *lightInfo, LightAnimState *state )
{   
   PROFILE_SCOPE( LightAnimData_animate );

   // Calculate the input time for animation.
   F32 time =  state->animationPhase + 
               ( (F32)Sim::getCurrentTime() * 0.001f ) / 
               state->animationPeriod;

   MatrixF transform( state->transform );

   EulerF euler( Point3F::Zero );
   if ( mRot.animate( time, euler ) )
   {
      euler.x = mDegToRad( euler.x );
      euler.y = mDegToRad( euler.y );
      euler.z = mDegToRad( euler.z );
      MatrixF rot( euler );
      transform.mul( rot );
   }

   Point3F offset( Point3F::Zero );
   if ( mOffset.animate( time, offset ) )
      transform.displace( offset );

   lightInfo->setTransform( transform );

   ColorF color = state->color;
   mColor.animate( time, color );
   lightInfo->setColor( color );

   F32 brightness = state->brightness;
   mBrightness.animate( time, &brightness );
   lightInfo->setBrightness( brightness );
}
std::vector<double> BaxterArmCommander::quat2euler(geometry_msgs::Quaternion quaternion) {
    double mData[4];
    std::vector<double> euler(3);
    const static double PI_OVER_2 = M_PI * 0.5;
    const static double EPSILON = 1e-10;
    double sqw, sqx, sqy, sqz;

    mData[0] = quaternion.x;
    mData[1] = quaternion.y;
    mData[2] = quaternion.z;
    mData[3] = quaternion.w;
    // quick conversion to Euler angles to give tilt to user
    sqw = mData[3] * mData[3];
    sqx = mData[0] * mData[0];
    sqy = mData[1] * mData[1];
    sqz = mData[2] * mData[2];

    euler[1] = asin(2.0 * (mData[3] * mData[1] - mData[0] * mData[2]));
    if (PI_OVER_2 - fabs(euler[1]) > EPSILON) {
        euler[2] = atan2(2.0 * (mData[0] * mData[1] + mData[3] * mData[2]),
                         sqx - sqy - sqz + sqw);
        euler[0] = atan2(2.0 * (mData[3] * mData[0] + mData[1] * mData[2]),
                         sqw - sqx - sqy + sqz);
    } else {
        // compute heading from local 'down' vector
        euler[2] = atan2(2 * mData[1] * mData[2] - 2 * mData[0] * mData[3],
                         2 * mData[0] * mData[2] + 2 * mData[1] * mData[3]);
        euler[0] = 0.0;

        // If facing down, reverse yaw
        if (euler[1] < 0)
            euler[2] = M_PI - euler[2];
    }
    return euler;
}
Beispiel #16
0
void OsgNav::preFrame()
{
   vpr::Interval cur_time = mWand->getTimeStamp();
   vpr::Interval diff_time(cur_time-mLastPreFrameTime);
   if (mLastPreFrameTime.getBaseVal() >= cur_time.getBaseVal())
   {  diff_time.secf(0.0f); }

   float time_delta = diff_time.secf();

   // Cluster debug code.
   // std::cout << "CLUSTER Delta: " << diff_time.getBaseVal() << std::endl;
   // std::cout << "CLUSTER Current: " << cur_time.getBaseVal() << "Last: "
   //           << mLastTimeStamp.getBaseVal() << "\n" << std::endl;

   mLastPreFrameTime = cur_time;

   //vprDEBUG(vprDBG_ALL, vprDBG_CRITICAL_LVL) << "------- preFrame ------\n"
   //                                          << vprDEBUG_FLUSH;

   // Get wand data
   gmtl::Matrix44f wandMatrix = mWand->getData();      // Get the wand matrix

   // If we are pressing button 1 then translate in the direction the wand is
   // pointing.
   if ( mButton0->getData() == gadget::Digital::ON )
   {
      gmtl::Vec3f direction;
      gmtl::Vec3f Zdir = gmtl::Vec3f(0.0f, 0.0f, -10.0f);
      gmtl::xform(direction, wandMatrix, Zdir);

      mNavigator.setVelocity(direction);
   }  // Make sure to reset the velocity when we stop pressing the button.
   else if ( mButton0->getData() == gadget::Digital::TOGGLE_OFF)
   {
      mNavigator.setVelocity(gmtl::Vec3f(0.0, 0.0, 0.0));
   }

   if ( mButton1->getData() == gadget::Digital::TOGGLE_ON)
   {
      std::cout << "Cur Pos: " << mNavigator.getCurPos() << std::endl;
   }

   // If we are pressing button 2 then rotate in the direction the wand is
   // pointing.
   if ( mButton2->getData() == gadget::Digital::ON )
   {
      // Only allow Yaw (rot y)
      gmtl::EulerAngleXYZf euler(0.0f, gmtl::makeYRot(mWand->getData()), 0.0f);
      gmtl::Matrix44f rot_mat = gmtl::makeRot<gmtl::Matrix44f>(euler);
      mNavigator.setRotationalVelocity(rot_mat);
   }
   // Make sure to reset the rotational velocity when we stop pressing the
   // button.
   else if(mButton2->getData() == gadget::Digital::TOGGLE_OFF)
   {
      mNavigator.setRotationalVelocity(gmtl::Matrix44f());
   }
   // Update the navigation using the time delta between
   mNavigator.update(time_delta);
}
Beispiel #17
0
void euler(int u){
  for(int v = 0; v < n; v++) if(G[u][v] && !vis[u][v]) {
    vis[u][v] = vis[v][u] = 1;
    euler(v);
    printf("%d %d\n", u, v); // 打印的顺序是逆序的:最先打印的边实际上应该最后经过
  }
}
// discrete-logarithm, finding y for equation k = x^y % mod
int discrete_logarithm(int x, int mod, int k) {
  if (mod == 1) return 0;
  int s = 1, g;
  for (int i = 0; i < 64; ++i) {
    if (s == k) return i;
    s = (1ll * s * x) % mod;
  }
  while ((g = gcd(x, mod)) != 1) {
    if (k % g) return -1;
    mod /= g;
  }
  static unordered_map<int, int> M; M.clear();
  int q = int(sqrt(double(euler(mod)))) + 1; // mod-1 is also okay
  for (int i = 0, b = 1; i < q; ++i) {
    if (M.find(b) == M.end()) M[b] = i;
    b = (1ll * b * x) % mod;
  }
  int p = fpow(x, q, mod);
  for (int i = 0, b = 1; i <= q; ++i) {
    int v = (1ll * k * inverse(b, mod)) % mod;
    if (M.find(v) != M.end()) {
      int y = i * q + M[v];
      if (y >= 64) return y;
    }
    b = (1ll * b * p) % mod;
  }
  return -1;
}
Beispiel #19
0
int main ()
{
       scanf("%d", &tcase);
       for (fcase = 1;fcase <= tcase;fcase++)
       {
              scanf("%d", &n);
              for (i = 1;i <= 26;i++)//初始化 
              {
                  in[i] = out[i] = 0;
                  f[i] = i;
                  node[i].next = -1;
              }
              totnode = 26;
              totans = 0;
              for (i = 1; i <= n; i++)
              {
                     scanf("%s", s); 
                     addpath(s[0] - 'a'+1, s[strlen(s) - 1] - 'a'+1, s);
              }
              if (!check(26))//如果不是一个欧拉图 
              {
                     output(false);//输出。 
                     continue;//继续上面的for循环(直接处理下一组数据了) 
              }
              int flag;
              flag = false; 
              for (i = 1; i <= 26; i++)//首先判断是否存在欧拉路 
              {
                     if (out[i] == in[i] + 1)//如果哪个点的出度比入度多1,那么从这个点开始找 
                     {
                            euler(i, -1);
                            flag = true;//标记 
                            break;
                     }
              }
              if (flag == false)//如果没有欧拉路,那么找欧拉回路 
              {
                     for (i = 1; i <= 26; i++)
                            if (out[i])//随便从一个点开始 
                            {
                                   euler(i, -1);//找 
                                   break;
                            }
              }
              output(true);//输出 
       }
}
Beispiel #20
0
int main(int argc, char** argv){
    parse_args(argc, argv);
    if(print_usage_flag) {
        print_usage();
        return 0;
    }
    init();
    short accel[3], gyro[3], sensors[1];
    long quat[4];
    unsigned long timestamp;
    unsigned char more[0];
    struct pollfd fdset[1];
    char buf[1];

    // File descriptor for the GPIO interrupt pin
    int gpio_fd = open(GPIO_INT_FILE, O_RDONLY | O_NONBLOCK);

    // Create an event on the GPIO value file
    memset((void*)fdset, 0, sizeof(fdset));
    fdset[0].fd = gpio_fd;
    fdset[0].events = POLLPRI;

    while (1){
        // Blocking poll to wait for an edge on the interrupt
        if(!no_interrupt_flag) {
            poll(fdset, 1, -1);
        }

        if (no_interrupt_flag || fdset[0].revents & POLLPRI) {
            // Read the file to make it reset the interrupt
            if(!no_interrupt_flag) {
                read(fdset[0].fd, buf, 1);
			}

            int fifo_read = dmp_read_fifo(gyro, accel, quat, &timestamp, sensors, more);
            if (fifo_read != 0) {
                //printf("Error reading fifo.\n");
                continue;
            }

            float angles[NOSENTVALS];
            rescale_l(quat, angles+9, QUAT_SCALE, 4);

            // rescale the gyro and accel values received from the IMU from longs that the
            // it uses for efficiency to the floats that they actually are and store these values in the angles array
            rescale_s(gyro, angles+3, GYRO_SCALE, 3);
            rescale_s(accel, angles+6, ACCEL_SCALE, 3);
            // turn the quaternation (that is already in angles) into euler angles and store it in the angles array
            euler(angles+9, angles);
            if(!silent_flag && verbose_flag) {
                printf("Yaw: %+5.1f\tPitch: %+5.1f\tRoll: %+5.1f\n", angles[0]*180.0/PI, angles[1]*180.0/PI, angles[2]*180.0/PI);
            }
            // send the values in angles over UDP as a string (in udp.c/h)
            if(!no_broadcast_flag) {
                udp_send(angles, 13);
            }
        }
    }
}
main()
{
int n;
while(scanf("%d",&n)==1){
if(!n) return;
printf("%d\n",euler(n));
}
}
Beispiel #22
0
int main(void)
{
	//stampo le distanze dall'origine dopo 100000 iterazioni con i due metodi: quale sarà la più grande?
	std::cout << euler(0.02, 100000) << "\n";
	std::cout << leapfrog(0.02,100000)<< "\n";
	
	return 0;
}
Beispiel #23
0
 DiQuat DiK2Configs::ConvertAngles(const DiVec3& eulerrot)
 {
     DiQuat q;
     DiVec3 euler(DiDegree(eulerrot.x).valueRadians(),
         DiDegree(eulerrot.y).valueRadians(), DiDegree(eulerrot.z).valueRadians());
     DiEuler::ToQuat(q, euler, DiEuler::YXZ);
     return q;
 }
Beispiel #24
0
Vector print_euler(double h_value)
{
  printf("Euler with h = %g\n", h_value);
  Vector euler_ys = euler(h_value);
  printVector(&euler_ys, stdout);
  printf("\n\n");
  return euler_ys;
}
void AttitudePositionEstimatorEKF::publishAttitude()
{
	// Output results
	math::Quaternion q(_ekf->states[0], _ekf->states[1], _ekf->states[2], _ekf->states[3]);
	math::Matrix<3, 3> R = q.to_dcm();
	math::Vector<3> euler = R.to_euler();

	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) {
			PX4_R(_att.R, i, j) = R(i, j);
		}
	}

	_att.timestamp = _last_sensor_timestamp;
	_att.q[0] = _ekf->states[0];
	_att.q[1] = _ekf->states[1];
	_att.q[2] = _ekf->states[2];
	_att.q[3] = _ekf->states[3];
	_att.q_valid = true;
	_att.R_valid = true;

	_att.timestamp = _last_sensor_timestamp;
	_att.roll = euler(0);
	_att.pitch = euler(1);
	_att.yaw = euler(2);

	_att.rollspeed = _ekf->angRate.x - _ekf->states[10] / _ekf->dtIMUfilt;
	_att.pitchspeed = _ekf->angRate.y - _ekf->states[11] / _ekf->dtIMUfilt;
	_att.yawspeed = _ekf->angRate.z - _ekf->states[12] / _ekf->dtIMUfilt;

	// gyro offsets
	_att.rate_offsets[0] = _ekf->states[10] / _ekf->dtIMUfilt;
	_att.rate_offsets[1] = _ekf->states[11] / _ekf->dtIMUfilt;
	_att.rate_offsets[2] = _ekf->states[12] / _ekf->dtIMUfilt;

	/* lazily publish the attitude only once available */
	if (_att_pub != nullptr) {
		/* publish the attitude setpoint */
		orb_publish(ORB_ID(vehicle_attitude), _att_pub, &_att);

	} else {
		/* advertise and publish */
		_att_pub = orb_advertise(ORB_ID(vehicle_attitude), &_att);
	}
}
void euler(int u)
{
 for(int v=1;v<=n;v++) if(g[u][v]&&!vis[u][v]){
  vis[u][v]=vis[v][u]=1; //有向图只需改为vis[u][v]=1
  euler(v);
  top++;
  su[top]=u; sv[top]=v;
 }
}
Beispiel #27
0
void main()
{
 int n;
 double h;
 double *V0;
 double *V1;
 double *V;
 double *F0;
 double *F1;
 double xmax;
 int nmax;
 int i,j;

//Récupération des informations générales sur la méthode
 scanf("%d %lf %lf",&n,&xmax,&h);

//Création des tableaux dynamiques
 V0=(double *) malloc(n*sizeof(double));
 V1=(double *) malloc(n*sizeof(double));
 V=(double *) malloc(n*sizeof(double));
 F0=(double *) malloc(n*sizeof(double));
 F1=(double *) malloc(n*sizeof(double));

//Lecture et écriture des conditions initiales
 for(i=0;i<n;i++)
 {
  scanf("%lf",&V0[i]);
  printf("%lf ",V0[i]);
 }
 printf("\n");

//Calcul du nombre d'itérations
 nmax=trunc((xmax-V0[0])/h);

//Initialisation avec la méthode d'Euler explicite
 f(V0,F0);
 euler(n,h,V0,V1,F0);
 for(i=0;i<n;i++)
  printf("%lf ",V1[i]); 
 printf("\n");

//Méthode d'Adams-Bashforth
 f(V1,F1);
 for(i=2;i<(nmax+1);i++)
 {
  adamsBashforth(n,h,V1,V,F0,F1);
  for(j=0;j<n;j++)
  {
   printf("%lf ",V[j]);
   V0[j]=V1[j];
   V1[j]=V[j];
   f(V0,F0);
   f(V1,F1);
  }
  printf("\n");
 }
}
Beispiel #28
0
int main(){
	scanf("%d",&cn);
	for (int i = 0; i < cn; ++i)
	{
		scanf("%d",&n);
		printf("%d\n", euler(n));
	}
	return 0;
}
int main (void){
  a_alt = 1;
  n = 1;

  double erg = euler(e);
  printf ("Ergebnis: %f\n", erg);

  return 0;
}
void PositionCommand::getGoal(const geometry_msgs::PoseStamped::ConstPtr & goal)
{
    ROS_INFO("GOT NEW GOAL");
    Eigen::Matrix<double,3,1> euler=Eigen::Quaterniond(goal->pose.orientation.w,
                                                       goal->pose.orientation.x,
                                                       goal->pose.orientation.y,
                                                       goal->pose.orientation.z).matrix().eulerAngles(2, 1, 0);
    double yaw = euler(0,0);
    double pitch = euler(1,0);
    double roll = euler(2,0);

    goal_pose_ << goal->pose.position.x,
            goal->pose.position.y,
            goal->pose.position.z,
            roll,
            pitch,
            yaw;
    goal_=true;
}