mirror of
https://gitee.com/xiaohuolufeihua/bizhang_-obav.git
synced 2026-05-21 01:12:11 +00:00
vmount: implement VEHICLE_CMD_DO_SET_ROI_WPNEXT_OFFSET
This commit is contained in:
@@ -12,6 +12,8 @@ float64 lat # Latitude to point to
|
|||||||
float64 lon # Longitude to point to
|
float64 lon # Longitude to point to
|
||||||
float32 alt # Altitude to point to
|
float32 alt # Altitude to point to
|
||||||
|
|
||||||
float32 pitchOffset # Additional pitch offset to next waypoint
|
# additional angle offsets to next waypoint (only used with ROI_WPNEXT)
|
||||||
float32 rollOffset # Additional roll offset to next waypoint
|
float32 roll_offset # angle offset in rad
|
||||||
float32 yawOffset # Additional yaw offset to next waypoint
|
float32 pitch_offset # angle offset in rad
|
||||||
|
float32 yaw_offset # angle offset in rad
|
||||||
|
|
||||||
|
|||||||
@@ -75,6 +75,8 @@ struct ControlData {
|
|||||||
double lat; /**< latitude in [deg] */
|
double lat; /**< latitude in [deg] */
|
||||||
float altitude; /**< altitude in [m] */
|
float altitude; /**< altitude in [m] */
|
||||||
float roll_angle; /**< roll is set to a fixed angle. Set to 0 for level horizon [rad] */
|
float roll_angle; /**< roll is set to a fixed angle. Set to 0 for level horizon [rad] */
|
||||||
|
float pitch_angle_offset; /**< angular offset for pitch [rad] */
|
||||||
|
float yaw_angle_offset; /**< angular offset for yaw [rad] */
|
||||||
float pitch_fixed_angle; /**< ignored if < -pi, otherwise use a fixed pitch angle instead of the altitude */
|
float pitch_fixed_angle; /**< ignored if < -pi, otherwise use a fixed pitch angle instead of the altitude */
|
||||||
} lonlat;
|
} lonlat;
|
||||||
} type_data;
|
} type_data;
|
||||||
|
|||||||
@@ -72,6 +72,8 @@ void InputBase::control_data_set_lon_lat(double lon, double lat, float altitude,
|
|||||||
_control_data.type_data.lonlat.altitude = altitude;
|
_control_data.type_data.lonlat.altitude = altitude;
|
||||||
_control_data.type_data.lonlat.roll_angle = roll_angle;
|
_control_data.type_data.lonlat.roll_angle = roll_angle;
|
||||||
_control_data.type_data.lonlat.pitch_fixed_angle = pitch_fixed_angle;
|
_control_data.type_data.lonlat.pitch_fixed_angle = pitch_fixed_angle;
|
||||||
|
_control_data.type_data.lonlat.pitch_angle_offset = 0.f;
|
||||||
|
_control_data.type_data.lonlat.yaw_angle_offset = 0.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
} /* namespace vmount */
|
} /* namespace vmount */
|
||||||
|
|||||||
@@ -116,12 +116,15 @@ int InputMavlinkROI::update_impl(unsigned int timeout_ms, ControlData **control_
|
|||||||
*control_data = &_control_data;
|
*control_data = &_control_data;
|
||||||
|
|
||||||
} else if (vehicle_roi.mode == vehicle_roi_s::ROI_WPNEXT) {
|
} else if (vehicle_roi.mode == vehicle_roi_s::ROI_WPNEXT) {
|
||||||
|
_control_data.type = ControlData::Type::LonLat;
|
||||||
_read_control_data_from_position_setpoint_sub();
|
_read_control_data_from_position_setpoint_sub();
|
||||||
_control_data.type_data.lonlat.roll_angle = 0.f;
|
|
||||||
_control_data.type_data.lonlat.pitch_fixed_angle = -10.f;
|
_control_data.type_data.lonlat.pitch_fixed_angle = -10.f;
|
||||||
|
|
||||||
*control_data = &_control_data;
|
_control_data.type_data.lonlat.roll_angle = vehicle_roi.roll_offset;
|
||||||
|
_control_data.type_data.lonlat.pitch_angle_offset = vehicle_roi.pitch_offset;
|
||||||
|
_control_data.type_data.lonlat.yaw_angle_offset = vehicle_roi.yaw_offset;
|
||||||
|
|
||||||
|
*control_data = &_control_data;
|
||||||
|
|
||||||
} else if (vehicle_roi.mode == vehicle_roi_s::ROI_LOCATION) {
|
} else if (vehicle_roi.mode == vehicle_roi_s::ROI_LOCATION) {
|
||||||
control_data_set_lon_lat(vehicle_roi.lon, vehicle_roi.lat, vehicle_roi.alt);
|
control_data_set_lon_lat(vehicle_roi.lon, vehicle_roi.lat, vehicle_roi.alt);
|
||||||
|
|||||||
@@ -191,8 +191,8 @@ void OutputBase::_handle_position_update(bool force_update)
|
|||||||
- vehicle_global_position.yaw;
|
- vehicle_global_position.yaw;
|
||||||
|
|
||||||
_angle_setpoints[0] = roll;
|
_angle_setpoints[0] = roll;
|
||||||
_angle_setpoints[1] = pitch;
|
_angle_setpoints[1] = pitch + _cur_control_data->type_data.lonlat.pitch_angle_offset;
|
||||||
_angle_setpoints[2] = yaw;
|
_angle_setpoints[2] = yaw + _cur_control_data->type_data.lonlat.yaw_angle_offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OutputBase::_calculate_output_angles(const hrt_abstime &t)
|
void OutputBase::_calculate_output_angles(const hrt_abstime &t)
|
||||||
|
|||||||
@@ -503,9 +503,9 @@ Navigator::run()
|
|||||||
|
|
||||||
case vehicle_command_s::VEHICLE_CMD_DO_SET_ROI_WPNEXT_OFFSET:
|
case vehicle_command_s::VEHICLE_CMD_DO_SET_ROI_WPNEXT_OFFSET:
|
||||||
_vroi.mode = vehicle_command_s::VEHICLE_ROI_WPNEXT;
|
_vroi.mode = vehicle_command_s::VEHICLE_ROI_WPNEXT;
|
||||||
_vroi.pitchOffset = cmd.param5;
|
_vroi.pitch_offset = (float)cmd.param5 * M_DEG_TO_RAD_F;
|
||||||
_vroi.rollOffset = cmd.param6;
|
_vroi.roll_offset = (float)cmd.param6 * M_DEG_TO_RAD_F;
|
||||||
_vroi.yawOffset = cmd.param7;
|
_vroi.yaw_offset = (float)cmd.param7 * M_DEG_TO_RAD_F;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case vehicle_command_s::VEHICLE_CMD_DO_SET_ROI_NONE:
|
case vehicle_command_s::VEHICLE_CMD_DO_SET_ROI_NONE:
|
||||||
|
|||||||
Reference in New Issue
Block a user