Futaba R136F 72M PPM接收机的改造和ppm信号引出

Jun 21st, 2011
没有评论

接收机外壳可以直接掰开,没有螺丝

其改造连接图如下所示

Rx_futaba136

其中,红为+5V,白为ppm信号,黑为地

ppm信号幅值为3.3V,信号呈方波形状,和之前的类型相差很大,应该能够正常工作

但是,当第一通道接舵机时,舵机工作的时候,相应通道的波形发生畸变,将舵机除去,畸变消失,此时电流源显示消耗电流为0.1A,电源电压没有下降。畸变信号并没有造成抖舵等故障。但是可能会造成飞控板的识别故障。

所以,在飞控板上使用时,不应该将接收机连接舵机,否则可能造成信号畸变

焊好连线后,将上盖“B”标志处挖空,将导线引出。

实验显示,能够正常工作。但是通过将messages里的ppm信息放到real time plotter里观察发现,偶尔会出现信号降低甚至到0的情况,但是持续时间一般小于3秒,信号为0的时间一般小于1秒,故还不至于发生故障,具体原因未知,可能是ppm信号波本身容易被实验室里的各种信号干扰的缘故。

标签: ,

Paparazzi UAV 调试过程(1)

Jun 12th, 2011
没有评论

费时许久,终于把硬件部分调通了,接下来,就是让人提心吊胆的调试部分,祈祷不要鸡飞蛋打飞丢了|炸鸡前功尽弃吧……

 

上天调试之前,首先要解决传感器的摆放和设置问题

水平传感器:采用X形传感器配置,这种方法精度要好一点。摆放方式是线缆朝前,安装在机翼后面的机身上方。

垂直传感器:安在左侧机翼的后缘根部,线缆朝右。

 

之所以强调线缆的朝向,是因为这涉及到红外管的编号以及相应的作用。

ir1和ir2的方向确定:ir1是从左后到右前,ir2则从右后到左前

我的装上之后,ir1和ir2是反的,因此首先要调正:

在这里调整,注意这个是默认的参数,并且默认的配置文件里是没有这几行的,需要自己添加

    <subsystem name="attitude"     type="infrared">
      <configure name="ADC_IR1"        value="ADC_1"/>
      <configure name="ADC_IR2"        value="ADC_2"/>
      <configure name="ADC_IR_TOP"     value="ADC_0"/>
      <configure name="ADC_IR_NB_SAMPLES" value="16"/>
    </subsystem>

把上面的ADC_1和ADC_2对调即可

 

……但是经过我测试,加上<configure…>这几行的话,完全没用……加上</subsystem>则不能通过编译。

最后只好手动改变传感器的安装方式了……

6/24更新:上面给出的官网上的改动通道映射的方法是错误的。正确的方法应该是:

添加这么一段在airframe文件里。

  <section name="adc" prefix="ADC_CHANNEL_">
    <define name="IR1" value="ADC_1"/>
    <define name="IR2" value="ADC_2"/>
    <define name="IR_TOP" value="ADC_0"/>
    <define name="IR_NB_SAMPLES" value="16"/>
  </section>

成功后编译的时候会出现黄色的警告文字,提示通道映射改变了。

如此一来,传感器的摆放方式就不成问题了

 

另外,关于ALIGNED & TILTED这两种安装方法那种好,各处的结论也不一样。我觉得应该还是TILTED的方法好,因为判断每个通道的情况都用到了所有的四个红外管的数据。

使用这种方法后要相应的改变通道的放大系数。具体来说,左右和上下通道的系数应该是垂直通道的0.707倍。这可以通过把垂直系数设为1.5来做到

Paparazzi 参数配置 无线遥控 Radio Control

Jun 6th, 2011
没有评论

配置文件在conf/radios路径下

主要定义了遥控ppm信号的极性,通道数,各帧的意义等信息

<!DOCTYPE radio SYSTEM "radio.dtd">
 <radio name="cockpitMM" data_min="900" data_max="2100" sync_min ="5000" sync_max ="15000" pulse_type="POSITIVE">
 <channel ctl="D" function="ROLL"     min="2000" neutral="1498" max="1000" average="0"/>
 ...
 <channel ctl="E" function="MODE"     min="2000" neutral="1500" max="1000" average="1"/>
 ...
 </radio>

name:用于debug追逐,无所谓

data_min,data_max为数据帧的长度范围(微秒)

sync_min,sync_max为协调帧的长度范围

pulse_type分为正负两种,为ppm的信号形式

其中FUTABA,Hitec,Multiplex等为POSITIVE,JR,Graupner等为NEGATIVE

...
<channel ctl="NoneA"                     function="NOTUSEDA"     min="1100" neutral="1500" max="1900" average="0"/>
<channel ctl="NoneB"                     function="NOTUSEDB"     min="1100" neutral="1500" max="1900" average="0"/>
<channel ctl="NoneC                   function="NOTUSEDC"     min="1100" neutral="1500" max="1900" average="0"/>
<channel ctl="NoneD"                     function="NOTUSEDD"     min="1100" neutral="1500" max="1900" average="0"/>
...

每个通道都有其发射器名称(ctl),功能名称(function)还有其信号帧时长范围(min,neutral,max)以及是否经过平均

这里的min和max对调的话,通道的正反也会变化

注意:

接收机生成的ppm信号通道数不是由接收机通道数决定,而是由发射机决定的。也就是说,假如用一个8通道的发射机和6通道的接收机配合,接收机那里得出的ppm信号仍然是8通道的,而我们可能只用5个;但是我们在设置的时候仍然必须设定8个通道,不足的通道用下面的形式补齐

<channel ctl="NoneA"                function="NOTUSEDA"     min="1100" neutral="1500" max="1900" average="0"/>

 

 

如何测量ppm信号:

1.使用示波器

2.让飞控板把ppm信号发回来显示在message窗口里

但是默认的message设置里是不现实ppm信号的

需要把这句话

 <define name="TELEMETRY_MODE_FBW" value="1"/>

加在airborne配置文件里,位置是

 <subsystem name="radio_control"     type="ppm"/>

这句话的下面

再打开message,ppm信号就会显示出来了

Paparazzi PPM信号引出及整形

Jun 1st, 2011
没有评论

接收机:恒吉RP82L二次变频72M ppm接收机

关于这款接收机的ppm信号接线,hamcq兄的帖子里有详细的图片

图1  图中单片机从右下角往上数第三脚就是ppm信号

但是我的ppm信号在示波器里波形很难看,上升下降都很缓慢,离方波差得很远;而在网上见到别人的ppm信号都是很标准的方波形式的。

除此之外,各个波形对遥控通道杆量的响应都很灵敏,接收机本身接舵机工作也很正常

但是,可能由于ppm信号波形的问题,接飞控板,显示的RC信号很差,大约有80%的时间是无信号,偶尔有满信号,此时包括模式切换,直接控制舵机等都正确,唯一的问题就是信号太不稳定

考虑使用施密特触发器对ppm信号进行整形,使其变为方波信号

变换前后频率相同,但是高电平和低电平持续时间会发生变化,如果信号的信息是由高电平持续时间代表的话(比如舵机的PWM信号),这种方法就不能使用

但是如下图所示,对于PPM信号,信息储存于每个波峰之间的间隔时间t1,t2…里,这些时间就是相应通道的PWM信号。也就是说,对于ppm信号,高电平的持续时间没有意义。这就可以使用施密特触发器整形了。

image

图2  ppm信号和pwm信号的关系

芯片选型

我测到的ppm信号幅值为2.xV,官网做的板子里ppm信号为3.3V,而我这块板子的输入电压为+5V。其输出高电平应该也为5V,不知道能不能用。不过即使不能用的话加上电阻分压即可,问题不大

施密特触发器的正触发电压不应大于2V,1.xV比较理想

选用国家仪器的74LS14,输入电压+5V,内封6反相施密特触发器

至于接线就非常简单了

74ls14系列芯片7脚为地,14脚为正电压

12,34,56,89,1011,1213各为6对施密特触发器的输入输出image

只要接上7,14的电源,输入接1,从2出来,由于是反相的,故要再接一个,所以2接3,4就是最终的输出了

如果电压不对就再加两个电阻分压即可

待续

6/2

买了个瑞萨出品的HD74ls14p芯片,看文档和上面的一样,但是,貌似它的VT+和VT-和我的ppm信号不合,官网里有资料提到日冠的接收机,跟我这款接收机非常像,而且同样存在信号失真的问题,信号幅度是1v-2v之间,接进施密特触发器,出来的全是高电平……弄了一下午加半个晚上,最终以失败告终……我果然还是个硬件小白啊

硬的不行,那就来软的吧;考虑写个软件整形,待续

经过一番研究,发现板子是采用ARM7的输入捕捉功能来处理ppm信号的,也就是说,还是由板子的硬件来处理信号的,貌似找不到插手的余地……

又测量了下ppm信号。

低电平为1V,高电平为3.3V,这就要求施密特触发器的VT+和VT-都大于1,关键是VT-大于1这条市面上貌似没有芯片能做到,难道要用555来自己搭一个?晕

已经订购了原装FUTABA R136F了……希望能解决问题吧……

 

6/10更新

最终还是使用NE555定时器做了一个施密特触发器(VT-=1.4V,VT+=2.8V)对输入信号进行整形。最终结果非常完美,再也没有出现丢帧和抖舵的情况了。

由于官方提到日冠的二次变频接收机也有同样的问题,这个不妨作为一个通用的解决方案。各位如果遇到类似问题可以尝试下这个办法。

Paparazzi FUTABA 6EXHP 改造

May 31st, 2011
没有评论

下午悲剧地发现,6EXHP说是6通道,其实只有5个独立通道可用,第六通道(螺距)是和油门联动的,这样计划用于切换模式的第六通道就没法用了

无奈,只好先把HP改成AP了

教程很多,就不贴了,要点就是给单片机的某个引脚提供3.3V高电平,重新开机后,就会变成AP,从而获得第六个独立通道

改完后同时按住lCD左边的两个模式键并打开电源,选择模式二,改为美国手

AP的设置里多出了V尾混控,空中刹车,飞翼混控等功能,跟HP功能差别还是挺大的

 

然后还要更改第六通道,把原本的2态开关改成3态的以对应3个模式的切换

再一次悲剧地发现,开关买的和官网教程上的不一样

官网上的是on-on-on的,而我买的是on-off-on的

不过仔细一琢磨,其实也能用。毕竟off也是一种信息嘛

具体连法:

image

Vout和GND线就是原来接到2态开关上的两根线

+5V是从右下方的板上接过来的

当三态开关处于上时,下面的电阻被短接,输出电压为地

当三态开关处于下时,上面的电阻被短接,输出电压为+5V

当置于中间时,两个电阻都没有被短接,输出电压为2.5V

关于遥控和电池的悲剧性事件

May 30th, 2011
没有评论

忘了关电源

至少一周

天线没拉开

特意买的发射机锂电鼓了,还好没有像碱性电池一样漏液,也没有爆炸起火

发射机没有拉开天线,在盒子里,晶振不知道有没有烧毁

买了8节1块钱的超霸GP电池测试,装入发射机之后,能够正常工作,没有出现抖舵,晶振应该没有烧毁

但是,电压下降极快。不到2分钟就降0.1V,装上不到20分钟,电压已经从12.6下降到11.4,而且还在持续下降,不知是什么问题

决意做个放电实验了,看到底多少才会失灵报警

13:27=11.3V

13:28=11.2V

13:33=11.1V

13:34=11.0V

这个速度大约是2分钟0.1V,貌似要到9.6V才会报警,8.9V会失控。按照12.4-9.6的区间,能工作2.8×2×10=56分钟。应该是正常的

标签:

Paparazzi 红外传感器

May 29th, 2011
没有评论

Paparazzi的红外传感器有两个:

水平传感器和垂直传感器

利用对向安装的红外温度传感器,感知地面和天空温度的差别,即可判断当前的姿态

水平传感器上安装有两对传感器,分别感知前后(俯仰,PITCH)和左右(滚转,ROLL)的姿态

对于我们控制飞机来说,只要获知飞机的俯仰和滚转姿态就可以了,而水平传感器已经足够获取这些信息了;那么,我们为什么还要安装垂直传感器呢?

这是为了抗干扰,假设飞机以某一姿态出现在某地,当地面是草地时,水平传感器感知到的地面和天空的温差为某一值;而当地面为水泥地时,由于水泥地和草地的温度是不同的,在同样的姿态下,水平传感器感知到的温差和草地的情况下将是不同的,这样就导致了误差。而加上垂直传感器后,我们就可以知道地面的温度,从而通过算法把这个误差消除掉

垂直传感器的测试:

接上3.3V电源,用示波器观察信号口的输出,在室内正常光照下,输出为60MV;当手遮挡板子有IC一面的传感器时,电压随着手的接近上升到1.6V;而无论手多么接近反面的传感器,电压皆不变

结果分析:

首先来看一下传感器结构

垂直传感器的原理图:

image

红外测温管本身的输出电压很低,只有40µV/K^4。所以如上图中那样把两个管子对置,这样的话如果两个管子探测到的温度相同的话,输出将为0V;当存在温度差时,将输出正或负的电压,注意这里的输出只是红外对管的,还有进入放大器。

将输出信号进入放大器放大500倍,并施加1.65V(3.3V/2)的直流偏置电压,这样一来最终的输出电压范围为0-3.3V,两端温度相同时为1.65V

注意:

1.红外管的响应曲线并非完全正弦曲线,所有还需要微调

2.红外管反应有点慢(25ms),可能造成振荡

3.必须保持干燥,一滴水就可以毁了红外管,所以雨天飞行还是有点困难的

水平传感器的情况完全相似

问题:在我的水平传感器上,室内桌面平放条件下用万用表测得IR1和IR2在1.6-1.9V左右,这个数值是符合上面的理论值的。

分析:文章开头的实验显示输出电压在0-1.6V直接波动,这显示偏置电压没有工作。而反面的管子没有响应可能是因为放大器不能输出负值电压。对照原理图,用通断表检测,完全没问题,但是上电之后,1.65V电压仍然不稳定,时有是无,仔细检查板子,发现有一处可能存在虚焊,重新焊接后,症状消失,输出电压在1.65V附近了。

用通断表检测的时候,可能压到焊点从而使得其连通,而上电之后焊点弹开仍然不通。

下面进入Linux调试中位

6/7更新:

问题解决,的确是没有焊接好,本来应该生成一个1.65V的基准电压给放大器的,但是虚焊导致这个电压没给好,修改后就正常了,两边都可以得到值了

Paparazzi 参数配置3:固件和硬件

May 25th, 2011
没有评论

注意:本篇所有配置还是在Airframe文件里

首先选择目标板

根据板子的版本,如Tiny2.11,booz,twog等,系统会自动进行一些默认的设置,比如通信的波特率之类的

  <firmware name="fixedwing">
    <target name="sim"                       board="pc"/>
    <target name="ap"                        board="tiny_2.11"/>
     .
     .
     .
  </firmware>

这里选择的是tiny2.11

"sim“是模拟器目标,设为pc即可

目前板子的版本共有"twog_1.0", "tiny_0.99", "tiny_1.1", "tiny_2.1", "tiny_2.11", "booz_1.0", "lisa_l_1.0", "lisa_l_1.1", "lisa_m_1.0", "lisa_s_1.0", "pc"这些种

无线遥控

  <firmware name="fixedwing">
    <target name="sim"                       board="pc"/>
    <target name="ap"                        board="tiny_2.11"/>
     .
     .
     .
    <subsystem name="radio_control"     type="ppm"/>
  </firmware>

radio_control一栏选择ppm即可

具体关于无线控制的细节设置参看这里

无线数传

对于我们用的XBee模块来说,选择双向的57600和透明传输模式即可

 <firmware name="fixedwing">
    <target name="ap"                        board="tiny_2.11"/>
     .
     .
     .
    <subsystem name="telemetry"     type="transparent"/>
  </firmware>

上面是选择透明传输模式

如果之前选择了板子类型为Tin2.11那么这里默认的传输速率即为57600,如果想使用不同的速率:

 <firmware name="fixedwing">
    <target name="ap"                        board="tiny_2.11"/>
     .
     .
     .
    <subsystem name="telemetry"     type="transparent">
      <configure name="MODEM_BAUD"          value="B9600"/>
      <configure name="MODEM_PORT"          value="UART1"/>
    </subsystem>
  </firmware>

在<subsystem name=”telemetry”>一栏下面

手动加上

<configure name="MODEM_BAUD" value="B9600"/>

<configure name="MODEM_PORT" value="UART1"/>

这两行,即可改变默认传输率和串口号

配置传输协议

数据在地面站和飞控之间传输,是要遵循一定的协议的,当然具体的细节我们不用去深究,这里只来看下如何配置使用

 <section name="DATALINK" prefix="DATALINK_">
    <define name="DEVICE_TYPE" value="PPRZ"/>
    <define name="DEVICE_ADDRESS" value="...."/>
  </section>

上面是默认的标准通信格式

注:飞控端的Xbee,飞控板,地面端的Xbee,PC这4者的波特率必须要设置正确

具体来所,Xbee模块和相应的设备必须具有相同的波特率;但是PC和飞控端不一定要具有相同的波特率(比如控制多台飞控的时候,地面端的波特率即为飞控端的几倍)

设置GCS波特率

 <session name="USB">
   <program name="link">
     <arg flag="-d" constant="/dev/ttyUSB0"/>
     <!--<arg flag="-transport" constant="xbee"/>--><!-- uncomment this line for XBee API mode -->
     <arg flag="-s" constant="57600"/>
   </program>
   ...
 </session>

这里设置的XBee端口号为ttyUSB0(使用FTDI芯片连接电脑时的默认端口号)

通信速率为57600

GPS设置

  <firmware name="fixedwing">
    <target name="ap"                        board="tiny_2.11"/>
     ...
    <subsystem name="gps"               type="ublox_lea5h"/>
  </firmware>

选择型号,这里是ublox_lea5h

如果使用的是lea4h则用"ublox_lea4p“

  <firmware name="fixedwing">
    <target name="ap"                        board="tiny_2.11"/>
     ...
    <subsystem name="gps"               type="ublox_lea5h">
      <configure name="GPS_BAUD"          value="B38400"/>
      <configure name="GPS_PORT"          value="UART0"/>
    </subsystem>
  </firmware>

设置GPS和飞控MCU通信的端口和波特率

官方推荐为38400

端口为UART0

启用红外传感器

如果要使用红外传感器(而不是IMU等)来判断姿态的话,需要在这里设定

firmware name="fixedwing">
    <target name="ap"              board="tiny_2.11"/>
     ...
    <subsystem name="attitude"     type="infrared"/>
  </firmware>

上面是开启红外传感器

选择板子之后,默认已经设定了各个红外口的ADC通道,当然我们可以自己配置

 <firmware name="fixedwing">
    <target name="ap"              board="tiny_2.11"/>
     ...
    <subsystem name="attitude"     type="infrared">
      <configure name="ADC_IR1"        value="ADC_1"/>
      <configure name="ADC_IR2"        value="ADC_2"/>
      <configure name="ADC_IR_TOP"     value="ADC_0"/>
      <configure name="ADC_IR_NB_SAMPLES" value="16"/>
    </subsystem>
  </firmware>

上面是把相应的红外通道配置到ADC端口去

Control System

官方写得很不明确,待补

标签:

Paparazzi 参数配置2:Airframe

May 19th, 2011
没有评论

Airframe的意思是机身,机体,包括了所有和飞机相关的硬件和软件配置

文件处于 conf/airframes

选择Airframe文件

XML参数

Commands

Commands列出了我们控制飞机所需要的所有的控制变量,在官网的例子里,只有3个:

<commands>
 <axis name="THROTTLE" failsafe_value="0"/>
 <axis name="ROLL"     failsafe_value="0"/>
 <axis name="PITCH"    failsafe_value="0"/>
</commands>

中文意义很简单,分别为油门,滚转(一般由副翼实现),俯仰(升降舵)

failsafe是指当没信号的时候控制参数的默认值

Servos

上面的Commands是抽象的控制,还需要被转换为具体的舵机信号,比如Roll命令就扯到两个舵机

<servos>
 <servo name="THROTTLE"         no="0" min="1000" neutral="1000" max="2000"/>
 <servo name="ELEVON_LEFTSIDE"  no="1" min="2000" neutral="1500" max="1000"/>
 <servo name="ELEVON_RIGHTSIDE" no="2" min="1000" neutral="1500" max="2000"/>
</servos>

这里也有一个叫做"THROTTLE”的变量,但这个和上面Commands里的不一样,是具体给舵机的命令

下面两个是分别给飞翼用的参数,对于固定翼,应该有不同的设定

no表示板子上的pwm接口号,注意接口从0开始数的

min,neutral,max分别表示该舵的最小值,中值和最大值,需要注意的是,这些都是用pwm信号的高位时间表示的

注1:pwm信号的高位值和舵机角度存在线性对应关系,对于普通舵机来说,其值为1000ms到2000ms

注2:对于油门,最小值和中值是相同的

注3:将最大,最小值互换,则可实现通道反向

控制律

有了抽象的命令,有了具体的执行层,但是这二者如何联系到一起呢?比如混控如何实现?这就要靠下面的控制律了:

<command_laws>
 <let var="aileron"            value="@ROLL  * 0.3"/>
 <let var="elevator"           value="@PITCH * 0.7"/>
 <set servo="THROTTLE"         value="@THROTTLE"/>
 <set servo="ELEVON_LEFTSIDE"  value="$elevator + $aileron"/>
 <set servo="ELEVON_RIGHTSIDE" value="$elevator - $aileron"/>
</command_laws>

这是一个飞控的控制律,定义了两个中间变量(var = “aileron”),注意命令前面加@号,变量前面加$号

其实这就相当于一个混控了,只不过是自己设计的混控规则

Manual 手动控制

<rc_commands>
  <set command="THROTTLE" value="@THROTTLE"/>
  <set command="ROLL"     value="@ROLL"/>
  <set command="PITCH"    value="@PITCH"/>
</rc_commands>

这里把在遥控配置里的通道值和上面的命令值联系起来

自动飞行时的遥控指令

这个配置当自动飞行的时候(包括Auto1,Auto2)遥控信号怎么办

自动飞行的时候我们仍然可以直接控制飞机,只要如下设置:

<auto_rc_commands>
  <set command="YAW" value="@YAW"/>
</auto_rc_commands>

就可以控制YAW通道,即方向舵

如果想要全自动飞行,则:

<auto_rc_commands>
</auto_rc_commands>

里面是空的,即遥控指令完全不用

仅当自动飞行时可用的指令

<ap_only_commands>
  <copy command="PAN"/>
  <copy command="TILT"/>
  <copy command="SHOOT"/>
</ap_only_commands>

这些命令比较特别,单独放出。我们暂时不需要考虑

Auto1增强稳定飞行

<section name="AUTO1" prefix="AUTO1_">
 <define name="MAX_ROLL" value="RadOfDeg(35)"/>
 <define name="MAX_PITCH" value="RadOfDeg(35)"/>
</section>

设定了最大滚转和俯仰速率,注意角度都是弧度(?可能有误,35弧度那得有多大!)

ADC Generic 用于将ADC通道的数据通过无线链路传到GCS来,暂且不用

Infrared 红外

红外的配置很多,首先设定传感器的中位,即处于水平时的值。

<section name="INFRARED" prefix="IR_">
  <define name="ADC_IR1_NEUTRAL" value="512"/>
  <define name="ADC_IR2_NEUTRAL" value="512"/>
  <define name="ADC_TOP_NEUTRAL" value="512"/>

中位是通过一个“茶杯测试”得出的:

一对完美的传感器,当两边探测值相同的时候,应该输出512,将传感器防止在一个大盒子里,这样就可以保证两边探测到的数据是一样的,理论上此时的读数应该为输出值-中位=0的,但是由于固有误差,此时可能不会得到这种结果,所以应该调整中位值,使得读数为0即可。

比如本来设定中位为512,结果读数为5,就应该把中位设定为517,此时应该会得到0的读书,中位就调整好了

然后是传感器的正负调整:

<define name="IR1_SIGN" value="-1"/>
  <define name="IR2_SIGN" value="-1"/>
  <define name="TOP_SIGN" value="-1"/>

设定标准是:

1)当飞机下方温度高于上方时(一般地面的温度都会比天空高好多),垂直传感器必须要给出正值

2)当右方比左方温度高时,水平传感器必须给出正值

如果不满足,即调整符号

下面配置传感器安装方式:

水平传感器有“十字”和“X字”两种安装方法

在十字装法中,ir1为机翼方向,ir2为机身方向

在X字方法中,转动45度。ir1沿着左后-右前的方向;ir2沿着右后-左前的方向

<define name="HORIZ_SENSOR_ALIGNED" value="1"/>
 or
  <define name="HORIZ_SENSOR_TILTED" value="1"/>

注1:这里的value没意义

注2:X装效果比较好

为防止3个传感器通道的放大倍率不同,加上调整值:

  <define name="LATERAL_CORRECTION" value="0.7"/>
  <define name="LONGITUDINAL_CORRECTION" value="0.7"/>
  <define name="VERTICAL_CORRECTION" value="1."/>

默认为1

下面调整水平直飞时的控制参数

<define name="ROLL_NEUTRAL_DEFAULT" value="-2.5" unit="deg"/>
  <define name="PITCH_NEUTRAL_DEFAULT" value="6" unit="deg"/>

除此之外,还可以加上下面这些非对称的指令,用来调整水平直飞

<define name="CORRECTION_UP" value="1."/>
  <define name="CORRECTION_DOWN" value="1."/>
  <define name="CORRECTION_LEFT" value="1."/>
  <define name="CORRECTION_RIGHT" value="1."/>
</section>

陀螺仪 没有 跳过

电池

这个控制了用电策略

<section name="BAT">
 <define name="MILLIAMP_AT_FULL_THROTTLE" value="12000" unit="mA" />
 <define name="VOLTAGE_ADC_A" value="0.0177531"/>
 <define name="VOLTAGE_ADC_B" value="0.173626"/>
 <define name="VoltageOfAdc(adc)" value ="(VOLTAGE_ADC_A * adc + VOLTAGE_ADC_B)"/>
 <define name="CATASTROPHIC_BAT_LEVEL" value="6.0" unit="V"/>
 <define name="CRITIC_BAT_LEVEL" value="6.5" unit="V"/>
 <define name="LOW_BAT_LEVEL" value="7.0" unit="V"/>
 <define name="MAX_BAT_LEVEL" value="8.4" unit="V"/>
</section>

MILLIAMP_AT_FULL_THROTTLE 是最大油门时的实际电流,对于制定飞行策略等均很有用处。如果不能用钳形电流表测得准确值的话,可以通过GCS在每次飞行后报告的用电量和电池的实际容量进行对比来微调

MAX,LOW,CRITIC等都是电池电压的阈值,当达到时会相应报警或动作,比如关油门等。但是这里的是2s电池的,3s的是多少?乘以1.5?这样的话就是:12.6,10.5,9.75,9。这个数值还有待确认

剩下几个选项是获取电压值的计算公式,不需调整

水平控制回路 Horizontal Control

<section name="HORIZONTAL CONTROL" prefix="H_CTL_">
   <define name="COURSE_PGAIN" value="-0.4"/>
   <define name="ROLL_MAX_SETPOINT" value="0.35" unit="radians"/>
   <define name="ROLL_ATTITUDE_GAIN" value="-7500."/>
   <define name="ROLL_RATE_GAIN" value="-1500"/>
   <define name="PITCH_PGAIN" value="-8000."/>
   <define name="ELEVATOR_OF_ROLL" value="1250"/>
 </section>

水平控制回路输入设定的目标点和路径测量值,输出滚转命令。

COURSE_PGAIN是PID控制中的P参数,即比例分数。即如果飞机应该向北飞,但实际的方向是57度,当COURSE_PGAIN为-0.4时,滚转率将为57×-0.4=23度

ROLL_MAX_SETPOINT为最大滚转角

ROLL_ATTITUDE_GAIN是用来从滚转误差计算滚转命令的参数

ROLL_RATE_GAIN

PITCH_PGAIN

ELEVATOR_OF_ROLL

这几个参数含义尚不明确

具体控制律参看graphical representation of the control loops.

垂直控制回路 Vertical Control

  <section name="VERTICAL CONTROL" prefix="V_CTL_">
   <define name="ALTITUDE_PGAIN" value="-0.1" unit="(m/s)/m"/>
   <define name="ALTITUDE_MAX_CLIMB" value="3." unit="m/s"/>

上面是外层控制回路参数,高度误差计算出爬升率。

外层控制代码在sw/airborne/firmwares/fixedwing/guidance/guidance_v.c

根据上面的设置,如果高度误差是10m,"ALTITUDE_PGAIN"为-0.1,则目标爬升率为1m/s。

"ALTITUDE_MAX_CLIMB"是最大爬升率,这里为3m/s

   <define name="AUTO_THROTTLE_NOMINAL_CRUISE_THROTTLE" value="0.65" unit="%"/>
   <define name="AUTO_THROTTLE_MIN_CRUISE_THROTTLE" value=".4" unit="%"/>
   <define name="AUTO_THROTTLE_MAX_CRUISE_THROTTLE" value="1" unit="%"/>
   <define name="AUTO_THROTTLE_LOITER_TRIM" value="1000" unit="pprz_t"/>
   <define name="AUTO_THROTTLE_DASH_TRIM" value="-2500" unit="pprz_t"/>
   <define name="AUTO_THROTTLE_CLIMB_THROTTLE_INCREMENT" value="0.15" unit="%/(m/s)"/>
   <define name="AUTO_THROTTLE_PGAIN" value="-0.008" unit="%/(m/s)"/>
   <define name="AUTO_THROTTLE_IGAIN" value="0.25"/>
   <define name="AUTO_THROTTLE_PITCH_OF_VZ_PGAIN" value="0.35" unit="rad/(m/s)"/>

上面是默认情况下的垂直控制回路参数,由油门和升降舵共同控制高度

具体参数含义尚不明确

   <define name="AUTO_PITCH_PGAIN" value="-0.1"/>
   <define name="AUTO_PITCH_IGAIN" value="0.025"/>
   <define name="AUTO_PITCH_MAX_PITCH" value="0.5"/>
   <define name="AUTO_PITCH_MIN_PITCH" value="-0.5"/>

这些是仅仅由升降舵控制情况下的垂直控制回路,一般情况下不用

  <define name="THROTTLE_SLEW_LIMITER" value="2" unit="s"/>

THROTTLE_SLEW_LIMITER 是油门从从0%变化到100%所需要的时间,上面的数值是2秒.

杂项 MISC

<section name="MISC">
 <define name="NOMINAL_AIRSPEED" value ="12." unit="m/s"/>
 <define name="CARROT" value="5." unit="s"/>
 <define name="KILL_MODE_DISTANCE" value="(1.5*MAX_DIST_FROM_HOME)"/>
 <define name="CONTROL_RATE" value="60" unit="Hz"/>
</section>

"NOMINAL_AIRSPEED" 主要用在模拟器里.

"CARROT" 意为胡萝卜,相当于目标位置,这里是用按照现有情况几秒钟后飞机的位置来充当的.

"KILL_MODE_DISTANCE"告诉飞控距离多远的时候就进入Kill模式(无动力滑翔)

"CONTROL_RATE"是底层控制回路的频率(60 or 20).

模拟 Simu

这一节的数值可以用来调整软件循环(Software In The Loop(SITL))模拟的过程

<section name="SIMU">
 <define name="WEIGHT" value ="1."/>
 <define name="YAW_RESPONSE_FACTOR" value ="1."/>
 <define name="ROLL_RESPONSE_FACTOR" value ="15."/>
</section>

"WEIGHT”就是飞机的重量了

"YAW_RESPONSE_FACTOR“调整飞机和倾斜角相关的的转弯速率,数值越大则转弯半径越大

"ROLL_RESPONSE_FACTOR"决定了副翼的效率,即滚转效果的大小;越高则滚转越灵敏

模组 Modules

模组功能允许你用很灵活的方式添加代码到主AP循环里,这种添加可以是在初始化的时候,周期性或者事件响应的

<modules main_freq="60">
 <load name="demo_module.xml"/>
</modules>
这里调用的模块是主循环模块,名字为main,freq设定了主循环的频率,默认为60HZ
当有其他的模块需要添加时,可以依次操作

Paparazzi 参数配置1

May 19th, 2011
没有评论

截止昨天,硬件部分终于调通啦!虽然XBee模块还存在着误码率极高的问题,但毕竟能在特定情况下正常工作了不是,下面这参数配置的问题就浮出水面了……

首先解决一个疑问:

配置GPS的时候,WIKI千叮咛万嘱咐一定要改动相应的配置文件,可是到底要怎么改呢,GPS的速率和无线串口的速率有什么联系?

分析:GPS的串口本来是接在UART0上的,而板子上可以和电脑通信的串口为UART1,我们当时为了调试GPS,就下载了一个Tunnel程序把GPS的数据全部转发到UART1去了,当时我们设置的GPS串口通信速率是38400bps。

但是在实际飞行的时候,GPS直接通过UART0和MCU通信,其速率当然还是我们之前设定的38400,飞控获取GPS第一手信息,然后计算位置,通过UART1口连接无线数传发送给地面站,按照美妙发送四次处理后的数据来算,估计实际的下行链路所占用的带宽远远不到38400bps,就省下了很多带宽做别的用处。

这样一想我们就明确了:必须告诉MCU跟GPS通讯的速率,也就是38400

 

好吧下面进入正题

我们进入Paparazzi软件,首先就会看到下面的界面:

Paparazzi_center

我们这里只看Configuration这一块,可以看到:

首先可以选择飞机(A/C),这里的飞机有些是预制的有些是自己创建的

每架飞机都包含自身的配置文件

配置文件有5种:

Airframe

Flight Plan

Setting

Radio

Telemetry

这些配置文件都是xml格式的文件,点击EDIT按钮即可编辑这些文件

这5个配置文件又被被整合起来,放在了一个airframe文件里,位置为conf/airframes,当选择一架飞机的时候,实际上就是根据这个文件来调用上面的5个配置。需要注意的是,这个文件通常是系统自动生成的,不需手动配置

airframe文件格式如下:

 <aircraft
   name="Plaster"
   ac_id="7"
   airframe="airframes/plaster1.xml"
   radio="radios/cockpitMM.xml"
   flight_plan="flight_plans/generic.xml"
   telemetry="telemetry/default.xml"
   settings="settings/basic.xml"
   gui_color="red"
 />

其中

name为在gcs里显示的名字

ac_id是一段表示飞机的1-255之间的整数,尤其在通信包的收发中十分有用(考虑到一个gcs控制多个飞机的情况)

airframe是包括飞机参数的文件

radio是描述RC发射器的文件

flight_plan是飞行计划文件

telemetry是包含了描述无线数据包格式的文件

settings是可以通过无线数据链配置的参数文件

gui_color为GCS里显示的颜色

注:最后两个是可选的,其他必须有

配置文件必须烧写进飞控才可以,可以通过gcs和控制台命令来操作,一般来说使用gcs比较方便

好了,下面就来分析这5个配置文件吧