PPZ quadrotor make me crazy~~

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

PPZ quadrotor make me crazy~~

bshaot
Hello everyone,
    I am a Chinese ppz user,Since the last time I lost my ppz quadrotor has been a month.I fly another ppz quadrotor newly installed this afternoon,found 3 serious questions:A,When the plane landed, have a serious rebound,make landing very difficult!B,The throttle have drift very serious.In manual mode,Roll/Pitch steering will make the plane climb very high(This is why I'm the last plane out of control).C,When the plane vertical drop, the course will happen very obvious change.
   Can someone give some guidance? Thanks!

Aircraft configuration:
Lisa m 2.0,Aspirin2.1,F450,2810,1147 in X mode.

Below is my XML:


<airframe name="Quadrotor LisaM_2.0 pwm">                    

  <firmware name="rotorcraft">                             
    <target name="ap" board="lisa_m_2.0">                   
     <subsystem name="radio_control" type="ppm"/>           
      <define name="LOITER_TRIM"/>
      <define name="ALT_KALMAN"/> 
      <define name="USE_KILL_SWITCH_FOR_MOTOR_ARMING"/>     
    </target>

    <target name="nps" board="pc">
      <subsystem name="fdm" type="jsbsim"/>
      <subsystem name="radio_control" type="ppm"/>
    </target>

      <subsystem name="motor_mixing"/>                     
      <subsystem name="actuators" type="pwm">               
        <define name="SERVO_HZ" value="400"/>               
      </subsystem>



    <subsystem name="telemetry" type="transparent" />       

    <subsystem name="imu" type="aspirin_v2.1"/>             

    <subsystem name="gps" type="ublox"/>                   

    <subsystem name="stabilization" type="int_quat"/>       
                                                           
    </subsystem>

    <subsystem name="ins"/>

  </firmware>

   
 

  <servos driver="Pwm">
    <servo name="NE" no="0" min="1000" neutral="1000" max="1900"/>
    <servo name="SE" no="1" min="1000" neutral="1000" max="1900"/>
    <servo name="SW" no="2" min="1000" neutral="1000" max="1900"/>
    <servo name="NW" no="3" min="1000" neutral="1000" max="1900"/> 
  </servos>

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

  <section name="MIXING" prefix="MOTOR_MIXING_">
    <define name="TRIM_ROLL" value="0"/>
    <define name="TRIM_PITCH" value="0"/>
    <define name="TRIM_YAW" value="0"/>
    <define name="NB_MOTOR" value="4"/>
    <define name="SCALE" value="256"/>
   
    <define name="ROLL_COEF" value="{ -256, -256,  256,  256 }"/>
    <define name="PITCH_COEF" value="{  256, -256, -256,  256 }"/>
    <define name="YAW_COEF" value="{  -256, 256,  -256, 256 }"/>
    <define name="THRUST_COEF" value="{  256,  256,  256,  256 }"/>
  </section>

  <command_laws>
    <call fun="motor_mixing_run(autopilot_motors_on,FALSE,values)"/>
    <set servo="NE" value="motor_mixing.commands[SERVO_NE]"/>
    <set servo="SE" value="motor_mixing.commands[SERVO_SE]"/>
    <set servo="SW" value="motor_mixing.commands[SERVO_SW]"/>
    <set servo="NW" value="motor_mixing.commands[SERVO_NW]"/>
  </command_laws>

  <section name="IMU" prefix="IMU_">
    <define name="ACCEL_X_NEUTRAL" value="11"/>
    <define name="ACCEL_Y_NEUTRAL" value="11"/>
    <define name="ACCEL_Z_NEUTRAL" value="-25"/>


   
    <define name="MAG_X_NEUTRAL" value="370"/>
    <define name="MAG_Y_NEUTRAL" value="175"/>
    <define name="MAG_Z_NEUTRAL" value="370"/>
    <define name="MAG_X_SENS" value="3.81573853324" integer="16"/>
    <define name="MAG_Y_SENS" value="3.87309255575" integer="16"/>
    <define name="MAG_Z_SENS" value="4.2639500237" integer="16"/>
 
    <define name="BODY_TO_IMU_PHI" value="0." unit="deg"/>
    <define name="BODY_TO_IMU_THETA" value="0." unit="deg"/>
    <define name="BODY_TO_IMU_PSI" value="0." unit="deg"/>
  </section>

 
    <define name="PROPAGATE_FREQUENCY" value="512"/>
    <define name="H_X" value="0.5169001"/>
    <define name="H_Y" value="-0.0596905"/>
    <define name="H_Z" value="0.8539621"/> 
  </section>

  <section name="INS" prefix="INS_">
    <define name="BARO_SENS" value="22.3" integer="16"/>
  </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="DEADBAND_P" value="20"/> 
    <define name="DEADBAND_Q" value="20"/> 
    <define name="DEADBAND_R" value="200"/>
    <define name="REF_TAU" value="4"/>

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

    <define name="IGAIN_P" value="300" />
    <define name="IGAIN_Q" value="300" />
    <define name="IGAIN_R" value="300" />

   
    <define name="DDGAIN_P" value="6" />
    <define name="DDGAIN_Q" value="6" />
    <define name="DDGAIN_R" value="10" />
  </section> 


  <section name="STABILIZATION_ATTITUDE" prefix="STABILIZATION_ATTITUDE_">
   
    <define name="SP_MAX_PHI" value="30." unit="deg"/>
    <define name="SP_MAX_THETA" value="30." unit="deg"/>
    <define name="SP_MAX_R" value="90." unit="deg/s"/>
    <define name="DEADBAND_A" value="10"/>
    <define name="DEADBAND_E" value="10"/>
    <define name="DEADBAND_R" value="300"/>

   
    <define name="REF_OMEGA_P" value="800" unit="deg/s"/>
    <define name="REF_ZETA_P" value="0.85"/>
    <define name="REF_MAX_P" value="400." unit="deg/s"/>
    <define name="REF_MAX_PDOT" value="RadOfDeg(8000.)"/>

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

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

                 
    <define name="PHI_PGAIN" value="1000" />  
    <define name="PHI_DGAIN" value="500" />  
    <define name="PHI_IGAIN" value="190" />  
 
    <define name="THETA_PGAIN" value="1000" />  
    <define name="THETA_DGAIN" value="500" />  
    <define name="THETA_IGAIN" value="190" />  

    <define name="PSI_PGAIN" value="500" />
    <define name="PSI_DGAIN" value="300" />
    <define name="PSI_IGAIN" value="10" />

   
    <define name="PHI_DDGAIN" value="400" />
    <define name="THETA_DDGAIN" value="400" />
    <define name="PSI_DDGAIN" value="400" />
  </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="135"/> 
    <define name="HOVER_KD" value="100"/> 
    <define name="HOVER_KI" value="20"/> 
   
    <define name="RC_CLIMB_COEF" value="163"/>
   
    <define name="RC_CLIMB_DEAD_BAND" value="160000"/>
  </section>


  <section name="GUIDANCE_H" prefix="GUIDANCE_H_">
    <define name="MAX_BANK" value="20" unit="deg"/>
    <define name="PGAIN" value="50"/>
    <define name="DGAIN" value="100"/>
    <define name="IGAIN" value="20"/>
  </section>



  <section name="SIMULATOR" prefix="NPS_">
    <define name="ACTUATOR_NAMES" value="{&quot;ne_motor&quot;, &quot;se_motor&quot;, &quot;sw_motor&quot;, &quot;nw_motor&quot;}"/>
    <define name="INITIAL_CONDITITONS" value="&quot;reset00&quot;"/>
    <define name="SENSORS_PARAMS" value="&quot;nps_sensors_params_default.h&quot;"/>
  </section>

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

  <section name="BAT">
    <define name="CATASTROPHIC_BAT_LEVEL" value="9.3" unit="V"/>
    <define name="CRITIC_BAT_LEVEL" value="9.6" unit="V"/>
    <define name="LOW_BAT_LEVEL" value="9.7" unit="V"/>
    <define name="MAX_BAT_LEVEL" value="12.4" unit="V"/>
  </section>

</airframe>

Reply | Threaded
Open this post in threaded view
|

Re: PPZ quadrotor make me crazy~~

Sergey Krukowski
Hi!
I'll try to answer according my own experience

A. Landing difficulty depends on the mode you fly in. Using one of the  
modes mode with altitude stabilization and without ground detection can  
cause difficulties while landing.
I prefer myself to use ground detection functionality, which makes landing  
much easier.
Anyway, you are using a kill switch, why not switching the motors just  
before landing?

B. As far as I understand, the problem in climbing while rolling/pitching  
is not because of throttle instability, but because of the motor inertia  
while making pretty high speed angle changes. Not sure if it solvable by  
any of the setup parameters.

C. Your PSI_PGAIN and PSI_DGAIN are too low, imho. Try to increase them  
step by step.

Best Regards,
Sergey

> Hello everyone,
>     I am a Chinese ppz user,Since the last time I lost my ppz quadrotor  
> has
> been a month.I fly another ppz quadrotor newly installed this
> afternoon,found 3 serious questions:*A*,When the plane landed, have a
> serious rebound,make landing very difficult!*B*,The throttle have drift  
> very
> serious.In manual mode,Roll/Pitch steering will make the plane climb very
> high(This is why I'm the last plane out of control).*C*,When the plane
> vertical drop, the course will happen very obvious change.
>    Can someone give some guidance? Thanks!
>
> Aircraft configuration:
> Lisa m 2.0,Aspirin2.1,F450,2810,1147 in X mode.
>
> Below is my XML:
>
>
> <airframe name="Quadrotor LisaM_2.0 pwm">
>
>   <firmware name="rotorcraft">
>     <target name="ap" board="lisa_m_2.0">
>      <subsystem name="radio_control" type="ppm"/>
>       <define name="LOITER_TRIM"/>
>       <define name="ALT_KALMAN"/>
>       <define name="USE_KILL_SWITCH_FOR_MOTOR_ARMING"/>
>     </target>
>
>     <target name="nps" board="pc">
>       <subsystem name="fdm" type="jsbsim"/>
>       <subsystem name="radio_control" type="ppm"/>
>     </target>
>
>       <subsystem name="motor_mixing"/>
>       <subsystem name="actuators" type="pwm">
>         <define name="SERVO_HZ" value="400"/>
>       </subsystem>
>
>
>
>     <subsystem name="telemetry" type="transparent" />
>
>     <subsystem name="imu" type="aspirin_v2.1"/>
>
>     <subsystem name="gps" type="ublox"/>
>
>     <subsystem name="stabilization" type="int_quat"/>
>    </subsystem>
>
>     <subsystem name="ins"/>
>
>   </firmware>
>
>
>   <servos driver="Pwm">
>     <servo name="NE" no="0" min="1000" neutral="1000" max="1900"/>
>     <servo name="SE" no="1" min="1000" neutral="1000" max="1900"/>
>     <servo name="SW" no="2" min="1000" neutral="1000" max="1900"/>
>     <servo name="NW" no="3" min="1000" neutral="1000" max="1900"/>
>   </servos>
>
>   <commands>
>     <axis name="ROLL"   failsafe_value="0"/>
>     <axis name="PITCH"  failsafe_value="0"/>
>     <axis name="YAW"    failsafe_value="0"/>
>     <axis name="THRUST" failsafe_value="0"/>
>   </commands>
>
>   <section name="MIXING" prefix="MOTOR_MIXING_">
>     <define name="TRIM_ROLL" value="0"/>
>     <define name="TRIM_PITCH" value="0"/>
>     <define name="TRIM_YAW" value="0"/>
>     <define name="NB_MOTOR" value="4"/>
>     <define name="SCALE" value="256"/>
>    <define name="ROLL_COEF" value="{ -256, -256,  256,  256 }"/>
>     <define name="PITCH_COEF" value="{  256, -256, -256,  256 }"/>
>     <define name="YAW_COEF" value="{  -256, 256,  -256, 256 }"/>
>     <define name="THRUST_COEF" value="{  256,  256,  256,  256 }"/>
>   </section>
>
>   <command_laws>
>     <call fun="motor_mixing_run(autopilot_motors_on,FALSE,values)"/>
>     <set servo="NE" value="motor_mixing.commands[SERVO_NE]"/>
>     <set servo="SE" value="motor_mixing.commands[SERVO_SE]"/>
>     <set servo="SW" value="motor_mixing.commands[SERVO_SW]"/>
>     <set servo="NW" value="motor_mixing.commands[SERVO_NW]"/>
>   </command_laws>
>
>   <section name="IMU" prefix="IMU_">
>     <define name="ACCEL_X_NEUTRAL" value="11"/>
>     <define name="ACCEL_Y_NEUTRAL" value="11"/>
>     <define name="ACCEL_Z_NEUTRAL" value="-25"/>
>
>
>    <define name="MAG_X_NEUTRAL" value="370"/>
>     <define name="MAG_Y_NEUTRAL" value="175"/>
>     <define name="MAG_Z_NEUTRAL" value="370"/>
>     <define name="MAG_X_SENS" value="3.81573853324" integer="16"/>
>     <define name="MAG_Y_SENS" value="3.87309255575" integer="16"/>
>     <define name="MAG_Z_SENS" value="4.2639500237" integer="16"/>
>    <define name="BODY_TO_IMU_PHI" value="0." unit="deg"/>
>     <define name="BODY_TO_IMU_THETA" value="0." unit="deg"/>
>     <define name="BODY_TO_IMU_PSI" value="0." unit="deg"/>
>   </section>
>
>    <define name="PROPAGATE_FREQUENCY" value="512"/>
>     <define name="H_X" value="0.5169001"/>
>     <define name="H_Y" value="-0.0596905"/>
>     <define name="H_Z" value="0.8539621"/>
>   </section>
>
>   <section name="INS" prefix="INS_">
>     <define name="BARO_SENS" value="22.3" integer="16"/>
>   </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="DEADBAND_P" value="20"/>
>     <define name="DEADBAND_Q" value="20"/>
>     <define name="DEADBAND_R" value="200"/>
>     <define name="REF_TAU" value="4"/>
>
>    <define name="GAIN_P" value="320" />
>     <define name="GAIN_Q" value="320" />
>     <define name="GAIN_R" value="350" />
>
>     <define name="IGAIN_P" value="300" />
>     <define name="IGAIN_Q" value="300" />
>     <define name="IGAIN_R" value="300" />
>
>    <define name="DDGAIN_P" value="6" />
>     <define name="DDGAIN_Q" value="6" />
>     <define name="DDGAIN_R" value="10" />
>   </section>
>
>
>   <section name="STABILIZATION_ATTITUDE"  
> prefix="STABILIZATION_ATTITUDE_">
>    <define name="SP_MAX_PHI" value="30." unit="deg"/>
>     <define name="SP_MAX_THETA" value="30." unit="deg"/>
>     <define name="SP_MAX_R" value="90." unit="deg/s"/>
>     <define name="DEADBAND_A" value="10"/>
>     <define name="DEADBAND_E" value="10"/>
>     <define name="DEADBAND_R" value="300"/>
>
>    <define name="REF_OMEGA_P" value="800" unit="deg/s"/>
>     <define name="REF_ZETA_P" value="0.85"/>
>     <define name="REF_MAX_P" value="400." unit="deg/s"/>
>     <define name="REF_MAX_PDOT" value="RadOfDeg(8000.)"/>
>
>     <define name="REF_OMEGA_Q" value="800" unit="deg/s"/>
>     <define name="REF_ZETA_Q" value="0.85"/>
>     <define name="REF_MAX_Q" value="400." unit="deg/s"/>
>     <define name="REF_MAX_QDOT" value="RadOfDeg(8000.)"/>
>
>     <define name="REF_OMEGA_R" value="500" unit="deg/s"/>
>     <define name="REF_ZETA_R" value="0.85"/>
>     <define name="REF_MAX_R" value="180." unit="deg/s"/>
>     <define name="REF_MAX_RDOT" value="RadOfDeg(1800.)"/>
>
>    <define name="PHI_PGAIN" value="1000" />
>     <define name="PHI_DGAIN" value="500" />
>     <define name="PHI_IGAIN" value="190" />
>    <define name="THETA_PGAIN" value="1000" />
>     <define name="THETA_DGAIN" value="500" />
>     <define name="THETA_IGAIN" value="190" />
>
>     <define name="PSI_PGAIN" value="500" />
>     <define name="PSI_DGAIN" value="300" />
>     <define name="PSI_IGAIN" value="10" />
>
>    <define name="PHI_DDGAIN" value="400" />
>     <define name="THETA_DDGAIN" value="400" />
>     <define name="PSI_DDGAIN" value="400" />
>   </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="135"/>
>     <define name="HOVER_KD" value="100"/>
>     <define name="HOVER_KI" value="20"/>
>    <define name="RC_CLIMB_COEF" value="163"/>
>    <define name="RC_CLIMB_DEAD_BAND" value="160000"/>
>   </section>
>
>
>   <section name="GUIDANCE_H" prefix="GUIDANCE_H_">
>     <define name="MAX_BANK" value="20" unit="deg"/>
>     <define name="PGAIN" value="50"/>
>     <define name="DGAIN" value="100"/>
>     <define name="IGAIN" value="20"/>
>   </section>
>
>
>
>   <section name="SIMULATOR" prefix="NPS_">
>     <define name="ACTUATOR_NAMES" value="{&quot;ne_motor&quot;,
> &quot;se_motor&quot;, &quot;sw_motor&quot;, &quot;nw_motor&quot;}"/>
>     <define name="INITIAL_CONDITITONS" value="&quot;reset00&quot;"/>
>     <define name="SENSORS_PARAMS"
> value="&quot;nps_sensors_params_default.h&quot;"/>
>   </section>
>
>   <section name="AUTOPILOT">
>     <define name="MODE_MANUAL" value="AP_MODE_ATTITUDE_DIRECT"/>
>     <define name="MODE_AUTO1"  value="AP_MODE_HOVER_Z_HOLD" />
>   </section>
>
>   <section name="BAT">
>     <define name="CATASTROPHIC_BAT_LEVEL" value="9.3" unit="V"/>
>     <define name="CRITIC_BAT_LEVEL" value="9.6" unit="V"/>
>     <define name="LOW_BAT_LEVEL" value="9.7" unit="V"/>
>     <define name="MAX_BAT_LEVEL" value="12.4" unit="V"/>
>   </section>
>
> </airframe>
>
>
>
>
>
> --
> View this message in context:  
> http://paparazzi.517.n7.nabble.com/PPZ-quadrotor-make-me-crazy-tp13880.html
> Sent from the paparazzi-devel mailing list archive at Nabble.com.
>
> _______________________________________________
> Paparazzi-devel mailing list
> [hidden email]
> https://lists.nongnu.org/mailman/listinfo/paparazzi-devel


--
Erstellt mit Operas revolutionärem E-Mail-Modul: http://www.opera.com/mail/

_______________________________________________
Paparazzi-devel mailing list
[hidden email]
https://lists.nongnu.org/mailman/listinfo/paparazzi-devel
Reply | Threaded
Open this post in threaded view
|

Re: PPZ quadrotor make me crazy~~

bshaot
Thank you for your reply!
   I have been trying toswitching the motors just before landing,But because the body is heavy, often damaged undercarriage.
So,How did you achieve the grounding detection function?
Reply | Threaded
Open this post in threaded view
|

Re: PPZ quadrotor make me crazy~~

bshaot
In reply to this post by Sergey Krukowski
motor inertia?You mean the mechanical inertia or inertia of control?
In APM UAV,I know there are a set of parameters can adjust the throttle PID,but don't know if ppz has a similar option?