diff --git a/docs/en/optical_flow.md b/docs/en/optical_flow.md index f6c3f252..1006c15d 100644 --- a/docs/en/optical_flow.md +++ b/docs/en/optical_flow.md @@ -74,7 +74,7 @@ navigate(x=1.5, frame_id='body') -If the copter has an unstable position using VPE, try to increase the *P* coefficient of speed PID controller - parameters are `MPC_XY_VEL_P` and `MPC_Z_VEL_P`. +If the copter has an unstable position, try to increase the *P* coefficient of speed PID controller - parameters are `MPC_XY_VEL_P` and `MPC_Z_VEL_P`. If the copter has an unstable height, try increasing `MPC_Z_VEL_P` coefficient or getting better hover throttle - `MPC_THR_HOVER`. @@ -85,6 +85,8 @@ If the copter is consistently yawing, try: * different values for `EKF2_MAG_TYPE` parameter, that indicates how data from the magnetometer is used in EKF2; * changing values of `EKF2_MAG_NOISE`, `EKF2_GYR_NOISE`, `EKF2_GYR_B_NOISE` parameters. +> **Note** For better results perform gyro calibration directly before taking off, using [appropriate snippet](snippets.md#calibrate-gyro). + If the copter's height is deviating, try: * increasing the value of `MPC_Z_VEL_P` coefficient; diff --git a/docs/en/snippets.md b/docs/en/snippets.md index cd5e0fcc..f3b15f8b 100644 --- a/docs/en/snippets.md +++ b/docs/en/snippets.md @@ -362,3 +362,35 @@ flip() ``` Requires the [special PX4 firmware for Clever](firmware.md#modified-firmware-for-clever). Before running a flip, take all necessary safty precautions. + +### # {#calibrate-gyro} + +Perform gyro calibration: + +```python +from pymavlink import mavutil +from mavros_msgs.srv import CommandLong +from mavros_msgs.msg import State + +# ... + +send_command = rospy.ServiceProxy('/mavros/cmd/command', CommandLong) + +def calibrate_gyro(): + rospy.loginfo('Calibrate gyro') + if not send_command(command=mavutil.mavlink.MAV_CMD_PREFLIGHT_CALIBRATION, param1=1).success: + return False + + calibrating = False + while not rospy.is_shutdown(): + state = rospy.wait_for_message('mavros/state', State) + if state.system_status == mavutil.mavlink.MAV_STATE_CALIBRATING or state.system_status == mavutil.mavlink.MAV_STATE_UNINIT: + calibrating = True + elif calibrating and state.system_status == mavutil.mavlink.MAV_STATE_STANDBY: + rospy.loginfo('Calibrating finished') + return True + +calibrate_gyro() +``` + +> **Note** In process of calibration the drone should not be moved. diff --git a/docs/ru/optical_flow.md b/docs/ru/optical_flow.md index 99c75c41..5b9f74aa 100644 --- a/docs/ru/optical_flow.md +++ b/docs/ru/optical_flow.md @@ -80,17 +80,19 @@ navigate(x=-1, frame_id='navigate_target') -Если коптер нестабильно удерживает позицию по VPE, попробуйте увеличить коэффициенты *P* PID-регулятора по скорости – параметры `MPC_XY_VEL_P` и `MPC_Z_VEL_P`. +Если коптер нестабильно удерживает позицию, попробуйте увеличить коэффициенты *P* PID-регулятора по скорости – параметры `MPC_XY_VEL_P` и `MPC_Z_VEL_P`. Если коптер нестабильно удерживает высоту, попробуйте увеличить коэффициент `MPC_Z_VEL_P` или лучше подобрать газ висения – `MPC_THR_HOVER`. -Если коптер сильно уплывает по рысканью, попробуйте: +Если коптер уплывает по рысканью, попробуйте: * перекалибровать гироскопы; * перекалибровать магнитометр; * попробовать разные значения параметра `EKF2_MAG_TYPE`, который определяет, каким образом данные с магнитометра используются в EKF2; * изменять значения параметров `EKF2_MAG_NOISE`, `EKF2_GYR_NOISE`, `EKF2_GYR_B_NOISE`. +> **Note** Для более хороших результатов выполняйте перекалибровку гироскопов непосредственно перед взлетом, используя [соответствующий сниппет](snippets.md#calibrate-gyro). + Если коптер уплывает по высоте, попробуйте: * повысить значение коэффициента `MPC_Z_VEL_P`; diff --git a/docs/ru/snippets.md b/docs/ru/snippets.md index 0066d27d..eb328ac5 100644 --- a/docs/ru/snippets.md +++ b/docs/ru/snippets.md @@ -379,3 +379,35 @@ flip() ``` Необходимо использование [специальной сборки PX4 для Клевера](firmware.md#прошивка-для-клевера). Перед выполнением флипа необходимо принять все меры безопасности. + +### # {#calibrate-gyro} + +Произвести калибровку гироскопа: + +```python +from pymavlink import mavutil +from mavros_msgs.srv import CommandLong +from mavros_msgs.msg import State + +# ... + +send_command = rospy.ServiceProxy('/mavros/cmd/command', CommandLong) + +def calibrate_gyro(): + rospy.loginfo('Calibrate gyro') + if not send_command(command=mavutil.mavlink.MAV_CMD_PREFLIGHT_CALIBRATION, param1=1).success: + return False + + calibrating = False + while not rospy.is_shutdown(): + state = rospy.wait_for_message('mavros/state', State) + if state.system_status == mavutil.mavlink.MAV_STATE_CALIBRATING or state.system_status == mavutil.mavlink.MAV_STATE_UNINIT: + calibrating = True + elif calibrating and state.system_status == mavutil.mavlink.MAV_STATE_STANDBY: + rospy.loginfo('Calibrating finished') + return True + +calibrate_gyro() +``` + +> **Note** В процессе калибровки гироскопов дрон нельзя двигать.