Skip to content

Commit

Permalink
Camera is working
Browse files Browse the repository at this point in the history
  • Loading branch information
softsr committed Mar 15, 2013
1 parent 2b1fad7 commit 374390b
Show file tree
Hide file tree
Showing 12 changed files with 73 additions and 65 deletions.
15 changes: 7 additions & 8 deletions conf/Makefile.stm32
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -105,16 +105,15 @@ endif
CFLAGS = -I. -I./$(ARCH) -I../ext/libopencm3/include $(INCLUDES)
CFLAGS += -D__thumb2__ -Wall -O$(OPT)
ifeq ($(ARCH_L), )
CFLAGS += -msoft-float
CFLAGS += -msoft-float -mfix-cortex-m3-ldrd
else ifeq ($(ARCH_L),f4)
ifndef HARD_FLOAT
ifneq ($(HARD_FLOAT),1)
CFLAGS += -msoft-float
else
CFLAGS += -g -mfloat-abi=hard -mfpu=fpv4-sp-d16 -MD
endif
endif
CFLAGS += -Wl,--gc-sections
CFLAGS += -mfix-cortex-m3-ldrd
CFLAGS += -mcpu=$(MCU) -mthumb -ansi
CFLAGS += -std=gnu99
#CFLAGS += -malignment-traps
Expand Down Expand Up @@ -151,21 +150,21 @@ LDFLAGS += -T$(LDSCRIPT) -nostartfiles -O$(OPT) -mthumb -mcpu=$(MCU)
ifeq ($(ARCH_L), )
LDFLAGS += -mfix-cortex-m3-ldrd -msoft-float
else ifeq ($(ARCH_L),f4)
ifndef HARD_FLOAT
LDFLAGS += -mfix-cortex-m3-ldrd -msoft-float
ifneq ($(HARD_FLOAT),1)
LDFLAGS += -msoft-float
else
LDFLAGS += -lnosys -D__thumb2__\
-mfloat-abi=hard -mfpu=fpv4-sp-d16
LDFLAGS += -D__thumb2__
LDFLAGS += -lnosys -mfloat-abi=hard -mfpu=fpv4-sp-d16
endif
endif

LDFLAGS += -Wl,-Map=$(OBJDIR)/$(TARGET).map,--cref,--gc-sections
LDLIBS += -lc -lm -lgcc
ifneq ($(ARCH_L), )
LDLIBS += -lopencm3_stm32$(ARCH_L)
else
LDLIBS += -lopencm3_stm32f1
endif
LDLIBS += -lc -lm -lgcc

CPFLAGS = -j .isr_vector -j .text -j .data
CPFLAGS_BIN = -Obinary
Expand Down
17 changes: 9 additions & 8 deletions conf/airframes/krooz_1_0_okto_mkk.xml
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,15 @@
<load name="sys_mon.xml"/>-->
<load name="beeper.xml"/>
<load name="krooz_cam.xml">
<define name="TILT_CENTER" value="1532"/>
<define name="PAN_CENTER" value="1420"/>
<define name="TILT_COEFF" value="-4000"/>
<define name="PAN_COEFF" value="1500"/>
<define name="TILT_RATE" value="-300"/>
<define name="PAN_RATE" value="110"/>
<define name="PAN_AREA" value="380"/>
<define name="PAN_DOWN" value="1700"/>
<define name="CAM_TEST" value="1"/><!---->
<define name="PAN_CENTER" value="1500"/>
<define name="TILT_CENTER" value="1420"/>
<define name="PAN_COEFF" value="-4460"/>
<define name="TILT_COEFF" value="1650"/>
<define name="PAN_RATE" value="-300"/>
<define name="TILT_RATE" value="110"/>
<define name="TILT_AREA" value="380"/>
<define name="TILT_DOWN" value="1700"/>
</load>
</modules>

Expand Down
3 changes: 2 additions & 1 deletion conf/boards/krooz_1.0.makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ BOARD_CFG=\"boards/$(BOARD)_$(BOARD_VERSION).h\"

ARCH=stm32
ARCH_L=f4
HARD_FLOAT=1
ARCH_DIR=stm32
SRC_ARCH=arch/$(ARCH_DIR)
$(TARGET).ARCHDIR = $(ARCH)
Expand Down Expand Up @@ -42,7 +43,7 @@ endif
# default LED configuration
#
ifndef RADIO_CONTROL_LED
RADIO_CONTROL_LED = 3
RADIO_CONTROL_LED = none
endif

ifndef BARO_LED
Expand Down
3 changes: 3 additions & 0 deletions conf/modules/krooz_cam.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<module name="krooz_cam" dir="cam_control">
<header>
<file name="krooz_cam.h"/>
<file name="cam_power.h"/>
</header>
<init fun="krooz_cam_init()"/>
<periodic fun="krooz_servo_periodic()" freq="192."/>
Expand All @@ -12,6 +13,8 @@
<file name="krooz_cam.c"/>
<file name="cam_power.c"/>
<define name="USE_SERVOS_9AND10" value="1"/>
<define name="USE_CAM" value="1"/>
<define name="VIDEO" value="1"/>
</makefile>
</module>

6 changes: 3 additions & 3 deletions conf/settings/modules/krooz_cam_setup.xml
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
<dl_settings>

<dl_settings NAME="Cam Set">
<dl_setting var="tilt_center" MIN="1000" STEP="10" MAX="2000" unit="u" shortname="tilt_ctr"/>
<dl_setting var="pan_down" MIN="1000" STEP="10" MAX="2000" unit="u" shortname="pan_down"/>
<dl_setting var="pan_area" MIN="-1000" STEP="10" MAX="1000" unit="u" shortname="pan_area"/>
<dl_setting var="pan_center" MIN="1000" STEP="10" MAX="2000" unit="u" shortname="tilt_ctr"/>
<dl_setting var="tilt_down" MIN="1000" STEP="10" MAX="2000" unit="u" shortname="pan_down"/>
<dl_setting var="tilt_area" MIN="-1000" STEP="10" MAX="1000" unit="u" shortname="pan_area"/>
<dl_setting var="tilt_coeff" MIN="-5000" STEP="100" MAX="10000" unit="u" shortname="tilt"/>
<dl_setting var="pan_coeff" MIN="-5000" STEP="100" MAX="10000" unit="u" shortname="pan"/>
<dl_setting var="tilt_rate" MIN="-1000" STEP="10" MAX="1000" unit="u" shortname="t_rate"/>
Expand Down
3 changes: 1 addition & 2 deletions sw/airborne/arch/stm32/mcu_periph/adc_arch.c
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -87,14 +87,13 @@
#if defined(STM32F1)
#include <libopencm3/stm32/f1/rcc.h>
#include <libopencm3/stm32/f1/adc.h>
#include <libopencm3/stm32/f1/gpio.h>
#include <libopencm3/stm32/f1/nvic.h>
#elif defined(STM32F4)
#include <libopencm3/stm32/f4/rcc.h>
#include <libopencm3/stm32/f4/adc.h>
#include <libopencm3/stm32/f4/gpio.h>
#include <libopencm3/stm32/f4/nvic.h>
#endif
#include <libopencm3/stm32/gpio.h>
#include <libopencm3/stm32/timer.h>
#include <string.h>
#include "std.h"
Expand Down
2 changes: 1 addition & 1 deletion sw/airborne/boards/krooz_1.0.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@
/* GPIO mapping for ADC1 pins, overwrites the default in arch/stm32/mcu_periph/adc_arch.c */
// FIXME, this is not very nice, is also stm lib specific
#ifdef USE_AD1
#define ADC1_GPIO_INIT(gpio) { \
#define ADC1_GPIO_INIT() { \
gpio_mode_setup(GPIOC, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO3 | GPIO0 | GPIO2 | GPIO1 | GPIO4 | GPIO5); \
}
#endif // USE_AD1
Expand Down
Empty file modified sw/airborne/firmwares/rotorcraft/telemetry.h
100755 → 100644
Empty file.
8 changes: 5 additions & 3 deletions sw/airborne/modules/cam_control/cam_power.c
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ int32_t cam_min_alt = CAM_MIN_ALT;

#ifdef ADC_CHANNEL_CAM1
struct adc_buf cam1_state;
int32_t cam1_state_val;
int16_t cam1_state_val;
#endif
#ifdef CAMERA_2
#ifdef ADC_CHANNEL_CAM2
Expand Down Expand Up @@ -244,14 +244,16 @@ void kamera_init( void )
#if defined(STM32F4)
rcc_peripheral_enable_clock(&RCC_AHB1ENR, CAM_SW_GPIO_CLK);
gpio_mode_setup(CAM_SW_GPIO, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, CAM_SW_GPIO_PIN);
rcc_peripheral_enable_clock(&RCC_AHB1ENR, CAM_V_GPIO_CLK);
gpio_mode_setup(CAM_V_GPIO, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, CAM_V_GPIO_PIN);
#endif

CamSet();

stage_photo_num = STAGE_PHOTO_NUM;
shot_period = SHOT_PERIOD*4;
#ifdef VIDEO_1
VideoSet(); //P1.22 auf High
VideoSet();
#endif
cam_counter = 0;

Expand All @@ -270,7 +272,7 @@ void kamera_init( void )

void periodic_task_kamera(void) //4Hz
{

cam1_state_val = cam1_state.sum / cam1_state.av_nb_sample;

#ifdef VIDEO_1
Expand Down
15 changes: 7 additions & 8 deletions sw/airborne/modules/cam_control/cam_power.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@

#ifdef ADC_CHANNEL_CAM1
//struct adc_buf cam1_state;
int32_t cam1_state_val;
#endif
#ifdef CAMERA_2
#ifdef ADC_CHANNEL_CAM2
Expand Down Expand Up @@ -88,16 +87,16 @@ struct adc_buf cam2_state;

#ifdef STM32F4
#define CAM_STATE_ON_LEVEL 2048
#define CamClr() {gpio_clear(CAM_SH_GPIO, CAM_SH_GPIO_PIN);}
#define CamSet() {gpio_set(CAM_SH_GPIO, CAM_SH_GPIO_PIN);}
#define CamClr() {gpio_mode_setup(CAM_SH_GPIO, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, CAM_SH_GPIO_PIN); gpio_clear(CAM_SH_GPIO, CAM_SH_GPIO_PIN);}
#define CamSet() {gpio_set(CAM_SH_GPIO, CAM_SH_GPIO_PIN); gpio_mode_setup(CAM_SH_GPIO, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, CAM_SH_GPIO_PIN);}
#define Cam1SwitchClr() {gpio_clear(CAM_SW_GPIO, CAM_SW_GPIO_PIN);}
#define Cam1SwitchSet() {gpio_set(CAM_SW_GPIO, CAM_SW_GPIO_PIN);}
#define CamVideoSet {} //CAM_V_GPIO->BSRR = CAM_V_GPIO_PIN;
#define CamVideoClr() {} //CAM_V_GPIO->BRR = CAM_V_GPIO_PIN;
#define Cam1VideoSet() {gpio_set(CAM_V_GPIO, CAM_V_GPIO_PIN);}
#define Cam1VideoClr() {gpio_clear(CAM_V_GPIO, CAM_V_GPIO_PIN);}
#endif

//#define CamCheck() (cam1_state.sum / cam1_state.av_nb_sample > CAM_STATE_ON_LEVEL)
#define Cam1Check() TRUE
#define Cam1Check() (cam1_state.sum / cam1_state.av_nb_sample > CAM_STATE_ON_LEVEL)
//#define Cam1Check() TRUE
#define DO_SHOTS (radio_control.values[RADIO_SHOTS] > MAX_PPRZ / 2)
#define SHOT_VIDEO (radio_control.values[RADIO_PH_VD] > MAX_PPRZ / 2)

Expand All @@ -114,7 +113,7 @@ extern uint16_t last_known_shot;
extern uint8_t shot_period;
extern uint8_t stage_photo_num;

extern int32_t cam1_state_val;
extern int16_t cam1_state_val;

#ifndef SITL
void CacheDel(uint16_t photo_nr);
Expand Down
57 changes: 29 additions & 28 deletions sw/airborne/modules/cam_control/krooz_cam.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,30 +51,31 @@
#ifndef TILT_CENTER
#define TILT_CENTER 1500
#endif
#ifndef PAN_AREA
#define PAN_AREA 300
#ifndef TILT_AREA
#define TILT_AREA 300
#endif
#ifndef PAN_DOWN
#define PAN_DOWN 1800
#ifndef TILT_DOWN
#define TILT_DOWN 1800
#endif

bool_t cam_flag;
bool_t servo_flag;
#ifdef CAM_SETUP
int16_t tilt_center = TILT_CENTER;
int16_t pan_center = PAN_CENTER;
int16_t tilt_coeff = TILT_COEFF;
int16_t pan_coeff = PAN_COEFF;
int16_t tilt_rate = TILT_RATE;
int16_t pan_rate = PAN_RATE;
int16_t pan_down = PAN_DOWN;
int16_t pan_area = PAN_AREA;
int16_t tilt_down = TILT_DOWN;
int16_t tilt_area = TILT_AREA;
#endif
int16_t cam_tilt = 0;
int16_t cam_pan = 0;
int16_t rotorcraft_cam_tilt = 0;
int16_t rotorcraft_cam_pan = 0;
int32_t radio_cam_value = 0;

void krooz_cam_init() {
ActuatorsPwmInit();
kamera_init();
}

void krooz_cam_periodic() {
Expand All @@ -88,34 +89,34 @@ void krooz_servo_periodic() {
void krooz_cam_event(void) {
if(servo_flag) {
#ifdef CAM_SETUP
int32_t angle_buf = stateGetNedToBodyEulers_i()->phi * tilt_coeff / INT32_ANGLE_PI;
int32_t rate_buf = stateGetBodyRates_i()->p * tilt_rate/INT32_ANGLE_PI;
cam_tilt = (int16_t)angle_buf + (int16_t)rate_buf + tilt_center;
angle_buf = stateGetNedToBodyEulers_i()->theta * pan_coeff/INT32_ANGLE_PI;
rate_buf = stateGetBodyRates_i()->q * pan_rate / INT32_ANGLE_PI;
int32_t angle_buf = stateGetNedToBodyEulers_i()->phi * pan_coeff / INT32_ANGLE_PI;
int32_t rate_buf = stateGetBodyRates_i()->p * pan_rate/INT32_ANGLE_PI;
rotorcraft_cam_pan = (int16_t)angle_buf + (int16_t)rate_buf + pan_center;
angle_buf = stateGetNedToBodyEulers_i()->theta * tilt_coeff / INT32_ANGLE_PI;
rate_buf = stateGetBodyRates_i()->q * tilt_rate / INT32_ANGLE_PI;
#else
int32_t angle_buf = stateGetNedToBodyEulers_i()->phi * TILT_COEFF / INT32_ANGLE_PI;
int32_t rate_buf = stateGetBodyRates_i()->p * TILT_RATE / INT32_ANGLE_PI;
cam_tilt = (int16_t)angle_buf + (int16_t)rate_buf + TILT_CENTER;
angle_buf = stateGetNedToBodyEulers_i()->theta * PAN_COEFF/INT32_ANGLE_PI;
rate_buf = stateGetBodyRates_i()->q * PAN_RATE / INT32_ANGLE_PI;
int32_t angle_buf = stateGetNedToBodyEulers_i()->phi * PAN_COEFF / INT32_ANGLE_PI;
int32_t rate_buf = stateGetBodyRates_i()->p * PAN_RATE / INT32_ANGLE_PI;
rotorcraft_cam_pan = (int16_t)angle_buf + (int16_t)rate_buf + PAN_CENTER;
angle_buf = stateGetNedToBodyEulers_i()->theta * TILT_COEFF / INT32_ANGLE_PI;
rate_buf = stateGetBodyRates_i()->q * TILT_RATE / INT32_ANGLE_PI;
#endif
if(radio_control.status == RC_OK)
radio_cam_value = (radio_cam_value*49 + (int32_t)radio_control.values[RADIO_CAM]) / 50;
if(autopilot_mode != AP_MODE_NAV)
#if CAM_SETUP == 1
cam_pan = (int16_t)angle_buf + (radio_cam_value - MAX_PPRZ)*pan_area/MAX_PPRZ + (int16_t)rate_buf + pan_down;
rotorcraft_cam_tilt = (int16_t)angle_buf + (radio_cam_value - MAX_PPRZ) * tilt_area/MAX_PPRZ + (int16_t)rate_buf + tilt_down;
#else
cam_pan = (int16_t)angle_buf + (radio_cam_value - MAX_PPRZ)*PAN_AREA/MAX_PPRZ + (int16_t)rate_buf + PAN_DOWN;
rotorcraft_cam_tilt = (int16_t)angle_buf + (radio_cam_value - MAX_PPRZ) * TILT_AREA/MAX_PPRZ + (int16_t)rate_buf + TILT_DOWN;
#endif
else
#if CAM_SETUP == 1
cam_pan = (int16_t)angle_buf + pan_down + (int16_t)rate_buf;
rotorcraft_cam_tilt = (int16_t)angle_buf + tilt_down + (int16_t)rate_buf;
#else
cam_pan = (int16_t)angle_buf + PAN_DOWN + (int16_t)rate_buf;
rotorcraft_cam_tilt = (int16_t)angle_buf + TILT_DOWN + (int16_t)rate_buf;
#endif
#ifdef CAM_TEST
cam_pan = (int16_t)angle_buf + radio_cam_value*600/MAX_PPRZ + (int16_t)rate_buf + PAN_CENTER;
rotorcraft_cam_tilt = (int16_t)angle_buf + radio_cam_value*600/MAX_PPRZ + (int16_t)rate_buf + PAN_CENTER;
#endif
/*
#ifdef COMMAND_CAM_PAN
Expand All @@ -125,10 +126,10 @@ void krooz_cam_event(void) {
/commands[COMMAND_CAM_TILT] = cam_tilt;
#endif
*/
Bound(cam_tilt, 900, 2100);
Bound(cam_pan, 900, 2100);
ActuatorPwmSet(8, cam_pan);
ActuatorPwmSet(9, cam_tilt);
Bound(rotorcraft_cam_tilt, 900, 2100);
Bound(rotorcraft_cam_pan, 900, 2100);
ActuatorPwmSet(8, rotorcraft_cam_tilt);
ActuatorPwmSet(9, rotorcraft_cam_pan);
ActuatorsPwmCommit();
servo_flag = FALSE;
}
Expand Down
9 changes: 6 additions & 3 deletions sw/airborne/modules/cam_control/krooz_cam.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,18 @@
//#include "led.h"

#ifdef CAM_SETUP
extern int16_t tilt_center;
extern int16_t pan_center;
extern int16_t tilt_coeff;
extern int16_t pan_coeff;
extern int16_t tilt_rate;
extern int16_t pan_rate;
extern int16_t pan_down;
extern int16_t pan_area;
extern int16_t tilt_down;
extern int16_t tilt_area;
#endif

extern int16_t rotorcraft_cam_tilt;
extern int16_t rotorcraft_cam_pan;

extern void krooz_cam_init(void);
extern void krooz_servo_periodic(void);
extern void krooz_cam_periodic(void);
Expand Down

0 comments on commit 374390b

Please sign in to comment.