5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)
查看: 21945|回复: 39
打印 上一主题 下一主题

翻译一些betaflight的东西

  [复制链接]
跳转到指定楼层
楼主
发表于 2017-2-7 15:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
许多玩穿越机的朋友都会遇到飞控上的问题(我就是。。)然而去找老鸟时他们都说太忙,或者根本不屑于指点(新手毕竟too young),国内网上的解决事例比较少,国外的英文看不懂。。。像betaflight这样的开源项目,资料都是英文的,对国内的许多模友不太友好。对此,楼主就把GitHub上的一些东西翻译过来,和大家分享。(楼主理科狗码字,在语言表达上可能有点弱orz)另放上中英文对照,因为有些东西翻译成中文意思会有点偏差,看英文原文会更加准确。一些有错的地方,也请各位大神指出,大家一起进步吧。
下面翻译的都是GitHub上betaflight的内容,主要面对刚刚入坑的新手,包括飞控问题的解决、一些CLI命令和其他一些的东西。GitHub上内容太多,只能挑一些重点了orz  过后如果有更新的话楼主还会补充上来。
用BootLoader刷固件
用于飞控挂了或者刷固件失败之后让飞控复活。楼主的飞控之前挂了,连接电脑完全没有反应,没有插入硬件的提示音,设备管理器也没有刷新。然而装在飞机上还能飞,却没法调参。后来在GitHub上看到这个复活的方法,因为STM32的BootLoader在ROM里,不会变砖。如果不是硬件出问题,这个方法基本万能。。。
DFU flashing under Windows - USB DFU:
Make sure you have zadig if you're using Windows to enable theDFUdriver. Instructions:
1.    DownloadZadig: http://zadig.akeo.ie/
2.    Put devicein DFU mode. If this is the     first time to putBetaflight on you need to short the BL or BOOT pads (or    press and hold the BOOT tactile button) while plugging theUSB into the     board.
3.    OpenZadig.
4.    Options> List All Devices
5.    Click onthe drop bown box and click the     device listed STM32BOOTLOADER
6.    In the boxto the right of the green     arrow, select WinUSB(v6.1.7600.16385)
7.    ClickInstall Driver
8.    After theinstall completes, restart your     computer (you can cheatand ensure no browser is running - but it is not    guaranteed to work). The board should stay in DFU mode - IF -usb power     remains during the reboot. If not, executestep 2 again.
9.    Open up theBetaflight configurator.
10.  Go to firmware flasher, select "No    reboot sequence"
11.  On F4 targets disable "Full Chip    Erase". Use the config reset in Configurator later. (#200 reports     the issue.)
12.  Load Firmware [Local]
13.  Browse to and select the proper hex file.    (betaflight_REVO.hex for the revo, for example)
14.  Click flash firmware.
15.  The board should start flashing. First    indicating an erase, then flash and finally verification.
16.  Once flashed your board will reboot, but    you may need to install the STM VCP driver (see below) forBetaflight     Configurator to connect to the board.


DFU刷写模式:
       首先准备好zadig软件
1.   下载zadig
2.   让飞控进入DFU模式。短接boot,或者按boot按钮,插上USB
3.   打开zadig
4.   Options >List All Devices(这东西的界面是英文的,就不翻译了,直接点就行)
5.   点那个很长的框,选择STM32 BOOTLOADER
6.   绿色箭头指着的框选WinUSB (v6.1.7600.16385)
7.   点INSTALLDRIVER
8.   安装完成后重启电脑(也可以不重启,但是要确保Chrome浏览器都关闭),这时飞控会进入DFU模式——如果电脑重启的时候飞控没有断电。断电了就重复步骤2
9.   打开betaflight地面站
10.去到刷固件界面,选"No rebootsequence"
11.MCU是STM32F4的飞控不要选"FullChip Erase",过后调参时再慢慢设置
12.加载本地固件
13.找到和飞控对应的固件(比如REVO飞控(好像某宝上叫F4飞控?)就可以是betaflight_3.1.3_REVO.hex)
14.点flash firmware
15.飞控上的灯开始闪烁,进度条先是erasing,然后是flashing,最后verifying
16.刷完了飞控会重启,然后安装VCP驱动来连接地面站调参

(如果之前这样做过,短接boot插上USB后,地面站的com口选择显示DFU,就可以直接刷固件了。第一次进入DFU应该要走一遍流程。)




评分

参与人数 3威望 +5 模币 +1 收起 理由
374440635 + 1 + 1 很给力!
sundayfox + 2 赞一个!
supertankhzt + 2 很给力!

查看全部评分

欢迎继续阅读楼主其他信息

来自 2楼
 楼主| 发表于 2017-2-7 15:48 | 只看该作者
关于不上桨推油门马达会自己加速的问题
论坛上很多新手都问了这样的问题,担心飞起来后飞机会翻。。。实际上这是正常现象,我以前也解答过很多模友的疑问。下面是GitHub上的解释
Why do my motors keep accelerating on the bench when I arm without props ?
With props off on the bench, I arm the quad and the motors start. After increasing throttle a small amount then back to minimum I notice the motors keep increasing in speed. They don't go to max or anything, but they climb noticeably. Now if I was in Angle/Horizon with the accelerometer enabled I could understand that the quad was tying to level itself. But in Acro mode why should the throttle change on its own ? I'm guessing this is an Airmode effect. But just wanted to understand a little more about why.
Answer: That is the flight controller trying to correct for changes in aspect, mainly due to fact your quad shakes slightly when the motors spin, the sensors pick it up and then the flight controller tries to correct, it can't because you don't have props on. All perfectly normal.
Additional explanation:
Originally Posted by Master Zap View Post Sorry, but this sounds like a fundamental misunderstanding of how the I term works.
Or conversely, the behavior you see on the bench is exactly expected of the I term.
Why? Because the copter isn't moving. If there is no movement, you have no gyro input. With no gyro input, there will be no positive (or negative) error signal to add to the I term.
The I term is additive. As error is measured, that error is added to I. If error persists, I grows. If error STOPS, I STAYS. Only at NEGATIVE error does I shrink back down again.
Since your copter isn't flying, you are only giving it half of the error (your stick input tells the copter to rotate x degrees a second, the copter is rotating no degrees per second at all, hence you have an x degrees per second "error" measurement) and I will grow. In the air, the copter would start rotating, error would shrink, and eventually become negative and decrease the I term back.
So perfectly normal.
You simply cannot make judgments on an I terms behavior without letting that I term act the way it wants. With props off, on the bench, you just get meaninglessness.
/Z
A quick way to test that there isn't some other issue causing it is use the motor test page to remove the PIDs from the equation.

为什么我不上桨,给一点油门,马达会自己加速?
我的机机没有上桨,放在凳子上,解锁后推一点油门,我发现马达越转越快。他们没有转到极速或者什么的,但就是在加速。如果是自稳或者半自稳,我知道这是飞控在试着恢复水平。可是为什么开手动模式他也会自己加速?我猜这是因为开了airmode(瞎猜的),不过我还是想搞懂为什么。
回答:这是飞控在恢复设定的角度,主要是因为马达转起来后飞机有点震动,角度变了,被传感器监测到,飞控就试着恢复原来的角度。
其他解释:
这是对I值的一个常见的误解。
或者说,马达加速是因为I值的存在。
为什么?因为飞机没有动,陀螺仪的输入就没有变化,原来的误差就会加到I值上。
I值是有增益的,误差测量出来后,会加到I值上。如果误差还在,I值会增加。误差没了,I值就保持不变。只有负的(已经恢复了的)误差才会让I值减小。
因为机机没有飞起来,只是给他出现误差(打杆输入每秒x度的滚转速度,机机并没有动,就有个每秒x度的误差),然后I值就会增加。在天上,飞机会自己修正姿态,误差减小,I值就跟着减小。
所以这个现象是完全正常的。
这个误解只是不了解I值的作用方式。没上桨时,他只是在做无用功。

来自 3楼
 楼主| 发表于 2017-2-7 15:48 | 只看该作者
本帖最后由 Flameout 于 2017-2-7 15:58 编辑

BlHeli电调的调参:
Betaflight BLHeli ESC pass-through
1-Connect FC to computer and note COMM port number.
2- Open BLHeli Suite. Select Com Port and click Connect.
3- In 'Select ATEM/SILABS Interface' menu select 'SILABS BLHeli Bootloader (CleanFlight)'.
4- Apply power the ESCs (through a Current Limiter).
5- Click 'Read Setup'.

1.   飞控连接电脑,记下com口数字
2.   打开BL的软件,选择com口,点Connect
3.   在“SelectATEM/SILABS Interface”那里选择“SILABS BLHeli Bootloader(CleanFlight)”
4.   电调上电
5.   点击“ReadSetup”




来自 4楼
 楼主| 发表于 2017-2-7 15:49 | 只看该作者
本帖最后由 Flameout 于 2017-2-7 15:58 编辑

重置马达顺序(用于bf3.1):
RemapMotors with Resource Command(3.1)
Necessity for swapping/shifting/rotating motor positions risesfrom time to time. Beforev3.1, we had to either use long wires between FC andESC to retain the original mapping (which make the build messy) or use custommmix to change how each motor contributes to attitude adjustment.
With 3.1, we can easily modify motor mappings with resource CLIcommand. See Betaflight resource mapping for descriptions of this command.
Here, the most common case of "rotating FC or PDB" istaken as an example.
Suppose you have a board with motor numbers labeled like this:
    FRONT
4           2
3           1
    BACK
And for some reason, you want to rotate the board 90-degreesclock wise, ending up with
    FRONT
3           4
1                     2
    BACK
Let's fix this.
1.   Record the current motor mapping
Type resource list to find out the original mapping.
# resourcelist...A06: MOTOR 1A07: MOTOR 2A11: MOTOR 3A12: MOTOR 4...
2.   Write a diagram with the original pin to motor mapping.
3.          FRONT
4.   4(A12)       2(A7)
5.   
6.   3(A11)       1(A6)
7.          BACK
8.   Rotate the drawing clock wise 90-degrees.
9.          FRONT
10.3(A11)       4(A12)
11.  
12.1(A6)        2(A7)
13.       BACK
14. Remove the old motor position label.
15.       FRONT
16.A11            A12
17.  
18.A6             A7
19.       BACK
This is your actual MCU pin position.
20. Assign new motor position label to the MCU pins.
21.       FRONT
22.4(A11)       2(A12)
23.  
24.3(A6)        1(A7)
25.       BACK
This is your new mapping.
26. The cli resource command for this mapping is:
27.resource motor 1 a728. resource motor 2 a1229. resource motor 3 a630. resourcemotor 4 a1131. save
As you enter these commands, you will be seeing error messagesin the form "*ERROR * X also used by MOTOR Y". The overlappingmapping is transitional, and you will be ending up with clean mapping at theend. If you don't like the error messages, you can clear the old mapping byfollowing typing following commands prior to new mapping.
resourcemotor 1 none
resourcemotor 2 none
resourcemotor 3 none
resourcemotor 4 none
This is just an example. Please work on your case on your ownand verify the results before flying.
Have fun!!!
有时候重置马达顺序是有必要的。在bf3.1之前,要改变马达顺序,只能重新接线(这样做走线会很乱),或者用mmix命令。
在bf3.1中,用“resource”命令可以方便地更改马达顺序。
然后,走起!
飞控默认的马达顺序是这样:
    前
4           2
3           1     
     后
然后你想让他旋转90度,像这样:
    前
3           4
1           2
     后
就可以这么做:
1.   记下马达顺序
          CLI中输入“resource list”
# resourcelist...
A06: MOTOR 1
A07: MOTOR 2
A11: MOTOR 3
A12: MOTOR 4...
2.   写下马达顺序:
           前
4(A12)       2(A7)
3(A11)       1(A6)
           后
3.   写下旋转90度之后的马达顺序:
          前
3(A11)       4(A12)
1(A6)       2(A7)
          后
4.去掉1234的位置标记
        前
A11           A12
A6            A7
         后
这就是飞控处理器马达输出口的顺序
5.定义新的马达输出口:
          前
4(A11)       2(A12)
3(A6)       1(A7)
          后
这就是新的马达顺序
6.在CLI中输入:
resourcemotor 1 a7
resource motor 2 a12
resource motor 3 a6
resource motor 4 a11
save
输入这些命令时,你会看到一些错误提示。如果不想看到他们,可以先清除旧的马达顺序:
resourcemotor 1 none
resource motor 2 none
resource motor 3 none
resource motor 4 none
这只是一个例子。你可以举一反三设置自己的马达顺序。
祝爽飞!


来自 5楼
 楼主| 发表于 2017-2-7 15:50 | 只看该作者
本帖最后由 Flameout 于 2017-2-8 16:08 编辑

一些CLI命令:
                       
https://github.com/betaflight/betaflight/wiki/Betaflight-specific-CLI-commands
GET command New
CLI feature is type a "get"and part of a CLI command name (example: "get acc"). The cli willreturn all CLI commands that have the name part with the current value pluswhat the valid value range or valid Names. Unknown on which Version this wasadded but is in v2.6.1 This is a very handy feature and allows easy to findvariable names that can then be copy/pasted from the CLI display to the commandline entry box.
GET命令
一个新的CLI功能,输入“get”加上CLI命令的名字,比如“get acc”。CLI会把含有这个名字的命令、当前值以及可用的值的范围显示出来。不知何时就有了这个功能,不过在2.6.1中很好用,可以方便的输入命令,或者直接复制下来。

Set small_angle=x
把飞控解最大锁角度设为x,等于号后面跟着数字。
也就是说,飞控倾斜角度超过x度后不能解锁。X的范围是0~180度,x=180时就是任意角度都能解锁。

Beeper_all
所有情况下BB响都会叫
包括这些情况:
beeper  GYRO_CALIBRATED           陀螺仪校准完成
beeper  RX_LOST                           信号丢失
beeper  RX_LOST_LANDING           信号丢失并且着陆
beeper  DISARMING                       飞控已经上锁
beeper  ARMING                           飞控已经解锁
beeper  ARMING_GPS_FIX              飞控解锁,GPS正常
beeper  BAT_CRIT_LOW                   电池电压比较低
beeper  BAT_LOW                           电池电压低
beeper  GPS_STATUS                       GPS状况
beeper  RX_SET                               收到信号
beeper  ACC_CALIBRATION             加速度计校准完成
beeper  ACC_CALIBRATION_FAIL     加速度计校准失败
beeper  READY_BEEP                       准备响(?)
beeper  MULTI_BEEPS                     多重响(?)
beeper  DISARM_REPEAT                上锁后重复响
beeper  ARMED                              飞控解锁
beeper  SYSTEM_INIT                      系统什么鬼的。。。(后来有模友解释了,这是类似于STM32初始化的东西,禁用后上电、飞控重启,只会叫一声,不会一连串地叫。)
beeper  ON_USB                            连接USB后也会响

beeper –on_usb
连接USB后关掉BB响,这样在调机时可以比较安静。。也可以在上述命令的事件前加个负号“-”,关闭这个事件下的BB响。比如beeper  -ARMING,解锁后就不会一直叫了。

set debug_mode=notch

set enable_buzzer_p6 = OFF
可选OFF或者ON,把BB响定义在马达6口,只能在CC3D上使用。

set vbat_pid_compensation = OFF
[ON,OFF]
Uses maximum cell voltage as an offset. Tune your quad with afull lipo and your pids will be scaled up to 25% when voltage gets lower.
Also good when you have old and new lipos. The old ones withmore voltage droop will automatically get more PID adjustments. It alsodisables itself when voltage completely drops below 2 cells. The cell count iscalculated and the PID adjustments are based on the Cell voltage. Thereforemoving from 3S to 4S is not a problem.
Note: This requires VBAT connection on FC.
PID和电压联动补偿
以满电的电池作为补偿基准。用满电的电池调出来的PID,在电压低时会放大25%。
在你手头上同时有新旧电池时也很好用。降压大的旧电池可以自动得到PID的补偿。在降压超过两块电池时会自动禁用。电压是校准好的,PID的调节基于这个电压。此外,从3S换到4S电池也没有问题。
注意:要打开飞控的电压传感器。





来自 6楼
 楼主| 发表于 2017-2-7 15:50 | 只看该作者
本帖最后由 Flameout 于 2017-2-7 15:59 编辑

论坛里的一些链接,新手们看一看吧:
装机、基础调参设置
这篇文章里推荐新手直接入好一点的设备,我是双手赞成的。某宝上一些商家推出的所谓“新手套装”,配置简直不忍直视...楼主的第一台穿越机,就是按照新手套装来的。。280机架,2206kv1900马达,15A电调。。只能上3S电池,过弯快了根本拉不起来...后来跟着本地dalao的节奏,装了一架210,妥妥的跟着他们爽飞。不过我还有点手抖orz


PID和滤波的调试
论坛里已经有大神翻译过来了,详见这个帖子:http://bbs.5imx.com/forum.php?mod=viewthread&tid=1226022&extra=page%3D1%26filter%3Ddigest%26digest%3D1


来自 26楼
 楼主| 发表于 2017-4-2 15:38 | 只看该作者
What is thedifference between Min_Check Min_command and Min_throttle and stick inputs ?
FromMasterZap
min_checkhas nothing to do with ESC's ....
min_commandis the value sent when disarmed (or when armed and motor stop is on, i.e. whenwe want the motors not to spin). min_throttle is the value sent when armed(with motor stop off)
min_checkis about stick command and only matters towards your actual throttle stick. Ithas no effect on what is sent to the ESC.
Themisunderstanding of this comes from the fact that your throttle stick doesn'teven begin "working" until you are above min_check. People tryexplaining this with sentences like "the FC will map min_check tomin_throttle", which while true, makes people believe there is thisrelation. There is no relation. All that is being said is "the flightcontroller only cares about the range above min_check up to full throttle, andwill remap that range into the 0%-100% input to the flight controller, whichthen outputs whatever it wants to the motors"
From waltr
In general(all channels) min_check & max_check are only for Stick commands. then ONLYon throttle channel min_check is used in the code for Arming and PID controllerdepending on other settings (pid_at_min_throttle, AirMode, etc). mid_rc (Note:this is incorrectly label throttle middle in the CF config GUI) is telling theFC what your Stick Center value is, typically 1500 but may be 1520 on someradios. mid_rc is NOT used on throttle channel.
Thedefault max_throttle of 1850 comes from MultiWii and is a SAFE max value forALL ESCs.

Min_check、min_command、min_throttle和遥杆输入的区别是什么?
(为了方便阅读,我把min_check翻译成“最低检查点”,min_command是“最小输出值”,min_throttle是“最低启动值”)
MasterZap大神的回答:
最低检查点对电调没有任何影响…..
最小输出值是:上锁时,或解锁了但是启用了motor_stop功能,输出给电调的信号。最低启动值是解锁并且没开motor_stop时给电调的信号。
最低检查点只用于判断油门杆的指令,它不影响对电调的输出。
这个误解来源于在最低检查点以下时,油门杆似乎不起作用。许多人说是“飞控会把最低检查点的信号值输出给电调”,搞得很多人都这么认为。实际上这两个值并没有关系。真实的情况是,只有油门输入值在最低检查点到满油之间,才会给电调输出转动的信号,并且油门杆量和马达输出从1%到100%一一对应。
Waltr大神的回答:
总的来说,(所有通道的)最低检查点和最高检查点只是判断遥杆的指令。只有在油门通道上,最低检查点才和上锁解锁有关。PID和其他设置有关(pid_at_min_throttle、airmode那些)。mid_rc(并不是油门中点),是各通道的中值,也就是遥杆中立点,一般是1500,有些控是1520。它不适用于油门通道。
默认的最高油门输出1850是从multiwii飞控那里搬来的,对电调也比较安全。

译者注:
可以这么理解:解锁之后:油门杆最低→油门值低于min_check→飞控给电调的信号是min_command,即最低输出,这时候马达不转→推油门杆→油门值高于min_check→飞控给电调的信号是min_throttle,即最低油门值,马达转动。
最低检查点min_check可以设得比油门杆最低时飞控收到的信号略高,这样只要推油门就可以启动马达,而不要推一定距离才能启动。比如,油门杆最低,看到的信号值是1000,那么min_check就设成1010。具体方法:cli中输入set min_check=1010。


7
 楼主| 发表于 2017-2-7 15:54 | 只看该作者
本帖最后由 Flameout 于 2017-2-7 16:00 编辑

本来是想一整篇文章发上去的,没有分段,但是总是弹出来什么“不合法请求”,问了老模友,他也看不到为什么,说分段发试试。。所以只能这样发了,一层楼一个部分。。后面几楼不知道为什么字号自己变小了,本来都是微软雅黑4号的字...又重新编辑过了。过后betaflight有重要更新的也会翻译跟上来,造福模友。。


8
发表于 2017-2-7 16:15 | 只看该作者
好定西,先收藏了
9
发表于 2017-2-7 16:22 | 只看该作者

10
发表于 2017-2-7 18:27 | 只看该作者
太棒了!感谢楼主!
11
发表于 2017-2-7 22:33 | 只看该作者
楼主厉害!给个大赞👍
12
发表于 2017-2-7 23:20 | 只看该作者
 SYSTEM_INIT,在STM32程序中应该是类似于“系统初始化”之类的函数调用,所以是否是在飞控上电板子初始化(或初始化成功),beeper响!
13
发表于 2017-2-8 09:43 | 只看该作者
Flameout 发表于 2017-2-7 15:48
关于不上桨推油门马达会自己加速的问题
论坛上很多新手都问了这样的问题,担心飞起来后飞机会翻。。。实际 ...

我觉得是不理解开源飞控与商品飞控的区别,后者大多容易积分饱和,所以不会一直加速下去。

14
 楼主| 发表于 2017-2-8 09:52 | 只看该作者
supertankhzt 发表于 2017-2-8 09:43
我觉得是不理解开源飞控与商品飞控的区别,后者大多容易积分饱和,所以不会一直加速下去。

这个要看具体的算法,有些固件的I值增益会有限制,比如openpilot,有些可以无限积分,比如betaflight比较早的一些版本。这个和是否开源关系不大吧。。非开源的飞控我没用过不太清楚。。
来自苹果客户端来自苹果客户端
15
发表于 2017-2-8 12:06 | 只看该作者
顶楼主,好东西收藏
16
 楼主| 发表于 2017-2-8 12:55 | 只看该作者
中庸2017 发表于 2017-2-7 23:20
 SYSTEM_INIT,在STM32程序中应该是类似于“系统初始化”之类的函数调用,所以是否是在飞控上电板子初 ...

这个命令我还没试过,不太清楚。完整的禁用语句应该是“beeper -system_init”,有空我去试一下。。
来自苹果客户端来自苹果客户端
17
 楼主| 发表于 2017-2-8 16:23 | 只看该作者
中庸2017 发表于 2017-2-7 23:20
 SYSTEM_INIT,在STM32程序中应该是类似于“系统初始化”之类的函数调用,所以是否是在飞控上电板子初 ...

谢谢指点,刚才我测试过了,是上电或者飞控重启时的初始化。禁用后上电只会叫一声,启用会一连串地叫。

18
发表于 2017-2-8 17:31 | 只看该作者
Flameout 发表于 2017-2-8 16:23
谢谢指点,刚才我测试过了,是上电或者飞控重启时的初始化。禁用后上电只会叫一声,启用会一连串地叫。
...

您客气!原来鼓捣过智能小车,在arduino代码中总会见到这个相似的语句,是个aerduino固有函数,通常在主函数的开始调用,就是给STM32初始化!

19
发表于 2017-2-8 23:30 | 只看该作者
set vbat_pid_compensation = OFF
[ON,OFF]
Uses maximum cell voltage as an offset. Tune your quad with afull lipo and your pids will be scaled up to 25% when voltage gets lower.
Also good when you have old and new lipos. The old ones withmore voltage droop will automatically get more PID adjustments. It alsodisables itself when voltage completely drops below 2 cells. The cell count iscalculated and the PID adjustments are based on the Cell voltage. Thereforemoving from 3S to 4S is not a problem.
Note: This requires VBAT connection on FC.
PID和电压联动补偿
以满电的电池作为补偿基准。用满电的电池调出来的PID,在电压低时会放大25%。
在你手头上同时有新旧电池时也很好用。降压大的旧电池可以自动得到PID的补偿。在降压超过两块电池时会自动禁用。电压是校准好的,PID的调节基于这个电压。此外,从3S换到4S电池也没有问题。
注意:要打开飞控的电压传感器。

这个开启是ON吧?
20
发表于 2017-2-9 01:24 | 只看该作者
楼主厉害…点赞
来自苹果客户端来自苹果客户端
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

关闭

【站内推荐】上一条 /1 下一条

快速回复 返回顶部 返回列表