paparazzi 关于imu及baro的配置及执行过程分析

关于imu 与baro的关系:
我自己的理解,软件里面的管理方式,imu主要指   sapirin 上的  mpu6000和hmc5883,虽然baro ms5611也在上面,但是是与mpu6000连接到相同SPI接口
电路图. 软件里面baro是单独管理的。
conf/airframes/examples/microjet_lisa_m.xml中
配置baro位置:
  
  
L16     <target name= "ap" board= "lisa_m_2.0" >
L17       <configure name= "LISA_M_BARO" value= "BARO_MS5611_SPI" />
配置imu位置:
  
  
L34     <!-- Sensors -->
L35     <subsystem name= "imu" type= "aspirin_v2.2" />


A.如果需要修改imu的接口需要了解imu的配置执行过程,在此总结一下
1. paparazzi Center中定义
    <!-- Sensors -->
    <subsystem name="imu"           type="aspirin_v2.2"/>
.....
2. 由 ./sw/airborne/Makefile 包含  自动生成的  /usr/local/paparazzi/var/aircrafts/Microjet_LisaM/Makefile.ac    (# This file has been generated from /usr/local/paparazzi/conf/airframes/examples/microjet_lisa_m.xml by /usr/local/paparazzi/sw/tools/generators/gen_aircraft.out)
3. Makefile.ac 中 包含 subsystem makefile:
/usr/local/paparazzi/conf/firmwares/subsystems/shared/imu_aspirin_v2.2.makefile   
定义了使用的SPI接口   IMU_ASPIRIN_2_CFLAGS += -DUSE_SPI_SLAVE3

4.imu_aspirin_v2.2.makefile  又包含  /usr/local/paparazzi/conf/firmwares/subsystems/shared/imu_aspirin_v2_common.makefile
 定义了使用的SPI接口 并包含相关的操作文件 如  
IMU_ASPIRIN_2_SRCS   += $(SRC_SUBSYSTEMS)/imu/imu_aspirin_2_spi.c
提供具体的操作接口。

 $(strip a b c ) 把字串“a bc ”去到开头和结尾的空格,结果是“a b c”。
在规则中,通配符会被自动展开。但在变量的定义和函数引用时,通配符将失效。这种情况下如果需要通配符有效,就需要使用函数“wildcard”,它的用法是:$(wildcard PATTERN...) 。在Makefile中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。如果不存在任何符合此模式的文件,函数会忽略模式字符并返回空


最终的编译选项可以在paparazzi/var/aircrafts/Microjet_LisaM/ap_srcs.list 下查看  包含了所有的定义 比如 -DUSE_SPI2



B.paparazzi  关于baro的配置执行过程:气压计
1.   ./sw/airborne/Makefile 
L39:   include $(AIRCRAFT_BUILD_DIR)/Makefile.ac
包含  自动生成的 /usr/local/paparazzi/var/aircrafts/Microjet_LisaM/Makefile.ac 

2. Makefile.ac 中 
L148: include $(PAPARAZZI_SRC)/conf/firmwares/fixedwing.makefile  
包含  fixedwing.makefile  

3.conf/firmwares/fixedwing.makefile
L26: include $(CFG_FIXEDWING)/autopilot.makefile   
包含 conf/firmwares/subsystems/fixedwing/autopilot.makefile

4.  ./conf/firmwares/subsystems/fixedwing/autopilot.makefile
L165: include $(CFG_SHARED)/baro_board.makefile
包含: conf/firmwares/subsystems/shared/baro_board.makefile 

具体请查看文件的32行开始

# Lisa/M baro
else ifeq ($(BOARD), lisa_m)
# defaults to i2c baro bmp085 on the board
LISA_M_BARO ?= BARO_BOARD_BMP085
  ifeq ($(LISA_M_BARO), BARO_MS5611_SPI)
    BARO_BOARD_CFLAGS += -DBARO_BOARD=BARO_MS5611_SPI
    include $(CFG_SHARED)/spi_master.makefile
    BARO_BOARD_CFLAGS += -DUSE_SPI2 -DUSE_SPI_SLAVE3
    BARO_BOARD_CFLAGS += -DBB_MS5611_SPI_DEV=spi2
    BARO_BOARD_CFLAGS += -DBB_MS5611_SLAVE_IDX=SPI_SLAVE3
    BARO_BOARD_SRCS += peripherals/ms5611.c
    BARO_BOARD_SRCS += peripherals/ms5611_spi.c
    BARO_BOARD_SRCS += boards/baro_board_ms5611_spi.c
  else ifeq ($(LISA_M_BARO), BARO_MS5611_I2C)
    BARO_BOARD_CFLAGS += -DBARO_BOARD=BARO_MS5611_I2C
    BARO_BOARD_CFLAGS += -DUSE_I2C2
    BARO_BOARD_CFLAGS += -DBB_MS5611_I2C_DEV=i2c2
    BARO_BOARD_SRCS += peripherals/ms5611.c
    BARO_BOARD_SRCS += peripherals/ms5611_i2c.c
    BARO_BOARD_SRCS += boards/baro_board_ms5611_i2c.c
  else ifeq ($(LISA_M_BARO), BARO_BOARD_BMP085)
    BARO_BOARD_CFLAGS += -DBARO_BOARD=BARO_BOARD_BMP085
    BARO_BOARD_CFLAGS += -DUSE_I2C2
    BARO_BOARD_SRCS += peripherals/bmp085.c
    BARO_BOARD_SRCS += $(SRC_BOARD)/baro_board.c
  endif
 
这样 就可以根据具体的需要进行xml文件的配置了
我的自制 lisa-mv的板子 v:varition  使用的是10dof, 其实是 GY63 GY271 GY521  3个模块当然也可以使用GY86代替。 连接到i2c2上,方式和  Drotek 10DOF   一样。
配置文件和源文件差别如下:
diff --git a/conf/airframes/examples/microjet_lisa_m.xml b/conf/airframes/examples/microjet_lisa_m.xml
index aeee62d..59588d5 100644
--- a/conf/airframes/examples/microjet_lisa_m.xml
+++ b/conf/airframes/examples/microjet_lisa_m.xml
@@ -14,10 +14,13 @@
       <subsystem name="fdm" type="jsbsim"/>
     </target>
     <target name="ap"   board="lisa_m_2.0">
-      <configure name="LISA_M_BARO" value="BARO_MS5611_SPI"/>
+      <!--configure name="LISA_M_BARO" value="BARO_MS5611_SPI"/-->
+      <configure name="USE_BARO_BOARD" value="FALSE"/></span>
       <configure name="PERIODIC_FREQUENCY" value="120"/>
       <configure name="AHRS_PROPAGATE_FREQUENCY" value="100"/>
       <configure name="AHRS_CORRECT_FREQUENCY" value="100"/>
     </target>
 
     <configure name="USE_MAGNETOMETER" value="FALSE"/>
@@ -32,7 +35,9 @@
     <subsystem name="telemetry" <span style="white-space:pre">	</span>type="transparent"/>
 
     <!-- Sensors -->
-    <subsystem name="imu"           type="aspirin_v2.2"/>
+    <subsystem name="imu" type="drotek_10dof_v2">
+      <configure name="DROTEK_2_I2C_DEV" value="i2c2"/>
+      <configure name="DROTEK_2_MPU_I2C_ADDR" value="0xD0"/>
+    </subsystem></span>
     <subsystem name="gps"           type="ublox"/>
 
     <subsystem name="ahrs"          type="int_cmpl_quat"/>
@@ -46,7 +51,10 @@
   <modules>
     <load name="sys_mon.xml"/>
     <load name="baro_sim.xml"/>
-
+    <load name="baro_ms5611_i2c.xml">
+      <define name="MS5611_I2C_DEV" value="i2c1"/>
+      <define name="USE_I2C1"/>
+    </load> </span>
     <!-- extra navigation routines -->
     <load name="nav_bungee_takeoff.xml"/>
     <load name="nav_line.xml"/>

如果使用10dof 还得修改下面两个文件
配置地址: 
diff --git a/conf/firmwares/subsystems/shared/imu_drotek_10dof_v2.makefile b/conf/firmwares/subsystems/shared/imu_drotek_10dof_v2.makefile
index 6bc352a..1df6fe9 100644
--- a/conf/firmwares/subsystems/shared/imu_drotek_10dof_v2.makefile
+++ b/conf/firmwares/subsystems/shared/imu_drotek_10dof_v2.makefile
@@ -64,6 +64,8 @@ ifndef DROTEK_2_I2C_DEV
 $(error Error: DROTEK_2_I2C_DEV not configured!)
 endif
 endif
+# i2c address set
+IMU_DROTEK_2_CFLAGS += -DDROTEK_2_MPU_I2C_ADDR=$(DROTEK_2_MPU_I2C_ADDR)
 
 # convert i2cx to upper/lower case
 DROTEK_2_I2C_DEV_UPPER=$(shell echo $(DROTEK_2_I2C_DEV) | tr a-z A-Z)
如果AD0引脚拉高了,就不用改这里了,同时,microjet_lisa_m.xml文件的  
+      <configure name="DROTEK_2_MPU_I2C_ADDR" value="0xD0"/>
也不要加了


diff --git a/sw/airborne/firmwares/fixedwing/main_ap.c b/sw/airborne/firmwares/fixedwing/main_ap.c
index 3af9b6d..77de70c 100644
--- a/sw/airborne/firmwares/fixedwing/main_ap.c
+++ b/sw/airborne/firmwares/fixedwing/main_ap.c
@@ -211,7 +211,9 @@ void init_ap( void ) {
 #if USE_BARO_BOARD
   baro_init();
 #endif
-
+#ifdef MS5611_I2C_DEV
+  baro_ms5611_init();<span style="white-space:pre">	</span>/* I2C BARO dev (like 10DOF) used */</span>
+#endif
   ins_init();
 

添加初始化功能。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值