paparazzi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[paparazzi-commits] [5335] added telemetry and datalink to test passthro


From: antoine drouin
Subject: [paparazzi-commits] [5335] added telemetry and datalink to test passthrough
Date: Thu, 12 Aug 2010 00:50:32 +0000

Revision: 5335
          http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=5335
Author:   poine
Date:     2010-08-12 00:50:31 +0000 (Thu, 12 Aug 2010)
Log Message:
-----------
added telemetry and datalink to test passthrough

Modified Paths:
--------------
    paparazzi3/trunk/conf/airframes/Poine/booz2_a8.xml
    paparazzi3/trunk/conf/autopilot/lisa_passthrough.makefile
    paparazzi3/trunk/conf/autopilot/lisa_test_progs.makefile
    paparazzi3/trunk/sw/airborne/fms/overo_test_passthrough.c

Added Paths:
-----------
    paparazzi3/trunk/sw/airborne/fms/fms_gs_com.c
    paparazzi3/trunk/sw/airborne/fms/fms_gs_com.h
    paparazzi3/trunk/sw/airborne/fms/overo_test_passthrough_telemetry.h

Modified: paparazzi3/trunk/conf/airframes/Poine/booz2_a8.xml
===================================================================
--- paparazzi3/trunk/conf/airframes/Poine/booz2_a8.xml  2010-08-12 00:49:43 UTC 
(rev 5334)
+++ paparazzi3/trunk/conf/airframes/Poine/booz2_a8.xml  2010-08-12 00:50:31 UTC 
(rev 5335)
@@ -89,6 +89,42 @@
 -->
 
 
+<!-- booz2 -->
+
+  <section name="IMU" prefix="IMU_">
+
+    <define name="GYRO_P_NEUTRAL" value="31948"/>
+    <define name="GYRO_Q_NEUTRAL" value="31834"/>
+    <define name="GYRO_R_NEUTRAL" value="32687"/>
+
+    <define name="GYRO_P_SENS" value=" 1.101357422" integer="16"/>
+    <define name="GYRO_Q_SENS" value=" 1.122670898" integer="16"/>
+    <define name="GYRO_R_SENS" value=" 1.104890137" integer="16"/>
+
+
+    <define name="ACCEL_X_SENS" value=" 2.58273701242" integer="16"/>
+    <define name="ACCEL_Y_SENS" value=" 2.54076215332" integer="16"/>
+    <define name="ACCEL_Z_SENS" value=" 2.57633620646" integer="16"/>
+
+    <define name="ACCEL_X_NEUTRAL" value="32857"/>
+    <define name="ACCEL_Y_NEUTRAL" value="32429"/>
+    <define name="ACCEL_Z_NEUTRAL" value="32593"/>
+
+    <define name="MAG_X_SENS" value=" 5.32718104135" integer="16"/>
+    <define name="MAG_Y_SENS" value=" 4.87857821202" integer="16"/>
+    <define name="MAG_Z_SENS" value=" 3.11986612709" integer="16"/>
+
+    <define name="MAG_X_NEUTRAL" value="-43"/>
+    <define name="MAG_Y_NEUTRAL" value=" 49"/>
+    <define name="MAG_Z_NEUTRAL" value="-66"/>
+
+    <define name="BODY_TO_IMU_PHI"   value="RadOfDeg(  0.)"/>
+    <define name="BODY_TO_IMU_THETA" value="RadOfDeg(  0.)"/>
+    <define name="BODY_TO_IMU_PSI"   value="RadOfDeg(  45.)"/>
+
+  </section>
+
+<!-- aspirin
  <section name="IMU" prefix="IMU_">
 
     <define name="GYRO_P_SIGN" value="-1"/>
@@ -143,9 +179,9 @@
 
   </section>
 
+-->
 
 
-
  <section name="BAT">
    <define name="MILLIAMP_PER_PERCENT" value="0.86"/>
    <define name="CATASTROPHIC_BAT_LEVEL" value="9.3" unit="V"/>
@@ -160,7 +196,8 @@
 USER =
 #HOST = 10.31.4.22
 #HOST = overo
-HOST = beth
+HOST = auto7
+#HOST = 192.168.2.230
 TARGET_DIR = ~
 
 SRC_FMS=fms
@@ -171,6 +208,8 @@
 BOARD_CFG=\"boards/lisa_0.99.h\"
 FLASH_MODE = JTAG
 
+PERIODIC_FREQ = 512
+
 include $(PAPARAZZI_SRC)/conf/autopilot/lisa_test_progs.makefile
 
 include $(PAPARAZZI_SRC)/conf/autopilot/lisa_passthrough.makefile

Modified: paparazzi3/trunk/conf/autopilot/lisa_passthrough.makefile
===================================================================
--- paparazzi3/trunk/conf/autopilot/lisa_passthrough.makefile   2010-08-12 
00:49:43 UTC (rev 5334)
+++ paparazzi3/trunk/conf/autopilot/lisa_passthrough.makefile   2010-08-12 
00:50:31 UTC (rev 5335)
@@ -66,5 +66,6 @@
 
 # PWM actuator
 pt.CFLAGS += -DSERVO_HZ=200
+#pt.CFLAGS += -DSERVO_HZ=50
 pt.srcs += $(SRC_BOOZ)/actuators/booz_actuators_pwm.c
 pt.srcs += $(SRC_BOOZ_ARCH)/actuators/booz_actuators_pwm_hw.c

Modified: paparazzi3/trunk/conf/autopilot/lisa_test_progs.makefile
===================================================================
--- paparazzi3/trunk/conf/autopilot/lisa_test_progs.makefile    2010-08-12 
00:49:43 UTC (rev 5334)
+++ paparazzi3/trunk/conf/autopilot/lisa_test_progs.makefile    2010-08-12 
00:50:31 UTC (rev 5335)
@@ -42,13 +42,6 @@
 
 
 
-# test passthrough spi link between overo and stm32
-overo_test_passthrough.ARCHDIR = omap
-overo_test_passthrough.CFLAGS  += -I$(ACINCLUDE) -I. 
-I$(PAPARAZZI_HOME)/var/include
-overo_test_passthrough.CFLAGS  += -DOVERO_LINK_MSG_UP=AutopilotMessagePTUp 
-DOVERO_LINK_MSG_DOWN=AutopilotMessagePTDown
-overo_test_passthrough.srcs  = $(SRC_FMS)/overo_test_passthrough.c
-overo_test_passthrough.srcs += $(SRC_FMS)/fms_spi_link.c
-
 # test network based telemetry on overo
 overo_test_telemetry.ARCHDIR  = omap
 overo_test_telemetry.CFLAGS  += -I$(ACINCLUDE) -I. 
-I$(PAPARAZZI_HOME)/var/include
@@ -94,7 +87,27 @@
 overo_test_periodic.CFLAGS  += -DOVERO_LINK_MSG_UP=AutopilotMessageBethUp 
-DOVERO_LINK_MSG_DOWN=AutopilotMessageBethDown
 overo_test_periodic.srcs    += $(SRC_FMS)/fms_spi_link.c
 
+# test passthrough , aka using stm32 as io processor
+# this demonstrates
+#   -link with io processor
+#   -periodic event
+#   -telemetry and datalink
+#
+overo_test_passthrough.ARCHDIR  = omap
+overo_test_passthrough.LDFLAGS += -levent -lm
+overo_test_passthrough.CFLAGS  += -I$(ACINCLUDE) -I. 
-I$(PAPARAZZI_HOME)/var/include
+overo_test_passthrough.CFLAGS  += -DOVERO_LINK_MSG_UP=AutopilotMessagePTUp 
-DOVERO_LINK_MSG_DOWN=AutopilotMessagePTDown
+overo_test_passthrough.srcs     = $(SRC_FMS)/overo_test_passthrough.c
+overo_test_passthrough.CFLAGS  += -DFMS_PERIODIC_FREQ=512
+overo_test_passthrough.srcs    += $(SRC_FMS)/fms_periodic.c
+overo_test_passthrough.srcs    += $(SRC_FMS)/fms_spi_link.c
+overo_test_passthrough.srcs    += $(SRC_FMS)/fms_gs_com.c
+overo_test_passthrough.CFLAGS  += -DDOWNLINK -DDOWNLINK_TRANSPORT=UdpTransport
+overo_test_passthrough.srcs    += $(SRC_FMS)/udp_transport2.c downlink.c
+overo_test_passthrough.srcs    += $(SRC_FMS)/fms_network.c
 
+
+
 
################################################################################
 #
 #

Added: paparazzi3/trunk/sw/airborne/fms/fms_gs_com.c
===================================================================
--- paparazzi3/trunk/sw/airborne/fms/fms_gs_com.c                               
(rev 0)
+++ paparazzi3/trunk/sw/airborne/fms/fms_gs_com.c       2010-08-12 00:50:31 UTC 
(rev 5335)
@@ -0,0 +1,83 @@
+#include "fms/fms_gs_com.h"
+
+#include <unistd.h>
+
+#include "udp_transport2.h"
+
+/* generated */
+#include "periodic.h"
+/* holds the definitions of PERIODIC_SEND_XXX */
+#include "overo_test_passthrough_telemetry.h"
+/* holds the definitions of DOWNLINK_SEND_XXX */
+#include "messages2.h"
+#include "dl_protocol.h"
+#include "settings.h"
+
+struct FmsGsCom fms_gs_com;
+uint8_t telemetry_mode_Main_DefaultChannel;
+
+
+static void on_datalink_event(int fd, short event __attribute__((unused)), 
void *arg);
+static void on_datalink_message(void);
+
+uint8_t fms_gs_com_init(const char* gs_host, uint16_t gs_port, 
+                              uint16_t datalink_port, uint8_t broadcast) {
+
+  fms_gs_com.network = network_new(gs_host, gs_port, datalink_port, broadcast);
+  fms_gs_com.udp_transport = udp_transport_new(fms_gs_com.network);
+  event_set(&fms_gs_com.datalink_event, fms_gs_com.network->socket_in, EV_READ 
| EV_PERSIST, 
+           on_datalink_event, fms_gs_com.udp_transport);
+  event_add(&fms_gs_com.datalink_event, NULL);
+  
+  return 0;
+}
+
+void fms_gs_com_periodic(void) {
+
+  PeriodicSendMain(fms_gs_com.udp_transport);
+
+  RunOnceEvery(10, 
{fms_gs_com.udp_transport->Periodic(fms_gs_com.udp_transport->impl);});
+
+}
+
+
+static void on_datalink_event(int fd, short event __attribute__((unused)), 
void *arg) {
+  char buf[512];
+  int bytes_read = read(fd, buf, 512);
+  uint16_t i = 0;
+  struct udp_transport *tp = fms_gs_com.udp_transport->impl;
+  while (i<bytes_read) {
+    parse_udp_dl(tp, buf[i]);
+    if (tp->udp_dl_msg_received) {
+      on_datalink_message();
+      tp->udp_dl_msg_received = FALSE;
+    }
+    i++;
+  }
+  
+}
+
+static void on_datalink_message(void) {
+  struct udp_transport *tp = fms_gs_com.udp_transport->impl;
+  uint8_t msg_id = tp->udp_dl_payload[1]; 
+
+  switch (msg_id) {
+  case  DL_PING:
+    DOWNLINK_SEND_PONG(fms_gs_com.udp_transport);
+    break;
+  case DL_SETTING :  {
+    uint8_t i = DL_SETTING_index(tp->udp_dl_payload);
+    float var = DL_SETTING_value(tp->udp_dl_payload);
+    DlSetting(i, var);
+    printf("datalink : %d %f\n",i,var);
+    DOWNLINK_SEND_DL_VALUE(fms_gs_com.udp_transport, &i, &var);
+  }
+    break;
+
+  default :
+    printf("did nothing\n");
+    break;
+  }
+
+}
+

Added: paparazzi3/trunk/sw/airborne/fms/fms_gs_com.h
===================================================================
--- paparazzi3/trunk/sw/airborne/fms/fms_gs_com.h                               
(rev 0)
+++ paparazzi3/trunk/sw/airborne/fms/fms_gs_com.h       2010-08-12 00:50:31 UTC 
(rev 5335)
@@ -0,0 +1,34 @@
+/*
+ * This module handles communications with ground segment
+ * 
+ * for now one channel of telemetry/datalink via wifi
+ *
+ */
+
+#ifndef FMS_GS_COM_H
+#define FMS_GS_COM_H
+
+#include <event.h>
+#include "fms_network.h"
+#include "downlink_transport.h"
+
+#include "std.h"
+
+struct FmsGsCom {
+
+  struct FmsNetwork* network;
+  struct DownlinkTransport *udp_transport;
+  struct event datalink_event;
+
+};
+
+
+extern struct FmsGsCom fms_gs_com;
+/* remove me */
+extern uint8_t telemetry_mode_Main_DefaultChannel;
+
+extern uint8_t fms_gs_com_init(const char* gs_host, uint16_t gs_port, 
+                              uint16_t datalink_port, uint8_t broadcast);
+extern void fms_gs_com_periodic(void);
+
+#endif /* FMS_GS_COM_H */

Modified: paparazzi3/trunk/sw/airborne/fms/overo_test_passthrough.c
===================================================================
--- paparazzi3/trunk/sw/airborne/fms/overo_test_passthrough.c   2010-08-12 
00:49:43 UTC (rev 5334)
+++ paparazzi3/trunk/sw/airborne/fms/overo_test_passthrough.c   2010-08-12 
00:50:31 UTC (rev 5335)
@@ -28,44 +28,69 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include <event.h>
+
+#include "std.h"
 #include "fms_debug.h"
+#include "fms_periodic.h"
+
+/* stuff for io processor link */
 #include "fms_spi_link.h"
 #include "fms_autopilot_msg.h"
 
-static struct AutopilotMessageCRCFrame msg_in;
-static struct AutopilotMessageCRCFrame msg_out;
+/* stuff for telemetry/datalink */
+#include "fms_gs_com.h"
+
+/* let's store those data somewhere */
+#include "booz/booz_imu.h"
+
+struct BoozImuFloat imu;
+
+static void main_periodic(int my_sig_num);
+
+
+
+
+
 static void send_message(void);
 static void print_up_msg(struct AutopilotMessageCRCFrame * msg);
 static void print_down_msg(struct AutopilotMessageCRCFrame * msg);
 
 int main(int argc, char *argv[]) {
 
-  uint32_t us_delay; 
-
+  /* Initalize our SPI link to IO processor */
   if (spi_link_init()) {
     TRACE(TRACE_ERROR, "%s", "failed to open SPI link \n");
     return -1;
   }
   
-  if(argc > 1) { 
-    us_delay = atoi(argv[1]);
+  /* Initalize the event library */
+  event_init();
+  
+  /* Initalize our \xF4 so accurate periodic timer */
+  if (fms_periodic_init(main_periodic)) {
+    TRACE(TRACE_ERROR, "%s", "failed to start periodic generator\n");
+    return -1; 
   }
-  else { 
-    us_delay = 1953; 
-  }
+  
+  /* Initialize our communications with ground segment */
+  fms_gs_com_init("10.31.4.7", 4242, 4243, FALSE);
 
-  printf("Delay: %dus\n", us_delay); 
+  /* Enter our mainloop */
+  event_dispatch();
+  
+  printf("leaving... goodbye!\n");
 
+  return 0;
 
-  printf("AutopilotMessage size: %d\n",          sizeof(union 
AutopilotMessage));
-  printf("AutopilotMessageCRCFrame size: %d\n",  sizeof(struct 
AutopilotMessageCRCFrame));
+}
+
+static void main_periodic(int my_sig_num) {
+
+  send_message();
   
-  while (1) {
-    send_message();
-    usleep(us_delay);
-  }
-  
-  return 0;
+  fms_gs_com_periodic();
+
 }
 
 
@@ -73,23 +98,37 @@
 static void send_message() {
   static uint32_t foo = 0;
 
+  struct AutopilotMessageCRCFrame msg_in;
+  struct AutopilotMessageCRCFrame msg_out;
   uint8_t crc_valid; 
-  
+
+  uint16_t val = 1500 + 500*sin(foo*0.001);
+  msg_out.payload.msg_down.pwm_outputs_usecs[0] = val;
+  msg_out.payload.msg_down.pwm_outputs_usecs[1] = val;
+  msg_out.payload.msg_down.pwm_outputs_usecs[2] = val;
+
   spi_link_send(&msg_out, sizeof(struct AutopilotMessageCRCFrame), &msg_in, 
&crc_valid);
   
-  if (!(foo % 100)) {
-    printf("msg %d, CRC errors: %d\n", spi_link.msg_cnt, spi_link.crc_err_cnt);
+
+  struct AutopilotMessagePTUp *in = &msg_in.payload.msg_up; 
+  RATES_FLOAT_OF_BFP(imu.gyro, in->gyro);
+  ACCELS_FLOAT_OF_BFP(imu.accel, in->accel); 
+
+  if (!(foo % 200)) {
+    //    printf("msg %d, CRC errors: %d\n", spi_link.msg_cnt, 
spi_link.crc_err_cnt);
     //    print_up_msg(&msg_in);
     //    print_down_msg(&msg_out);
-    printf("0x%08x -> gx%+02f gy%+02f gz%+02f ax%+02f ay%+02f az%+02f rs%02x | 
CRC errors: %d \n",
+    printf("%08d -> gx%+02.1f gy%+02.1f gz%+02.1f ax%+02.1f ay%+02.1f 
az%+02.1f rs%02x stm_msg %08d stm_err %d | CRC errors: %d\n",
           foo,
-          DegOfRad(RATE_FLOAT_OF_BFP(msg_in.payload.msg_up.gyro.p)), 
-          DegOfRad(RATE_FLOAT_OF_BFP(msg_in.payload.msg_up.gyro.q)), 
-          DegOfRad(RATE_FLOAT_OF_BFP(msg_in.payload.msg_up.gyro.r)),
-          ACCEL_FLOAT_OF_BFP(msg_in.payload.msg_up.accel.x), 
-          ACCEL_FLOAT_OF_BFP(msg_in.payload.msg_up.accel.y), 
-          ACCEL_FLOAT_OF_BFP(msg_in.payload.msg_up.accel.z),
-          msg_in.payload.msg_up.rc_status, 
+          DegOfRad(RATE_FLOAT_OF_BFP(in->gyro.p)), 
+          DegOfRad(RATE_FLOAT_OF_BFP(in->gyro.q)), 
+          DegOfRad(RATE_FLOAT_OF_BFP(in->gyro.r)),
+          ACCEL_FLOAT_OF_BFP(in->accel.x), 
+          ACCEL_FLOAT_OF_BFP(in->accel.y), 
+          ACCEL_FLOAT_OF_BFP(in->accel.z),
+          in->rc_status, 
+          in->stm_msg_cnt, 
+          in->stm_crc_err_cnt, 
           spi_link.crc_err_cnt);
   }
   foo++;

Added: paparazzi3/trunk/sw/airborne/fms/overo_test_passthrough_telemetry.h
===================================================================
--- paparazzi3/trunk/sw/airborne/fms/overo_test_passthrough_telemetry.h         
                (rev 0)
+++ paparazzi3/trunk/sw/airborne/fms/overo_test_passthrough_telemetry.h 
2010-08-12 00:50:31 UTC (rev 5335)
@@ -0,0 +1,13 @@
+#ifndef OVERO_TEST_PASSTHROUGH_TELEMETRY_H
+#define OVERO_TEST_PASSTHROUGH_TELEMETRY_H
+
+#define PERIODIC_SEND_ALIVE(_transport) DOWNLINK_SEND_ALIVE(_transport, 16, 
MD5SUM)
+
+#include "booz/booz_imu.h"
+extern struct BoozImuFloat imu;
+#define PERIODIC_SEND_IMU_GYRO(_transport)                             \
+  DOWNLINK_SEND_IMU_GYRO(_transport, &imu.gyro.p, &imu.gyro.q, &imu.gyro.r)
+
+
+
+#endif /* OVERO_TEST_PASSTHROUGH_TELEMETRY_H */




reply via email to

[Prev in Thread] Current Thread [Next in Thread]