paparazzi-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Paparazzi-devel] Quadcopter yaws with roll input


From: Simon Wilks
Subject: Re: [Paparazzi-devel] Quadcopter yaws with roll input
Date: Mon, 19 Mar 2012 16:12:42 +0100

Hi Loic,

Thanks for the suggestions.  

Do you use the subsystem for aspirin v1.5?
 <subsystem name="imu"           type="aspirin_v1.5"/>
Yes, I am using the correct subsystem.
 
I would recommend that you check the attitude angles phi and psi when
moving your quadcopter around the roll axis (phi), and see if the yaw
(psi) is moving.
If that's the case, you can check the sensors orientation in "finding
signs" section in http://paparazzi.enac.fr/wiki/ImuCalibration.
Good idea, I will check the attitude angles.

Have you also checked that the center of gravity is located at the
center of your quadcopter?  Maybe a wrong CG would give coupling
between the axis?
I know I checked the CG on pitch but I probably didn't on the roll axis.

By the way, I am using the 4.0_beta branch. Appending my config at the end just in case it's useful (or of interest).

Thanks

Simon 

<!-- XAircraft X650 frame equiped with Lisa/M using the X650's UltraPWM ESCs -->

<airframe name="lisa_x650">

  <firmware name="rotorcraft">
    <target name="ap" board="lisa_m_1.0">
      <subsystem name="radio_control" type="spektrum"/>
      <subsystem name="actuators"     type="pwm_supervision"/>
      <subsystem name="telemetry"     type="transparent"/>

      <define name="SERVO_HZ"                     value="500"/>
      <define name="RADIO_MODE"                   value="RADIO_AUX1"/>
      <define name="RADIO_KILL_SWITCH"            value="RADIO_GEAR"/>
      <define name="RADIO_CONTROL_SPEKTRUM_SIGNS" value="\{1,1,-1,1,1,-1,1,1,1,1,1,1\}"/>
    </target>

    <target name="sim" board="pc">
      <subsystem name="fdm"           type="nps"/>
      <subsystem name="radio_control" type="ppm"/>
      <subsystem name="actuators"     type="mkk"/>
    </target>

    <subsystem name="imu"           type="aspirin_v1.5"/>
    <subsystem name="gps"           type="ublox"/>
    <subsystem name="stabilization" type="euler"/>
    <subsystem name="ahrs"          type="int_cmpl_quat"/>
  </firmware>

  <servos min="0" neutral="0" max="0xff">
    <servo name="FRONT"   no="0" min="200" neutral="200" max="1200"/>
    <servo name="BACK"    no="1" min="200" neutral="200" max="1200"/>
    <servo name="LEFT"    no="2" min="200" neutral="200" max="1200"/>
    <servo name="RIGHT"   no="3" min="200" neutral="200" max="1200"/>
  </servos>

  <commands>
    <axis name="PITCH"  failsafe_value="0"/>
    <axis name="ROLL"   failsafe_value="0"/>
    <axis name="YAW"    failsafe_value="0"/>
    <axis name="THRUST" failsafe_value="0"/>
  </commands>

  <command_laws>
    <set servo="FRONT" value="0"/>
    <set servo="BACK"  value="1"/>
    <set servo="LEFT"  value="2"/>
    <set servo="RIGHT" value="3"/>
  </command_laws>

  <!-- for the sim -->
  <section name="ACTUATORS_MKK" prefix="ACTUATORS_MKK_">
    <define name="NB" value="4"/>
    <define name="ADDR" value="{ 0x52, 0x54, 0x56, 0x58 }"/>
  </section>

  <section name="SUPERVISION" prefix="SUPERVISION_">
    <define name="STOP_MOTOR" value="100"/>
    <define name="MIN_MOTOR" value="190"/>
    <define name="MAX_MOTOR" value="650"/>
    <define name="TRIM_A" value="0"/>
    <define name="TRIM_E" value="0"/>
    <define name="TRIM_R" value="0"/>
    <define name="NB_MOTOR" value="4"/>
    <define name="SCALE" value="256"/>
    <define name="ROLL_COEF"   value="{  0  ,    0,  256, -256 }"/>
    <define name="PITCH_COEF"  value="{  256, -256,    0,    0 }"/>
    <define name="YAW_COEF"    value="{  256, 256,  -256,  -256 }"/>
    <define name="THRUST_COEF" value="{  256,  256,  256,  256 }"/>
  </section>

   <section name="IMU" prefix="IMU_">
    <define name="GYRO_P_NEUTRAL" value="7"/>
    <define name="GYRO_Q_NEUTRAL" value="-38"/>
    <define name="GYRO_R_NEUTRAL" value="-30"/>
    <define name="GYRO_P_SENS" value="4.412" integer="16"/>
    <define name="GYRO_Q_SENS" value="4.412" integer="16"/>
    <define name="GYRO_R_SENS" value="4.412" integer="16"/>
    <define name="GYRO_PQ_SENS" value="0.0" integer="16"/>
    <define name="GYRO_PR_SENS" value="0.0" integer="16"/>
    <define name="GYRO_QR_SENS" value="0.0" integer="16"/>
    
    <define name="ACCEL_X_NEUTRAL" value="5"/>
    <define name="ACCEL_Y_NEUTRAL" value="6"/>
    <define name="ACCEL_Z_NEUTRAL" value="-5"/>
    <define name="ACCEL_X_SENS" value="38.1959737384" integer="16"/>
    <define name="ACCEL_Y_SENS" value="38.0891238811" integer="16"/>
    <define name="ACCEL_Z_SENS" value="39.6400573777" integer="16"/>
    <define name="ACCEL_XY_SENS" value="0.0" integer="16"/>
    <define name="ACCEL_XZ_SENS" value="0.0" integer="16"/>
    <define name="ACCEL_YZ_SENS" value="0.0" integer="16"/>
    
    <define name="MAG_X_NEUTRAL" value="69"/>
    <define name="MAG_Y_NEUTRAL" value="68"/>
    <define name="MAG_Z_NEUTRAL" value="-228"/>
    <define name="MAG_X_SENS" value="4.10513850603" integer="16"/>
    <define name="MAG_Y_SENS" value="4.85423271885" integer="16"/>
    <define name="MAG_Z_SENS" value="4.50518931605" integer="16"/>
    <define name="MAG_XY_SENS" value="0.0" integer="16"/>
    <define name="MAG_XZ_SENS" value="0.0" integer="16"/>
    <define name="MAG_YZ_SENS" value="0.0" integer="16"/>

    <define name="BODY_TO_IMU_PHI"   value="RadOfDeg(   2. )"/>
    <define name="BODY_TO_IMU_THETA" value="RadOfDeg(   0. )"/>
    <define name="BODY_TO_IMU_PSI"   value="RadOfDeg(   0. )"/>
  </section>

 <section name="AUTOPILOT">
   <define name="MODE_MANUAL" value="AP_MODE_ATTITUDE_DIRECT"/>
   <define name="MODE_AUTO1"  value="AP_MODE_ATTITUDE_DIRECT"/>
   <define name="MODE_AUTO2"  value="AP_MODE_ATTITUDE_DIRECT"/>
 </section>

 <section name="BAT">
   <define name="CATASTROPHIC_BAT_LEVEL" value="9.3" unit="V"/>
 </section>


  <section name="STABILIZATION_RATE" prefix="STABILIZATION_RATE_">
    <define name="SP_MAX_P" value="10000"/>
    <define name="SP_MAX_Q" value="10000"/>
    <define name="SP_MAX_R" value="10000"/>

    <define name="GAIN_P" value="400"/>
    <define name="GAIN_Q" value="400"/>
    <define name="GAIN_R" value="350"/>
  </section>

  <section name="STABILIZATION_ATTITUDE" prefix="STABILIZATION_ATTITUDE_">
    <!-- setpoints -->
    <define name="SP_MAX_PHI"     value="RadOfDeg(45.)"/>
    <define name="SP_MAX_THETA"   value="RadOfDeg(45.)"/>
    <define name="SP_MAX_R"       value="RadOfDeg(90.)"/>
    <define name="DEADBAND_R"     value="250"/>

    <!-- reference -->
    <define name="REF_OMEGA_P"  value="RadOfDeg(800)"/>
    <define name="REF_ZETA_P"   value="0.85"/>
    <define name="REF_MAX_P"    value="RadOfDeg(400.)"/>
    <define name="REF_MAX_PDOT" value="RadOfDeg(8000.)"/>

    <define name="REF_OMEGA_Q"  value="RadOfDeg(800)"/>
    <define name="REF_ZETA_Q"   value="0.85"/>
    <define name="REF_MAX_Q"    value="RadOfDeg(400.)"/>
    <define name="REF_MAX_QDOT" value="RadOfDeg(8000.)"/>

    <define name="REF_OMEGA_R"  value="RadOfDeg(500)"/>
    <define name="REF_ZETA_R"   value="0.85"/>
    <define name="REF_MAX_R"    value="RadOfDeg(180.)"/>
    <define name="REF_MAX_RDOT" value="RadOfDeg(1800.)"/>

    <!-- feedback -->
    <define name="PHI_PGAIN"  value="550"/>  
    <define name="PHI_DGAIN"  value="550"/>  
    <define name="PHI_IGAIN"  value="100"/>

    <define name="THETA_PGAIN"  value="550"/> 
    <define name="THETA_DGAIN"  value="550"/> 
    <define name="THETA_IGAIN"  value="100"/>

    <define name="PSI_PGAIN"  value="380"/>
    <define name="PSI_DGAIN"  value="320"/>
    <define name="PSI_IGAIN"  value="75"/>

    <!-- feedforward -->
    <define name="PHI_DDGAIN"   value=" 300"/>
    <define name="THETA_DDGAIN" value=" 300"/>
    <define name="PSI_DDGAIN"   value=" 300"/>
  </section>

  <section name="INS" prefix="INS_">
    <define name="BARO_SENS" value="3.3" integer="16"/>
  </section>

 <section name="GUIDANCE_V" prefix="GUIDANCE_V_">
   <define name="MIN_ERR_Z"   value="POS_BFP_OF_REAL(-10.)"/>
   <define name="MAX_ERR_Z"   value="POS_BFP_OF_REAL( 10.)"/>
   <define name="MIN_ERR_ZD"  value="SPEED_BFP_OF_REAL(-10.)"/>
   <define name="MAX_ERR_ZD"  value="SPEED_BFP_OF_REAL( 10.)"/>
   <define name="MAX_SUM_ERR" value="2000000"/>

   <define name="HOVER_KP"    value="150"/>
   <define name="HOVER_KD"    value="80"/>
   <define name="HOVER_KI"    value="20"/>
   <!-- 1.5m/s for full stick : BOOZ_SPEED_I_OF_F(1.5) / (MAX_PPRZ/2) -->
   <define name="RC_CLIMB_COEF" value ="163"/>
   <!-- BOOZ_SPEED_I_OF_F(1.5) * 20% -->
   <define name="RC_CLIMB_DEAD_BAND" value ="160000"/>
   <define name="INV_M" value ="0.21"/>
  </section>

  <section name="AHRS" prefix="AHRS_">
    <define name="PROPAGATE_FREQUENCY" value="512"/>
    <!-- Magnetic field values: Aarau -->
    <define name="H_X" value=" 0.4497397"/>
    <define name="H_Y" value=" 0.0110889"/>
    <define name="H_Z" value=" 0.8930908"/>
  </section>

 <section name="GUIDANCE_H" prefix="GUIDANCE_H_">
   <define name="PGAIN" value="100"/>
   <define name="DGAIN" value="100"/>
   <define name="IGAIN" value="0"/>
 </section>

 <section name="MISC">
   <define name="FACE_REINJ_1"  value="1024"/>
 </section>

 <section name="SIMULATOR" prefix="NPS_">
   <define name="ACTUATOR_NAMES"  value="{&quot;front_motor&quot;, &quot;back_motor&quot;, &quot;right_motor&quot;, &quot;left_motor&quot;}"/>
   <define name="INITIAL_CONDITITONS" value="&quot;reset00&quot;"/>
   <define name="SENSORS_PARAMS" value="&quot;nps_sensors_params_booz2_a1.h&quot;"/>
 </section>

 <firmware name="lisa_m_test_progs">
   <target name="test_led"                      board="lisa_m_1.0"/>
   <target name="test_uart_lisam"               board="lisa_m_1.0"/>
   <target name="test_servos"                   board="lisa_m_1.0"/>
   <target name="test_telemetry"                board="lisa_m_1.0"/>
   <target name="test_imu_aspirin"              board="lisa_m_1.0"/>
   <target name="test_rc_spektrum"              board="lisa_m_1.0"/>
   <target name="test_baro"                     board="lisa_m_1.0"/>
 </firmware>
</airframe>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]