mirror of https://github.com/ArduPilot/ardupilot
AP_Mount: Viewpro supports get rangefinder distance
This commit is contained in:
parent
a47009e103
commit
9d09739044
|
@ -824,6 +824,16 @@ void AP_Mount::send_camera_settings(uint8_t instance, mavlink_channel_t chan) co
|
||||||
backend->send_camera_settings(chan);
|
backend->send_camera_settings(chan);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get rangefinder distance. Returns true on success
|
||||||
|
bool AP_Mount::get_rangefinder_distance(uint8_t instance, float& distance_m) const
|
||||||
|
{
|
||||||
|
auto *backend = get_instance(instance);
|
||||||
|
if (backend == nullptr) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return backend->get_rangefinder_distance(distance_m);
|
||||||
|
}
|
||||||
|
|
||||||
AP_Mount_Backend *AP_Mount::get_primary() const
|
AP_Mount_Backend *AP_Mount::get_primary() const
|
||||||
{
|
{
|
||||||
return get_instance(_primary);
|
return get_instance(_primary);
|
||||||
|
|
|
@ -247,6 +247,13 @@ public:
|
||||||
// send camera settings message to GCS
|
// send camera settings message to GCS
|
||||||
void send_camera_settings(uint8_t instance, mavlink_channel_t chan) const;
|
void send_camera_settings(uint8_t instance, mavlink_channel_t chan) const;
|
||||||
|
|
||||||
|
//
|
||||||
|
// rangefinder
|
||||||
|
//
|
||||||
|
|
||||||
|
// get rangefinder distance. Returns true on success
|
||||||
|
bool get_rangefinder_distance(uint8_t instance, float& distance_m) const;
|
||||||
|
|
||||||
// parameter var table
|
// parameter var table
|
||||||
static const struct AP_Param::GroupInfo var_info[];
|
static const struct AP_Param::GroupInfo var_info[];
|
||||||
|
|
||||||
|
|
|
@ -387,6 +387,10 @@ void AP_Mount_Backend::write_log(uint64_t timestamp_us)
|
||||||
bool target_yaw_is_ef = false;
|
bool target_yaw_is_ef = false;
|
||||||
IGNORE_RETURN(get_angle_target(target_roll, target_pitch, target_yaw, target_yaw_is_ef));
|
IGNORE_RETURN(get_angle_target(target_roll, target_pitch, target_yaw, target_yaw_is_ef));
|
||||||
|
|
||||||
|
// get rangefinder distance
|
||||||
|
float rangefinder_dist = nanf;
|
||||||
|
IGNORE_RETURN(get_rangefinder_distance(rangefinder_dist));
|
||||||
|
|
||||||
const struct log_Mount pkt {
|
const struct log_Mount pkt {
|
||||||
LOG_PACKET_HEADER_INIT(static_cast<uint8_t>(LOG_MOUNT_MSG)),
|
LOG_PACKET_HEADER_INIT(static_cast<uint8_t>(LOG_MOUNT_MSG)),
|
||||||
time_us : (timestamp_us > 0) ? timestamp_us : AP_HAL::micros64(),
|
time_us : (timestamp_us > 0) ? timestamp_us : AP_HAL::micros64(),
|
||||||
|
@ -399,6 +403,7 @@ void AP_Mount_Backend::write_log(uint64_t timestamp_us)
|
||||||
actual_yaw_bf : yaw_bf,
|
actual_yaw_bf : yaw_bf,
|
||||||
desired_yaw_ef: target_yaw_is_ef ? target_yaw : nanf,
|
desired_yaw_ef: target_yaw_is_ef ? target_yaw : nanf,
|
||||||
actual_yaw_ef : yaw_ef,
|
actual_yaw_ef : yaw_ef,
|
||||||
|
rangefinder_dist : rangefinder_dist,
|
||||||
};
|
};
|
||||||
AP::logger().WriteCriticalBlock(&pkt, sizeof(pkt));
|
AP::logger().WriteCriticalBlock(&pkt, sizeof(pkt));
|
||||||
}
|
}
|
||||||
|
|
|
@ -178,6 +178,13 @@ public:
|
||||||
// send camera settings message to GCS
|
// send camera settings message to GCS
|
||||||
virtual void send_camera_settings(mavlink_channel_t chan) const {}
|
virtual void send_camera_settings(mavlink_channel_t chan) const {}
|
||||||
|
|
||||||
|
//
|
||||||
|
// rangefinder
|
||||||
|
//
|
||||||
|
|
||||||
|
// get rangefinder distance. Returns true on success
|
||||||
|
virtual bool get_rangefinder_distance(float& distance_m) const { return false; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
enum class MountTargetType {
|
enum class MountTargetType {
|
||||||
|
|
|
@ -370,6 +370,9 @@ void AP_Mount_Viewpro::process_packet()
|
||||||
|
|
||||||
// get optical zoom times
|
// get optical zoom times
|
||||||
_zoom_times = UINT16_VALUE(_msg_buff[_msg_buff_data_start+39], _msg_buff[_msg_buff_data_start+40]) * 0.1;
|
_zoom_times = UINT16_VALUE(_msg_buff[_msg_buff_data_start+39], _msg_buff[_msg_buff_data_start+40]) * 0.1;
|
||||||
|
|
||||||
|
// get laser rangefinder distance
|
||||||
|
_rangefinder_dist_m = UINT16_VALUE(_msg_buff[_msg_buff_data_start+33], _msg_buff[_msg_buff_data_start+34]) * 0.1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -915,4 +918,17 @@ void AP_Mount_Viewpro::send_camera_settings(mavlink_channel_t chan) const
|
||||||
NaN); // focusLevel float, percentage from 0 to 100, NaN if unknown
|
NaN); // focusLevel float, percentage from 0 to 100, NaN if unknown
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get rangefinder distance. Returns true on success
|
||||||
|
bool AP_Mount_Viewpro::get_rangefinder_distance(float& distance_m) const
|
||||||
|
{
|
||||||
|
// if not healthy or zero distance return false
|
||||||
|
// healthy() checks attitude timeout which is in same message as rangefinder distance
|
||||||
|
if (!healthy()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
distance_m = _rangefinder_dist_m;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // HAL_MOUNT_VIEWPRO_ENABLED
|
#endif // HAL_MOUNT_VIEWPRO_ENABLED
|
||||||
|
|
|
@ -84,6 +84,13 @@ public:
|
||||||
// send camera settings message to GCS
|
// send camera settings message to GCS
|
||||||
void send_camera_settings(mavlink_channel_t chan) const override;
|
void send_camera_settings(mavlink_channel_t chan) const override;
|
||||||
|
|
||||||
|
//
|
||||||
|
// rangefinder
|
||||||
|
//
|
||||||
|
|
||||||
|
// get rangefinder distance. Returns true on success
|
||||||
|
bool get_rangefinder_distance(float& distance_m) const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
// get attitude as a quaternion. returns true on success
|
// get attitude as a quaternion. returns true on success
|
||||||
|
@ -384,6 +391,7 @@ private:
|
||||||
bool _got_firmware_version; // true once we have received the firmware version
|
bool _got_firmware_version; // true once we have received the firmware version
|
||||||
uint8_t _model_name[11] {}; // model name received from gimbal
|
uint8_t _model_name[11] {}; // model name received from gimbal
|
||||||
bool _got_model_name; // true once we have received model name
|
bool _got_model_name; // true once we have received model name
|
||||||
|
float _rangefinder_dist_m; // latest rangefinder distance (in meters)
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // HAL_MOUNT_VIEWPRO_ENABLED
|
#endif // HAL_MOUNT_VIEWPRO_ENABLED
|
||||||
|
|
|
@ -6,17 +6,18 @@
|
||||||
LOG_MOUNT_MSG
|
LOG_MOUNT_MSG
|
||||||
|
|
||||||
// @LoggerMessage: MNT
|
// @LoggerMessage: MNT
|
||||||
// @Description: Mount's actual and Target/Desired RPY information
|
// @Description: Mount's desired and actual roll, pitch and yaw angles
|
||||||
// @Field: TimeUS: Time since system startup
|
// @Field: TimeUS: Time since system startup
|
||||||
// @Field: I: Instance number
|
// @Field: I: Instance number
|
||||||
// @Field: DesRoll: mount's desired roll
|
// @Field: DRoll: Desired roll
|
||||||
// @Field: Roll: mount's actual roll
|
// @Field: Roll: Actual roll
|
||||||
// @Field: DesPitch: mount's desired pitch
|
// @Field: DPitch: Desired pitch
|
||||||
// @Field: Pitch: mount's actual pitch
|
// @Field: Pitch: Actual pitch
|
||||||
// @Field: DesYawB: mount's desired yaw in body frame
|
// @Field: DYawB: Desired yaw in body frame
|
||||||
// @Field: YawB: mount's actual yaw in body frame
|
// @Field: YawB: Actual yaw in body frame
|
||||||
// @Field: DesYawE: mount's desired yaw in earth frame
|
// @Field: DYawE: Desired yaw in earth frame
|
||||||
// @Field: YawE: mount's actual yaw in earth frame
|
// @Field: YawE: Actual yaw in earth frame
|
||||||
|
// @Field: Dist: Rangefinder distance
|
||||||
|
|
||||||
struct PACKED log_Mount {
|
struct PACKED log_Mount {
|
||||||
LOG_PACKET_HEADER;
|
LOG_PACKET_HEADER;
|
||||||
|
@ -30,9 +31,10 @@ struct PACKED log_Mount {
|
||||||
float actual_yaw_bf;
|
float actual_yaw_bf;
|
||||||
float desired_yaw_ef;
|
float desired_yaw_ef;
|
||||||
float actual_yaw_ef;
|
float actual_yaw_ef;
|
||||||
|
float rangefinder_dist;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define LOG_STRUCTURE_FROM_MOUNT \
|
#define LOG_STRUCTURE_FROM_MOUNT \
|
||||||
{ LOG_MOUNT_MSG, sizeof(log_Mount), \
|
{ LOG_MOUNT_MSG, sizeof(log_Mount), \
|
||||||
"MNT", "QBffffffff","TimeUS,I,DesRoll,Roll,DesPitch,Pitch,DesYawB,YawB,DesYawE,YawE", "s#dddddddd", "F---------" },
|
"MNT", "QBfffffffff","TimeUS,I,DRoll,Roll,DPitch,Pitch,DYawB,YawB,DYawE,YawE,Dist", "s#ddddddddm", "F---------0" },
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue