mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-23 19:53:34 +08:00
add camera capture mode and edge params
This commit is contained in:
committed by
Daniel Agar
parent
d49752141d
commit
42e2bd47c4
@@ -54,6 +54,8 @@ CameraCapture::CameraCapture() :
|
|||||||
_command_ack_pub(nullptr),
|
_command_ack_pub(nullptr),
|
||||||
_command_sub(-1),
|
_command_sub(-1),
|
||||||
_camera_capture_feedback(false),
|
_camera_capture_feedback(false),
|
||||||
|
_camera_capture_mode(0),
|
||||||
|
_camera_capture_edge(0),
|
||||||
_capture_seq(0),
|
_capture_seq(0),
|
||||||
_last_fall_time(0),
|
_last_fall_time(0),
|
||||||
_last_exposure_time(0),
|
_last_exposure_time(0),
|
||||||
@@ -69,6 +71,12 @@ CameraCapture::CameraCapture() :
|
|||||||
_p_camera_capture_feedback = param_find("CAM_CAP_FBACK");
|
_p_camera_capture_feedback = param_find("CAM_CAP_FBACK");
|
||||||
param_get(_p_camera_capture_feedback, &_camera_capture_feedback);
|
param_get(_p_camera_capture_feedback, &_camera_capture_feedback);
|
||||||
|
|
||||||
|
_p_camera_capture_mode = param_find("CAM_CAP_MODE");
|
||||||
|
param_get(_p_camera_capture_mode, &_camera_capture_mode);
|
||||||
|
|
||||||
|
_p_camera_capture_edge = param_find("CAM_CAP_EDGE");
|
||||||
|
param_get(_p_camera_capture_edge, &_camera_capture_edge);
|
||||||
|
|
||||||
if (_camera_capture_feedback != 0) {
|
if (_camera_capture_feedback != 0) {
|
||||||
struct camera_trigger_s trigger = {};
|
struct camera_trigger_s trigger = {};
|
||||||
_trigger_pub = orb_advertise(ORB_ID(camera_trigger), &trigger);
|
_trigger_pub = orb_advertise(ORB_ID(camera_trigger), &trigger);
|
||||||
@@ -88,7 +96,13 @@ CameraCapture::capture_callback(uint32_t chan_index,
|
|||||||
if (_last_fall_time > 0) {
|
if (_last_fall_time > 0) {
|
||||||
struct camera_trigger_s trigger {};
|
struct camera_trigger_s trigger {};
|
||||||
|
|
||||||
trigger.timestamp = edge_time - ((edge_time - _last_fall_time) / 2); // Get timestamp of mid-exposure
|
if (_camera_capture_mode == 0) {
|
||||||
|
trigger.timestamp = hrt_absolute_time();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
trigger.timestamp = edge_time - ((edge_time - _last_fall_time) / 2); // Get timestamp of mid-exposure
|
||||||
|
}
|
||||||
|
|
||||||
trigger.seq = _capture_seq++;
|
trigger.seq = _capture_seq++;
|
||||||
|
|
||||||
if (_camera_capture_feedback != 0) {
|
if (_camera_capture_feedback != 0) {
|
||||||
@@ -182,12 +196,26 @@ CameraCapture::set_capture_control(bool enabled)
|
|||||||
{
|
{
|
||||||
if (enabled) {
|
if (enabled) {
|
||||||
// register callbacks
|
// register callbacks
|
||||||
//up_input_capture_set(4, Both, 0, &CameraCapture::capture_trampoline, this);
|
switch (_camera_capture_edge) {
|
||||||
up_input_capture_set(5, Falling, 0, &CameraCapture::capture_trampoline, this);
|
case 0:
|
||||||
|
up_input_capture_set(5, Rising, 0, &CameraCapture::capture_trampoline, this);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
up_input_capture_set(5, Falling, 0, &CameraCapture::capture_trampoline, this);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
up_input_capture_set(5, Both, 0, &CameraCapture::capture_trampoline, this);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
_capture_enabled = true;
|
_capture_enabled = true;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
//up_input_capture_set(4, Disabled, 0, NULL, NULL);
|
|
||||||
up_input_capture_set(5, Disabled, 0, NULL, NULL);
|
up_input_capture_set(5, Disabled, 0, NULL, NULL);
|
||||||
_capture_enabled = false;
|
_capture_enabled = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -114,6 +114,10 @@ private:
|
|||||||
float _strobe_delay;
|
float _strobe_delay;
|
||||||
param_t _p_camera_capture_feedback;
|
param_t _p_camera_capture_feedback;
|
||||||
int32_t _camera_capture_feedback;
|
int32_t _camera_capture_feedback;
|
||||||
|
param_t _p_camera_capture_mode;
|
||||||
|
int32_t _camera_capture_mode;
|
||||||
|
param_t _p_camera_capture_edge;
|
||||||
|
int32_t _camera_capture_edge;
|
||||||
|
|
||||||
// Signal capture statistics
|
// Signal capture statistics
|
||||||
uint32_t _capture_seq;
|
uint32_t _capture_seq;
|
||||||
|
|||||||
@@ -53,10 +53,35 @@ PARAM_DEFINE_FLOAT(CAM_CAP_DELAY, 1.0f);
|
|||||||
/**
|
/**
|
||||||
* Camera capture feedback
|
* Camera capture feedback
|
||||||
*
|
*
|
||||||
* Enables camera feedback from hotshoe on camera..
|
* Enables camera capture feedback
|
||||||
*
|
*
|
||||||
* @boolean
|
* @boolean
|
||||||
* @group Camera Control
|
* @group Camera Control
|
||||||
* @reboot_required true
|
* @reboot_required true
|
||||||
*/
|
*/
|
||||||
PARAM_DEFINE_INT32(CAM_CAP_FBACK, 0);
|
PARAM_DEFINE_INT32(CAM_CAP_FBACK, 0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Camera capture timestamping mode
|
||||||
|
*
|
||||||
|
* Change time measurement
|
||||||
|
*
|
||||||
|
* @value 0 Get absolute timestamp
|
||||||
|
* @value 1 Get timestamp of mid exposure
|
||||||
|
*
|
||||||
|
* @group Camera Control
|
||||||
|
* @reboot_required true
|
||||||
|
*/
|
||||||
|
PARAM_DEFINE_INT32(CAM_CAP_MODE, 0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Camera capture edge
|
||||||
|
*
|
||||||
|
* @value 0 Rising edge
|
||||||
|
* @value 1 Falling edge
|
||||||
|
* @value 2 Both edges
|
||||||
|
*
|
||||||
|
* @group Camera Control
|
||||||
|
* @reboot_required true
|
||||||
|
*/
|
||||||
|
PARAM_DEFINE_INT32(CAM_CAP_EDGE, 0);
|
||||||
Reference in New Issue
Block a user