mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-09 22:49:53 +08:00
[doc] Correct some doxygen comments
This commit is contained in:
@@ -231,39 +231,39 @@ void adc_init(void)
|
||||
/* Init GPIO ports for ADC operation
|
||||
*/
|
||||
#if USE_ADC_1
|
||||
PRINT_CONFIG_MSG("Info: Using ADC_1");
|
||||
PRINT_CONFIG_MSG("Info: Using ADC_1")
|
||||
gpio_setup_pin_analog(ADC_1_GPIO_PORT, ADC_1_GPIO_PIN);
|
||||
#endif
|
||||
#if USE_ADC_2
|
||||
PRINT_CONFIG_MSG("Info: Using ADC_2");
|
||||
PRINT_CONFIG_MSG("Info: Using ADC_2")
|
||||
gpio_setup_pin_analog(ADC_2_GPIO_PORT, ADC_2_GPIO_PIN);
|
||||
#endif
|
||||
#if USE_ADC_3
|
||||
PRINT_CONFIG_MSG("Info: Using ADC_3");
|
||||
PRINT_CONFIG_MSG("Info: Using ADC_3")
|
||||
gpio_setup_pin_analog(ADC_3_GPIO_PORT, ADC_3_GPIO_PIN);
|
||||
#endif
|
||||
#if USE_ADC_4
|
||||
PRINT_CONFIG_MSG("Info: Using ADC_4");
|
||||
PRINT_CONFIG_MSG("Info: Using ADC_4")
|
||||
gpio_setup_pin_analog(ADC_4_GPIO_PORT, ADC_4_GPIO_PIN);
|
||||
#endif
|
||||
#if USE_ADC_5
|
||||
PRINT_CONFIG_MSG("Info: Using ADC_5");
|
||||
PRINT_CONFIG_MSG("Info: Using ADC_5")
|
||||
gpio_setup_pin_analog(ADC_5_GPIO_PORT, ADC_5_GPIO_PIN);
|
||||
#endif
|
||||
#if USE_ADC_6
|
||||
PRINT_CONFIG_MSG("Info: Using ADC_6");
|
||||
PRINT_CONFIG_MSG("Info: Using ADC_6")
|
||||
gpio_setup_pin_analog(ADC_6_GPIO_PORT, ADC_6_GPIO_PIN);
|
||||
#endif
|
||||
#if USE_ADC_7
|
||||
PRINT_CONFIG_MSG("Info: Using ADC_7");
|
||||
PRINT_CONFIG_MSG("Info: Using ADC_7")
|
||||
gpio_setup_pin_analog(ADC_7_GPIO_PORT, ADC_7_GPIO_PIN);
|
||||
#endif
|
||||
#if USE_ADC_8
|
||||
PRINT_CONFIG_MSG("Info: Using ADC_8");
|
||||
PRINT_CONFIG_MSG("Info: Using ADC_8")
|
||||
gpio_setup_pin_analog(ADC_8_GPIO_PORT, ADC_8_GPIO_PIN);
|
||||
#endif
|
||||
#if USE_ADC_9
|
||||
PRINT_CONFIG_MSG("Info: Using ADC_9");
|
||||
PRINT_CONFIG_MSG("Info: Using ADC_9")
|
||||
gpio_setup_pin_analog(ADC_9_GPIO_PORT, ADC_9_GPIO_PIN);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -109,8 +109,8 @@ struct bmp180_calib_t {
|
||||
|
||||
/* Main navdata structure */
|
||||
struct navdata_t {
|
||||
bool_t is_initialized; //< Check if the navdata board is initialized
|
||||
int fd; //< The navdata file pointer
|
||||
bool_t is_initialized; ///< Check if the navdata board is initialized
|
||||
int fd; ///< The navdata file pointer
|
||||
|
||||
uint32_t totalBytesRead;
|
||||
uint32_t packetsRead;
|
||||
@@ -118,13 +118,13 @@ struct navdata_t {
|
||||
uint32_t lost_imu_frames;
|
||||
uint16_t last_packet_number;
|
||||
|
||||
struct navdata_measure_t measure; //< Main navdata packet receieved from navboard
|
||||
struct bmp180_calib_t bmp180_calib; //< BMP180 calibration receieved from navboard
|
||||
struct navdata_measure_t measure; ///< Main navdata packet receieved from navboard
|
||||
struct bmp180_calib_t bmp180_calib; ///< BMP180 calibration receieved from navboard
|
||||
|
||||
bool_t baro_calibrated; //< Whenever the baro is calibrated
|
||||
bool_t imu_available; //< Whenever the imu is available
|
||||
bool_t baro_available; //< Whenever the baro is available
|
||||
bool_t imu_lost; //< Whenever the imu is lost
|
||||
bool_t baro_calibrated; ///< Whenever the baro is calibrated
|
||||
bool_t imu_available; ///< Whenever the imu is available
|
||||
bool_t baro_available; ///< Whenever the baro is available
|
||||
bool_t imu_lost; ///< Whenever the imu is lost
|
||||
};
|
||||
extern struct navdata_t navdata;
|
||||
|
||||
|
||||
@@ -30,26 +30,26 @@
|
||||
/* Print the configurations */
|
||||
#if USE_UDP0
|
||||
struct udp_periph udp0;
|
||||
PRINT_CONFIG_VAR(UDP0_HOST);
|
||||
PRINT_CONFIG_VAR(UDP0_PORT_OUT);
|
||||
PRINT_CONFIG_VAR(UDP0_PORT_IN);
|
||||
PRINT_CONFIG_VAR(UDP0_BROADCAST);
|
||||
PRINT_CONFIG_VAR(UDP0_HOST)
|
||||
PRINT_CONFIG_VAR(UDP0_PORT_OUT)
|
||||
PRINT_CONFIG_VAR(UDP0_PORT_IN)
|
||||
PRINT_CONFIG_VAR(UDP0_BROADCAST)
|
||||
#endif // USE_UDP0
|
||||
|
||||
#if USE_UDP1
|
||||
struct udp_periph udp1;
|
||||
PRINT_CONFIG_VAR(UDP1_HOST);
|
||||
PRINT_CONFIG_VAR(UDP1_PORT_OUT);
|
||||
PRINT_CONFIG_VAR(UDP1_PORT_IN);
|
||||
PRINT_CONFIG_VAR(UDP1_BROADCAST);
|
||||
PRINT_CONFIG_VAR(UDP1_HOST)
|
||||
PRINT_CONFIG_VAR(UDP1_PORT_OUT)
|
||||
PRINT_CONFIG_VAR(UDP1_PORT_IN)
|
||||
PRINT_CONFIG_VAR(UDP1_BROADCAST)
|
||||
#endif // USE_UDP1
|
||||
|
||||
#if USE_UDP2
|
||||
struct udp_periph udp2;
|
||||
PRINT_CONFIG_VAR(UDP2_HOST);
|
||||
PRINT_CONFIG_VAR(UDP2_PORT_OUT);
|
||||
PRINT_CONFIG_VAR(UDP2_PORT_IN);
|
||||
PRINT_CONFIG_VAR(UDP2_BROADCAST);
|
||||
PRINT_CONFIG_VAR(UDP2_HOST)
|
||||
PRINT_CONFIG_VAR(UDP2_PORT_OUT)
|
||||
PRINT_CONFIG_VAR(UDP2_PORT_IN)
|
||||
PRINT_CONFIG_VAR(UDP2_BROADCAST)
|
||||
#endif // USE_UDP2
|
||||
|
||||
/**
|
||||
|
||||
@@ -35,26 +35,26 @@
|
||||
#include "std.h"
|
||||
#include "lib/vision/image.h"
|
||||
|
||||
#define V4L2_IMG_NONE 255 //< There currently no image available
|
||||
#define V4L2_IMG_NONE 255 ///< There currently no image available
|
||||
|
||||
/* V4L2 memory mapped image buffer */
|
||||
struct v4l2_img_buf {
|
||||
size_t length; //< The size of the buffer
|
||||
struct timeval timestamp; //< The time value of the image
|
||||
void *buf; //< Pointer to the memory mapped buffer
|
||||
size_t length; ///< The size of the buffer
|
||||
struct timeval timestamp; ///< The time value of the image
|
||||
void *buf; ///< Pointer to the memory mapped buffer
|
||||
};
|
||||
|
||||
/* V4L2 device */
|
||||
struct v4l2_device {
|
||||
char *name; //< The name of the device
|
||||
int fd; //< The file pointer to the device
|
||||
pthread_t thread; //< The thread that handles the images
|
||||
uint16_t w; //< The width of the image
|
||||
uint16_t h; //< The height of the image
|
||||
uint8_t buffers_cnt; //< The number of image buffers
|
||||
volatile uint8_t buffers_deq_idx; //< The current dequeued index
|
||||
pthread_mutex_t mutex; //< Mutex lock for enqueue/dequeue of buffers (change the deq_idx)
|
||||
struct v4l2_img_buf *buffers; //< The memory mapped image buffers
|
||||
char *name; ///< The name of the device
|
||||
int fd; ///< The file pointer to the device
|
||||
pthread_t thread; ///< The thread that handles the images
|
||||
uint16_t w; ///< The width of the image
|
||||
uint16_t h; ///< The height of the image
|
||||
uint8_t buffers_cnt; ///< The number of image buffers
|
||||
volatile uint8_t buffers_deq_idx; ///< The current dequeued index
|
||||
pthread_mutex_t mutex; ///< Mutex lock for enqueue/dequeue of buffers (change the deq_idx)
|
||||
struct v4l2_img_buf *buffers; ///< The memory mapped image buffers
|
||||
};
|
||||
|
||||
/* External functions */
|
||||
|
||||
@@ -32,35 +32,35 @@
|
||||
|
||||
/* The different type of images we currently support */
|
||||
enum image_type {
|
||||
IMAGE_YUV422, //< UYVY format (uint16 per pixel)
|
||||
IMAGE_GRAYSCALE, //< Grayscale image with only the Y part (uint8 per pixel)
|
||||
IMAGE_JPEG, //< An JPEG encoded image (not per pixel encoded)
|
||||
IMAGE_GRADIENT //< An image gradient (int16 per pixel)
|
||||
IMAGE_YUV422, ///< UYVY format (uint16 per pixel)
|
||||
IMAGE_GRAYSCALE, ///< Grayscale image with only the Y part (uint8 per pixel)
|
||||
IMAGE_JPEG, ///< An JPEG encoded image (not per pixel encoded)
|
||||
IMAGE_GRADIENT ///< An image gradient (int16 per pixel)
|
||||
};
|
||||
|
||||
/* Main image structure */
|
||||
struct image_t {
|
||||
enum image_type type; //< The image type
|
||||
uint16_t w; //< Image width
|
||||
uint16_t h; //< Image height
|
||||
struct timeval ts; //< The timestamp of creation
|
||||
enum image_type type; ///< The image type
|
||||
uint16_t w; ///< Image width
|
||||
uint16_t h; ///< Image height
|
||||
struct timeval ts; ///< The timestamp of creation
|
||||
|
||||
uint8_t buf_idx; //< Buffer index for V4L2 freeing
|
||||
uint32_t buf_size; //< The buffer size
|
||||
void *buf; //< Image buffer (depending on the image_type)
|
||||
uint8_t buf_idx; ///< Buffer index for V4L2 freeing
|
||||
uint32_t buf_size; ///< The buffer size
|
||||
void *buf; ///< Image buffer (depending on the image_type)
|
||||
};
|
||||
|
||||
/* Image point structure */
|
||||
struct point_t {
|
||||
uint16_t x; //< The x coordinate of the point
|
||||
uint16_t y; //< The y coordinate of the point
|
||||
uint16_t x; ///< The x coordinate of the point
|
||||
uint16_t y; ///< The y coordinate of the point
|
||||
};
|
||||
|
||||
/* Vector structure for point differences */
|
||||
struct flow_t {
|
||||
struct point_t pos; //< The original position the flow comes from
|
||||
int16_t flow_x; //< The x direction flow in subpixels
|
||||
int16_t flow_y; //< The y direction flow in subpixels
|
||||
struct point_t pos; ///< The original position the flow comes from
|
||||
int16_t flow_x; ///< The x direction flow in subpixels
|
||||
int16_t flow_y; ///< The y direction flow in subpixels
|
||||
};
|
||||
|
||||
/* Usefull image functions */
|
||||
|
||||
@@ -31,24 +31,24 @@
|
||||
|
||||
/* The result calculated from the opticflow */
|
||||
struct opticflow_result_t {
|
||||
float fps; //< Frames per second of the optical flow calculation
|
||||
uint16_t corner_cnt; //< The amount of coners found by FAST9
|
||||
uint16_t tracked_cnt; //< The amount of tracked corners
|
||||
float fps; ///< Frames per second of the optical flow calculation
|
||||
uint16_t corner_cnt; ///< The amount of coners found by FAST9
|
||||
uint16_t tracked_cnt; ///< The amount of tracked corners
|
||||
|
||||
int16_t flow_x; //< Flow in x direction from the camera (in subpixels)
|
||||
int16_t flow_y; //< Flow in y direction from the camera (in subpixels)
|
||||
int16_t flow_der_x; //< The derotated flow calculation in the x direction (in subpixels)
|
||||
int16_t flow_der_y; //< The derotated flow calculation in the y direction (in subpixels)
|
||||
int16_t flow_x; ///< Flow in x direction from the camera (in subpixels)
|
||||
int16_t flow_y; ///< Flow in y direction from the camera (in subpixels)
|
||||
int16_t flow_der_x; ///< The derotated flow calculation in the x direction (in subpixels)
|
||||
int16_t flow_der_y; ///< The derotated flow calculation in the y direction (in subpixels)
|
||||
|
||||
float vel_x; //< The velocity in the x direction
|
||||
float vel_y; //< The velocity in the y direction
|
||||
float vel_x; ///< The velocity in the x direction
|
||||
float vel_y; ///< The velocity in the y direction
|
||||
};
|
||||
|
||||
/* The state of the drone when it took an image */
|
||||
struct opticflow_state_t {
|
||||
float phi; //< roll [rad]
|
||||
float theta; //< pitch [rad]
|
||||
float agl; //< height above ground [m]
|
||||
float phi; ///< roll [rad]
|
||||
float theta; ///< pitch [rad]
|
||||
float agl; ///< height above ground [m]
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -44,63 +44,63 @@
|
||||
#ifndef OPTICFLOW_FOV_W
|
||||
#define OPTICFLOW_FOV_W 0.89360857702
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_FOV_W);
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_FOV_W)
|
||||
|
||||
#ifndef OPTICFLOW_FOV_H
|
||||
#define OPTICFLOW_FOV_H 0.67020643276
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_FOV_H);
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_FOV_H)
|
||||
|
||||
#ifndef OPTICFLOW_FX
|
||||
#define OPTICFLOW_FX 343.1211
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_FX);
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_FX)
|
||||
|
||||
#ifndef OPTICFLOW_FY
|
||||
#define OPTICFLOW_FY 348.5053
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_FY);
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_FY)
|
||||
|
||||
/* Set the default values */
|
||||
#ifndef OPTICFLOW_MAX_TRACK_CORNERS
|
||||
#define OPTICFLOW_MAX_TRACK_CORNERS 25
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_MAX_TRACK_CORNERS);
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_MAX_TRACK_CORNERS)
|
||||
|
||||
#ifndef OPTICFLOW_WINDOW_SIZE
|
||||
#define OPTICFLOW_WINDOW_SIZE 10
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_WINDOW_SIZE);
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_WINDOW_SIZE)
|
||||
|
||||
#ifndef OPTICFLOW_SUBPIXEL_FACTOR
|
||||
#define OPTICFLOW_SUBPIXEL_FACTOR 10
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_SUBPIXEL_FACTOR);
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_SUBPIXEL_FACTOR)
|
||||
|
||||
#ifndef OPTICFLOW_MAX_ITERATIONS
|
||||
#define OPTICFLOW_MAX_ITERATIONS 10
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_MAX_ITERATIONS);
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_MAX_ITERATIONS)
|
||||
|
||||
#ifndef OPTICFLOW_THRESHOLD_VEC
|
||||
#define OPTICFLOW_THRESHOLD_VEC 2
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_THRESHOLD_VEC);
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_THRESHOLD_VEC)
|
||||
|
||||
#ifndef OPTICFLOW_FAST9_ADAPTIVE
|
||||
#define OPTICFLOW_FAST9_ADAPTIVE TRUE
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_FAST9_ADAPTIVE);
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_FAST9_ADAPTIVE)
|
||||
|
||||
#ifndef OPTICFLOW_FAST9_THRESHOLD
|
||||
#define OPTICFLOW_FAST9_THRESHOLD 20
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_FAST9_THRESHOLD);
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_FAST9_THRESHOLD)
|
||||
|
||||
#ifndef OPTICFLOW_FAST9_MIN_DISTANCE
|
||||
#define OPTICFLOW_FAST9_MIN_DISTANCE 10
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_FAST9_MIN_DISTANCE);
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_FAST9_MIN_DISTANCE)
|
||||
|
||||
/* Functions only used here */
|
||||
static uint32_t timeval_diff(struct timeval *starttime, struct timeval *finishtime);
|
||||
|
||||
@@ -35,22 +35,22 @@
|
||||
#include "lib/v4l/v4l2.h"
|
||||
|
||||
struct opticflow_t {
|
||||
bool_t got_first_img; //< If we got a image to work with
|
||||
float prev_phi; //< Phi from the previous image frame
|
||||
float prev_theta; //< Theta from the previous image frame
|
||||
struct image_t img_gray; //< Current gray image frame
|
||||
struct image_t prev_img_gray; //< Previous gray image frame
|
||||
struct timeval prev_timestamp; //< Timestamp of the previous frame, used for FPS calculation
|
||||
bool_t got_first_img; ///< If we got a image to work with
|
||||
float prev_phi; ///< Phi from the previous image frame
|
||||
float prev_theta; ///< Theta from the previous image frame
|
||||
struct image_t img_gray; ///< Current gray image frame
|
||||
struct image_t prev_img_gray; ///< Previous gray image frame
|
||||
struct timeval prev_timestamp; ///< Timestamp of the previous frame, used for FPS calculation
|
||||
|
||||
uint8_t max_track_corners; //< Maximum amount of corners Lucas Kanade should track
|
||||
uint16_t window_size; //< Window size of the Lucas Kanade calculation (needs to be even)
|
||||
uint8_t subpixel_factor; //< The amount of subpixels per pixel
|
||||
uint8_t max_iterations; //< The maximum amount of iterations the Lucas Kanade algorithm should do
|
||||
uint8_t threshold_vec; //< The threshold in x, y subpixels which the algorithm should stop
|
||||
uint8_t max_track_corners; ///< Maximum amount of corners Lucas Kanade should track
|
||||
uint16_t window_size; ///< Window size of the Lucas Kanade calculation (needs to be even)
|
||||
uint8_t subpixel_factor; ///< The amount of subpixels per pixel
|
||||
uint8_t max_iterations; ///< The maximum amount of iterations the Lucas Kanade algorithm should do
|
||||
uint8_t threshold_vec; ///< The threshold in x, y subpixels which the algorithm should stop
|
||||
|
||||
bool_t fast9_adaptive; //< Whether the FAST9 threshold should be adaptive
|
||||
uint8_t fast9_threshold; //< FAST9 corner detection threshold
|
||||
uint16_t fast9_min_distance; //< Minimum distance in pixels between corners
|
||||
bool_t fast9_adaptive; ///< Whether the FAST9 threshold should be adaptive
|
||||
uint8_t fast9_threshold; ///< FAST9 corner detection threshold
|
||||
uint16_t fast9_min_distance; ///< Minimum distance in pixels between corners
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -41,32 +41,32 @@
|
||||
#ifndef VISION_PHI_PGAIN
|
||||
#define VISION_PHI_PGAIN 400
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(VISION_PHI_PGAIN);
|
||||
PRINT_CONFIG_VAR(VISION_PHI_PGAIN)
|
||||
|
||||
#ifndef VISION_PHI_IGAIN
|
||||
#define VISION_PHI_IGAIN 20
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(VISION_PHI_IGAIN);
|
||||
PRINT_CONFIG_VAR(VISION_PHI_IGAIN)
|
||||
|
||||
#ifndef VISION_THETA_PGAIN
|
||||
#define VISION_THETA_PGAIN 400
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(VISION_THETA_PGAIN);
|
||||
PRINT_CONFIG_VAR(VISION_THETA_PGAIN)
|
||||
|
||||
#ifndef VISION_THETA_IGAIN
|
||||
#define VISION_THETA_IGAIN 20
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(VISION_THETA_IGAIN);
|
||||
PRINT_CONFIG_VAR(VISION_THETA_IGAIN)
|
||||
|
||||
#ifndef VISION_DESIRED_VX
|
||||
#define VISION_DESIRED_VX 0
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(VISION_DESIRED_VX);
|
||||
PRINT_CONFIG_VAR(VISION_DESIRED_VX)
|
||||
|
||||
#ifndef VISION_DESIRED_VY
|
||||
#define VISION_DESIRED_VY 0
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(VISION_DESIRED_VY);
|
||||
PRINT_CONFIG_VAR(VISION_DESIRED_VY)
|
||||
|
||||
/* Check the control gains */
|
||||
#if (VISION_PHI_PGAIN < 0) || \
|
||||
|
||||
@@ -37,16 +37,16 @@
|
||||
|
||||
/* The opticflow stabilization */
|
||||
struct opticflow_stab_t {
|
||||
int32_t phi_pgain; //< The roll P gain on the err_vx
|
||||
int32_t phi_igain; //< The roll I gain on the err_vx_int
|
||||
int32_t theta_pgain; //< The pitch P gain on the err_vy
|
||||
int32_t theta_igain; //< The pitch I gain on the err_vy_int
|
||||
float desired_vx; //< The desired velocity in the x direction (cm/s)
|
||||
float desired_vy; //< The desired velocity in the y direction (cm/s)
|
||||
int32_t phi_pgain; ///< The roll P gain on the err_vx
|
||||
int32_t phi_igain; ///< The roll I gain on the err_vx_int
|
||||
int32_t theta_pgain; ///< The pitch P gain on the err_vy
|
||||
int32_t theta_igain; ///< The pitch I gain on the err_vy_int
|
||||
float desired_vx; ///< The desired velocity in the x direction (cm/s)
|
||||
float desired_vy; ///< The desired velocity in the y direction (cm/s)
|
||||
|
||||
float err_vx_int; //< The integrated velocity error in x direction (m/s)
|
||||
float err_vy_int; //< The integrated velocity error in y direction (m/s)
|
||||
struct Int32Eulers cmd; //< The commands that are send to the hover loop
|
||||
float err_vx_int; ///< The integrated velocity error in x direction (m/s)
|
||||
float err_vy_int; ///< The integrated velocity error in y direction (m/s)
|
||||
struct Int32Eulers cmd; ///< The commands that are send to the hover loop
|
||||
};
|
||||
extern struct opticflow_stab_t opticflow_stab;
|
||||
|
||||
|
||||
@@ -37,45 +37,45 @@
|
||||
#include "lib/encoding/jpeg.h"
|
||||
#include "lib/encoding/rtp.h"
|
||||
|
||||
/* default sonar/agl to use in opticflow visual_estimator */
|
||||
/* Default sonar/agl to use in opticflow visual_estimator */
|
||||
#ifndef OPTICFLOW_AGL_ID
|
||||
#define OPTICFLOW_AGL_ID ABI_BROADCAST
|
||||
#define OPTICFLOW_AGL_ID ABI_BROADCAST ///< Default sonar/agl to use in opticflow visual_estimator
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_AGL_ID);
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_AGL_ID)
|
||||
|
||||
/* The video device */
|
||||
#ifndef OPTICFLOW_DEVICE
|
||||
#define OPTICFLOW_DEVICE /dev/video2
|
||||
#define OPTICFLOW_DEVICE /dev/video2 ///< The video device
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_DEVICE);
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_DEVICE)
|
||||
|
||||
/* The video device size (width, height) */
|
||||
#ifndef OPTICFLOW_DEVICE_SIZE
|
||||
#define OPTICFLOW_DEVICE_SIZE 320,240
|
||||
#define OPTICFLOW_DEVICE_SIZE 320,240 ///< The video device size (width, height)
|
||||
#endif
|
||||
#define __SIZE_HELPER(x, y) #x", "#y
|
||||
#define _SIZE_HELPER(x) __SIZE_HELPER(x)
|
||||
PRINT_CONFIG_MSG("OPTICFLOW_DEVICE_SIZE = " _SIZE_HELPER(OPTICFLOW_DEVICE_SIZE));
|
||||
PRINT_CONFIG_MSG("OPTICFLOW_DEVICE_SIZE = " _SIZE_HELPER(OPTICFLOW_DEVICE_SIZE))
|
||||
|
||||
/* The video device buffers (the amount of V4L2 buffers) */
|
||||
#ifndef OPTICFLOW_DEVICE_BUFFERS
|
||||
#define OPTICFLOW_DEVICE_BUFFERS 15
|
||||
#define OPTICFLOW_DEVICE_BUFFERS 15 ///< The video device buffers (the amount of V4L2 buffers)
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_DEVICE_BUFFERS);
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_DEVICE_BUFFERS)
|
||||
|
||||
/* The main opticflow variables */
|
||||
struct opticflow_t opticflow; //< Opticflow calculations
|
||||
static struct opticflow_result_t opticflow_result; //< The opticflow result
|
||||
static struct opticflow_state_t opticflow_state; //< State of the drone to communicate with the opticflow
|
||||
static struct v4l2_device *opticflow_dev; //< The opticflow camera V4L2 device
|
||||
static abi_event opticflow_agl_ev; //< The altitude ABI event
|
||||
static pthread_t opticflow_calc_thread; //< The optical flow calculation thread
|
||||
static bool_t opticflow_got_result; //< When we have an optical flow calculation
|
||||
static pthread_mutex_t opticflow_mutex; //< Mutex lock fo thread safety
|
||||
struct opticflow_t opticflow; ///< Opticflow calculations
|
||||
static struct opticflow_result_t opticflow_result; ///< The opticflow result
|
||||
static struct opticflow_state_t opticflow_state; ///< State of the drone to communicate with the opticflow
|
||||
static struct v4l2_device *opticflow_dev; ///< The opticflow camera V4L2 device
|
||||
static abi_event opticflow_agl_ev; ///< The altitude ABI event
|
||||
static pthread_t opticflow_calc_thread; ///< The optical flow calculation thread
|
||||
static bool_t opticflow_got_result; ///< When we have an optical flow calculation
|
||||
static pthread_mutex_t opticflow_mutex; ///< Mutex lock fo thread safety
|
||||
|
||||
/* Static functions */
|
||||
static void *opticflow_module_calc(void *data); //< The main optical flow calculation thread
|
||||
static void opticflow_agl_cb(uint8_t sender_id, float distance); //< Callback function of the ground altitude
|
||||
static void *opticflow_module_calc(void *data); ///< The main optical flow calculation thread
|
||||
static void opticflow_agl_cb(uint8_t sender_id, float distance); ///< Callback function of the ground altitude
|
||||
|
||||
#if PERIODIC_TELEMETRY
|
||||
#include "subsystems/datalink/telemetry.h"
|
||||
@@ -116,8 +116,8 @@ void opticflow_module_init(void)
|
||||
opticflow_got_result = FALSE;
|
||||
|
||||
#ifdef OPTICFLOW_SUBDEV
|
||||
PRINT_CONFIG_MSG("[opticflow_module] Configuring a subdevice!");
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_SUBDEV);
|
||||
PRINT_CONFIG_MSG("[opticflow_module] Configuring a subdevice!")
|
||||
PRINT_CONFIG_VAR(OPTICFLOW_SUBDEV)
|
||||
|
||||
/* Initialize the V4L2 subdevice (TODO: fix hardcoded path, which and code) */
|
||||
if (!v4l2_init_subdev(STRINGIFY(OPTICFLOW_SUBDEV), 0, 1, V4L2_MBUS_FMT_UYVY8_2X8, OPTICFLOW_DEVICE_SIZE)) {
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
#ifndef VIEWVIDEO_DEVICE
|
||||
#define VIEWVIDEO_DEVICE /dev/video1
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_DEVICE);
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_DEVICE)
|
||||
|
||||
// The video device size (width, height)
|
||||
#ifndef VIEWVIDEO_DEVICE_SIZE
|
||||
@@ -61,58 +61,58 @@ PRINT_CONFIG_VAR(VIEWVIDEO_DEVICE);
|
||||
#endif
|
||||
#define __SIZE_HELPER(x, y) #x", "#y
|
||||
#define _SIZE_HELPER(x) __SIZE_HELPER(x)
|
||||
PRINT_CONFIG_MSG("VIEWVIDEO_DEVICE_SIZE = " _SIZE_HELPER(VIEWVIDEO_DEVICE_SIZE));
|
||||
PRINT_CONFIG_MSG("VIEWVIDEO_DEVICE_SIZE = " _SIZE_HELPER(VIEWVIDEO_DEVICE_SIZE))
|
||||
|
||||
// The video device buffers (the amount of V4L2 buffers)
|
||||
#ifndef VIEWVIDEO_DEVICE_BUFFERS
|
||||
#define VIEWVIDEO_DEVICE_BUFFERS 10
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_DEVICE_BUFFERS);
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_DEVICE_BUFFERS)
|
||||
|
||||
// Downsize factor for video stream
|
||||
#ifndef VIEWVIDEO_DOWNSIZE_FACTOR
|
||||
#define VIEWVIDEO_DOWNSIZE_FACTOR 4
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_DOWNSIZE_FACTOR);
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_DOWNSIZE_FACTOR)
|
||||
|
||||
// From 0 to 99 (99=high)
|
||||
#ifndef VIEWVIDEO_QUALITY_FACTOR
|
||||
#define VIEWVIDEO_QUALITY_FACTOR 50
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_QUALITY_FACTOR);
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_QUALITY_FACTOR)
|
||||
|
||||
// RTP time increment at 90kHz (default: 0 for automatic)
|
||||
#ifndef VIEWVIDEO_RTP_TIME_INC
|
||||
#define VIEWVIDEO_RTP_TIME_INC 0
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_RTP_TIME_INC);
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_RTP_TIME_INC)
|
||||
|
||||
// Frames Per Seconds
|
||||
#ifndef VIEWVIDEO_FPS
|
||||
#define VIEWVIDEO_FPS 4
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_FPS);
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_FPS)
|
||||
|
||||
// The place where the shots are saved (without slash on the end)
|
||||
#ifndef VIEWVIDEO_SHOT_PATH
|
||||
#define VIEWVIDEO_SHOT_PATH "/data/video/images"
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_SHOT_PATH);
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_SHOT_PATH)
|
||||
|
||||
// Check if we are using netcat instead of RTP/UDP
|
||||
#ifndef VIEWVIDEO_USE_NETCAT
|
||||
#define VIEWVIDEO_USE_NETCAT FALSE
|
||||
#endif
|
||||
#if VIEWVIDEO_USE_NETCAT
|
||||
PRINT_CONFIG_MSG("[viewvideo] Using netcat.");
|
||||
PRINT_CONFIG_MSG("[viewvideo] Using netcat.")
|
||||
#else
|
||||
PRINT_CONFIG_MSG("[viewvideo] Using RTP/UDP stream.");
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_DEV);
|
||||
PRINT_CONFIG_MSG("[viewvideo] Using RTP/UDP stream.")
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_DEV)
|
||||
#endif
|
||||
|
||||
/* These are defined with configure */
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_HOST);
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_PORT_OUT);
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_HOST)
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_PORT_OUT)
|
||||
|
||||
// Main thread
|
||||
static void *viewvideo_thread(void *data);
|
||||
@@ -274,8 +274,8 @@ static void *viewvideo_thread(void *data __attribute__((unused)))
|
||||
void viewvideo_init(void)
|
||||
{
|
||||
#ifdef VIEWVIDEO_SUBDEV
|
||||
PRINT_CONFIG_MSG("[viewvideo] Configuring a subdevice!");
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_SUBDEV);
|
||||
PRINT_CONFIG_MSG("[viewvideo] Configuring a subdevice!")
|
||||
PRINT_CONFIG_VAR(VIEWVIDEO_SUBDEV)
|
||||
|
||||
// Initialize the V4L2 subdevice (TODO: fix hardcoded path, which and code)
|
||||
if (!v4l2_init_subdev(STRINGIFY(VIEWVIDEO_SUBDEV), 0, 1, V4L2_MBUS_FMT_UYVY8_2X8, VIEWVIDEO_DEVICE_SIZE)) {
|
||||
|
||||
@@ -36,20 +36,20 @@
|
||||
|
||||
// Main viewvideo structure
|
||||
struct viewvideo_t {
|
||||
volatile bool_t is_streaming; //< When the device is streaming
|
||||
struct v4l2_device *dev; //< The V4L2 device that is used for the video stream
|
||||
uint8_t downsize_factor; //< Downsize factor during the stream
|
||||
uint8_t quality_factor; //< Quality factor during the stream
|
||||
uint8_t fps; //< The amount of frames per second
|
||||
volatile bool_t is_streaming; ///< When the device is streaming
|
||||
struct v4l2_device *dev; ///< The V4L2 device that is used for the video stream
|
||||
uint8_t downsize_factor; ///< Downsize factor during the stream
|
||||
uint8_t quality_factor; ///< Quality factor during the stream
|
||||
uint8_t fps; ///< The amount of frames per second
|
||||
|
||||
volatile bool_t take_shot; //< Wether to take an image
|
||||
uint16_t shot_number; //< The last shot number
|
||||
volatile bool_t take_shot; ///< Wether to take an image
|
||||
uint16_t shot_number; ///< The last shot number
|
||||
};
|
||||
extern struct viewvideo_t viewvideo;
|
||||
|
||||
// Module functions
|
||||
extern void viewvideo_init(void);
|
||||
extern void viewvideo_periodic(void); //< A dummy for now
|
||||
extern void viewvideo_periodic(void); ///< A dummy for now
|
||||
extern void viewvideo_start(void);
|
||||
extern void viewvideo_stop(void);
|
||||
extern void viewvideo_take_shot(bool_t take);
|
||||
|
||||
@@ -38,33 +38,33 @@
|
||||
#ifndef SUPERBITRF_SPI_DEV
|
||||
#define SUPERBITRF_SPI_DEV spi1
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(SUPERBITRF_SPI_DEV);
|
||||
PRINT_CONFIG_VAR(SUPERBITRF_SPI_DEV)
|
||||
|
||||
/* Default SuperbitRF RST PORT and PIN */
|
||||
#ifndef SUPERBITRF_RST_PORT
|
||||
#define SUPERBITRF_RST_PORT GPIOC
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(SUPERBITRF_RST_PORT);
|
||||
PRINT_CONFIG_VAR(SUPERBITRF_RST_PORT)
|
||||
#ifndef SUPERBITRF_RST_PIN
|
||||
#define SUPERBITRF_RST_PIN GPIO12
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(SUPERBITRF_RST_PIN);
|
||||
PRINT_CONFIG_VAR(SUPERBITRF_RST_PIN)
|
||||
|
||||
/* Default SuperbitRF DRDY(IRQ) PORT and PIN */
|
||||
#ifndef SUPERBITRF_DRDY_PORT
|
||||
#define SUPERBITRF_DRDY_PORT GPIOB
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(SUPERBITRF_DRDY_PORT);
|
||||
PRINT_CONFIG_VAR(SUPERBITRF_DRDY_PORT)
|
||||
#ifndef SUPERBITRF_DRDY_PIN
|
||||
#define SUPERBITRF_DRDY_PIN GPIO1
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(SUPERBITRF_DRDY_PIN);
|
||||
PRINT_CONFIG_VAR(SUPERBITRF_DRDY_PIN)
|
||||
|
||||
/* Default forcing in DSM2 mode is false */
|
||||
#ifndef SUPERBITRF_FORCE_DSM2
|
||||
#define SUPERBITRF_FORCE_DSM2 TRUE
|
||||
#endif
|
||||
PRINT_CONFIG_VAR(SUPERBITRF_FORCE_DSM2);
|
||||
PRINT_CONFIG_VAR(SUPERBITRF_FORCE_DSM2)
|
||||
|
||||
/* The superbitRF structure */
|
||||
struct SuperbitRF superbitrf;
|
||||
@@ -442,12 +442,12 @@ void superbitrf_event(void)
|
||||
#ifdef RADIO_TRANSMITTER_ID
|
||||
// otherwise load airframe file value
|
||||
else {
|
||||
PRINT_CONFIG_VAR(RADIO_TRANSMITTER_ID);
|
||||
PRINT_CONFIG_VAR(RADIO_TRANSMITTER_ID)
|
||||
superbitrf_set_mfg_id(RADIO_TRANSMITTER_ID);
|
||||
}
|
||||
#endif
|
||||
#ifdef RADIO_TRANSMITTER_CHAN
|
||||
PRINT_CONFIG_VAR(RADIO_TRANSMITTER_CHAN);
|
||||
PRINT_CONFIG_VAR(RADIO_TRANSMITTER_CHAN)
|
||||
if (superbitrf.num_channels == 0) {
|
||||
superbitrf.num_channels = RADIO_TRANSMITTER_CHAN;
|
||||
}
|
||||
@@ -457,7 +457,7 @@ void superbitrf_event(void)
|
||||
}
|
||||
#ifdef RADIO_TRANSMITTER_PROTOCOL
|
||||
else {
|
||||
PRINT_CONFIG_VAR(RADIO_TRANSMITTER_PROTOCOL);
|
||||
PRINT_CONFIG_VAR(RADIO_TRANSMITTER_PROTOCOL)
|
||||
superbitrf_set_protocol(RADIO_TRANSMITTER_PROTOCOL);
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user