mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-18 06:38:29 -04:00
AP_Camera: add parameter CAMx_MNT_INST for associating camera with corresponding mount
This commit is contained in:
parent
ea9f4a79f5
commit
47977b1635
@ -93,6 +93,16 @@ void AP_Camera_Backend::update()
|
||||
take_picture();
|
||||
}
|
||||
|
||||
// get corresponding mount instance for the camera
|
||||
uint8_t AP_Camera_Backend::get_mount_instance() const
|
||||
{
|
||||
// instance 0 means default
|
||||
if (_params.mount_instance.get() == 0) {
|
||||
return _instance;
|
||||
}
|
||||
return _params.mount_instance.get() - 1;
|
||||
}
|
||||
|
||||
// take a picture. returns true on success
|
||||
bool AP_Camera_Backend::take_picture()
|
||||
{
|
||||
|
@ -144,6 +144,9 @@ protected:
|
||||
void Write_Trigger();
|
||||
void Write_CameraInfo(enum LogMessages msg, uint64_t timestamp_us=0);
|
||||
|
||||
// get corresponding mount instance for the camera
|
||||
uint8_t get_mount_instance() const;
|
||||
|
||||
// internal members
|
||||
uint8_t _instance; // this instance's number
|
||||
bool timer_installed; // true if feedback pin change detected using timer
|
||||
|
@ -68,8 +68,7 @@ void AP_Camera_Backend::Write_CameraInfo(enum LogMessages msg, uint64_t timestam
|
||||
#if HAL_MOUNT_ENABLED
|
||||
auto *mount = AP_Mount::get_singleton();
|
||||
if (mount!= nullptr) {
|
||||
// assuming camera instance matches mount instance
|
||||
mount->write_log(_instance, timestamp_us);
|
||||
mount->write_log(get_mount_instance(), timestamp_us);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ bool AP_Camera_Mount::trigger_pic()
|
||||
{
|
||||
AP_Mount* mount = AP::mount();
|
||||
if (mount != nullptr) {
|
||||
mount->take_picture(0);
|
||||
mount->take_picture(get_mount_instance());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@ -22,7 +22,7 @@ bool AP_Camera_Mount::record_video(bool start_recording)
|
||||
{
|
||||
AP_Mount* mount = AP::mount();
|
||||
if (mount != nullptr) {
|
||||
return mount->record_video(0, start_recording);
|
||||
return mount->record_video(get_mount_instance(), start_recording);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -32,7 +32,7 @@ bool AP_Camera_Mount::set_zoom(ZoomType zoom_type, float zoom_value)
|
||||
{
|
||||
AP_Mount* mount = AP::mount();
|
||||
if (mount != nullptr) {
|
||||
return mount->set_zoom(0, zoom_type, zoom_value);
|
||||
return mount->set_zoom(get_mount_instance(), zoom_type, zoom_value);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -43,7 +43,7 @@ SetFocusResult AP_Camera_Mount::set_focus(FocusType focus_type, float focus_valu
|
||||
{
|
||||
AP_Mount* mount = AP::mount();
|
||||
if (mount != nullptr) {
|
||||
return mount->set_focus(0, focus_type, focus_value);
|
||||
return mount->set_focus(get_mount_instance(), focus_type, focus_value);
|
||||
}
|
||||
return SetFocusResult::FAILED;
|
||||
}
|
||||
@ -55,7 +55,7 @@ bool AP_Camera_Mount::set_tracking(TrackingType tracking_type, const Vector2f& p
|
||||
{
|
||||
AP_Mount* mount = AP::mount();
|
||||
if (mount != nullptr) {
|
||||
return mount->set_tracking(0, tracking_type, p1, p2);
|
||||
return mount->set_tracking(get_mount_instance(), tracking_type, p1, p2);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -66,7 +66,7 @@ bool AP_Camera_Mount::set_lens(uint8_t lens)
|
||||
{
|
||||
AP_Mount* mount = AP::mount();
|
||||
if (mount != nullptr) {
|
||||
return mount->set_lens(0, lens);
|
||||
return mount->set_lens(get_mount_instance(), lens);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -76,7 +76,7 @@ void AP_Camera_Mount::send_camera_information(mavlink_channel_t chan) const
|
||||
{
|
||||
AP_Mount* mount = AP::mount();
|
||||
if (mount != nullptr) {
|
||||
return mount->send_camera_information(0, chan);
|
||||
return mount->send_camera_information(get_mount_instance(), chan);
|
||||
}
|
||||
}
|
||||
|
||||
@ -85,7 +85,7 @@ void AP_Camera_Mount::send_camera_settings(mavlink_channel_t chan) const
|
||||
{
|
||||
AP_Mount* mount = AP::mount();
|
||||
if (mount != nullptr) {
|
||||
return mount->send_camera_settings(0, chan);
|
||||
return mount->send_camera_settings(get_mount_instance(), chan);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -81,6 +81,12 @@ const AP_Param::GroupInfo AP_Camera_Params::var_info[] = {
|
||||
// @User: Standard
|
||||
AP_GROUPINFO("_OPTIONS", 10, AP_Camera_Params, options, 0),
|
||||
|
||||
// @Param: _MNT_INST
|
||||
// @DisplayName: Camera Mount instance
|
||||
// @Description: Mount instance camera is associated with. 0 means camera and mount have identical instance numbers e.g. camera1 and mount1
|
||||
// @User: Standard
|
||||
AP_GROUPINFO("_MNT_INST", 11, AP_Camera_Params, mount_instance, 0),
|
||||
|
||||
AP_GROUPEND
|
||||
|
||||
};
|
||||
|
@ -22,6 +22,7 @@ public:
|
||||
AP_Int8 relay_on; // relay value to trigger camera
|
||||
AP_Float interval_min; // minimum time (in seconds) between shots required by camera
|
||||
AP_Int8 options; // whether to start recording when armed and stop when disarmed
|
||||
AP_Int8 mount_instance; // mount instance to which camera is associated with
|
||||
|
||||
// pin number for accurate camera feedback messages
|
||||
AP_Int8 feedback_pin;
|
||||
|
Loading…
Reference in New Issue
Block a user