Skip to content

Commit

Permalink
Merge pull request #3 from Steven-Ajex/main
Browse files Browse the repository at this point in the history
modified the size of the picture and some mistakes
  • Loading branch information
JcZou authored Jul 17, 2024
2 parents 7d8f45a + f928111 commit f92b70d
Show file tree
Hide file tree
Showing 33 changed files with 226 additions and 103 deletions.
2 changes: 1 addition & 1 deletion docs/content_ch/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
## 什么是Firmament?

Firmament (FMT) 是一款基于模型设计 (Model Based Design, MBD) 的开源自驾仪,可被用来快速构建无人机、车辆、船舶、机器人等的无人控制系统。基于模型设计 (MBD) 方法允许高效快速地开发高质量的控制系统,适用于各种无人车辆,包括航空器、地面车辆、船舶和机器人。基于模型设计已经被广泛应用于汽车制造、航空航天等行业,当前采用基于模型设计模式开发的飞控系统凤毛菱角,而 FMT 就是为此而诞生。借助其直观的图形界面和丰富的预构建模块库,FMT 为用户提供了一个强大的工具集,用于构建和测试复杂的控制算法,以及生成高度优化的代码以部署在嵌入式系统上。此外,FMT 具有高度的灵活性和可定制性,允许用户根据特定的应用需求对系统进行调整,并轻松与其他硬件和软件平台集成。因此,FMT 是研究人员、开发人员和工程师快速有效地构建和测试各种无人平台控制系统的理想选择。
Firmament (FMT) 是一款基于模型设计 (Model Based Design, MBD) 的开源自驾仪,可被用来快速构建无人机、车辆、船舶、机器人等的无人控制系统。基于模型设计 (MBD) 方法允许高效快速地开发高质量的控制系统,适用于各种无人控制平台,包括航空器、地面车辆、船舶和机器人。基于模型设计已经被广泛应用于汽车制造、航空航天等行业,当前采用基于模型设计模式开发的飞控系统凤毛菱角,而 FMT 就是为此而诞生。借助其直观的图形界面和丰富的预构建模块库,FMT 为用户提供了一个强大的工具集,用于构建和测试复杂的控制算法,以及生成高度优化的代码以部署在嵌入式系统上。此外,FMT 具有高度的灵活性和可定制性,允许用户根据特定的应用需求对系统进行调整,并轻松与其他硬件和软件平台集成。因此,FMT 是研究人员、开发人员和工程师快速有效地构建和测试各种无人平台控制系统的理想选择。

这个系统是一个全面且先进的自动驾驶解决方案,主要由两个不同的部分组成:FMT-Firmware 和 FMT-Model。

Expand Down
6 changes: 3 additions & 3 deletions docs/content_ch/advanced/offboard.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,13 @@


<p align="center">
<img src="./figures/ttyacm0.png" width="40%">
<img src="./figures/ttyacm0.png" width="30%">
</p>

修改 MAVROS 中的 `px4.launch` 文件,使设备端口和波特率与设备配置一致。

<p align="center">
<img src="./figures/px4_launch.png" width="40%">
<img src="./figures/px4_launch.png" width="30%">
</p>

然后,使用以下命令来运行 MAVROS:
Expand Down Expand Up @@ -164,7 +164,7 @@ coordinate_frame: 1
type_mask: 2560
position:
x: 100.0
y: 50.0
y: 50.03
z: 10.0
velocity:
x: 0.0
Expand Down
6 changes: 3 additions & 3 deletions docs/content_ch/developer/contribution.md
Original file line number Diff line number Diff line change
Expand Up @@ -203,15 +203,15 @@ ColumnLimit: 0
[Firmament-Autopilot/FMT-Firmware](https://github.com/Firmament-Autopilot/FMT-Firmware) 仓库 Fork 到您的 Git 仓库中。

<p align="center">
<img src="./figures/fork.png" width="70%">
<img src="./figures/fork.png" width="65%">
</p>

#### 克隆

在您的仓库中,复制在您 Fork 后的仓库链接:

<p align="center">
<img src="./figures/clone.png" width="70%">
<img src="./figures/clone.png" width="65%">
</p>

您可以使用 `git clone` 命令将仓库复制到您的计算机上:
Expand Down Expand Up @@ -278,7 +278,7 @@ git push origin YourBranchName
进入您 Github 账户下的 FMT 仓库,点击 `New pull request -> Create pull request`。确保选择正确的分支。

<p align="center">
<img src="./figures/pr.jpg" width="70%">
<img src="./figures/pr.jpg" width="65%">
</p>

- 步骤 1:填写此 Pull Request 的标题
Expand Down
4 changes: 2 additions & 2 deletions docs/content_ch/developer/drivers.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ FMT驱动程序采用分层架构模式设计,这些驱动程序可以广泛
FMT提供了一个硬件抽象层(HAL),向上提供统一的设备接口(读取/写入/控制),同时向下定义了驱动程序需要实现的操作接口。

<p align="center">
<img src="./figures/driver_arch.png" width="40%">
<img src="./figures/driver_arch.png" width="30%">
</p>

在大多数目标板上,HAL建立了适用于标准化驱动程序,尽管可能会存在一些独特的设备,这些设备专属于特定的硬件配置。在这种情况下,你可以选择绕过HAL,而是利用uMCN的发布/订阅机制进行消息传输。

<p align="center">
<img src="./figures/driver_arch2.png" width="40%">
<img src="./figures/driver_arch2.png" width="30%">
</p>

### 创建驱动程序
Expand Down
10 changes: 5 additions & 5 deletions docs/content_ch/hardware/flight_controller.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,29 +6,29 @@
- [AMOV ICF5](https://github.com/Firmament-Autopilot/FMT-Firmware/blob/master/target/amov/icf5/README.md)

<p align="center">
<img src="https://img.alicdn.com/imgextra/i1/135449951/O1CN01CvrvTD2NNc4K3EhjM_!!135449951.jpg" width="35%">
<img src="https://img.alicdn.com/imgextra/i1/135449951/O1CN01CvrvTD2NNc4K3EhjM_!!135449951.jpg" width="20%">
</p>

- [CUAV V5+](https://github.com/Firmament-Autopilot/FMT-Firmware/blob/master/target/cuav/v5_plus/README.md)

<p align="center">
<img src="https://ts1.cn.mm.bing.net/th/id/R-C.0c4db9f7ec536948d5704788f415298b?rik=BAVgwHp04DEcKA&riu=http%3a%2f%2fdoc.cuav.net%2fflight-controller%2fv5-autopilot%2fassets%2fflight-controller%2fv5-autopilot%2fv5-autopilot.jpg&ehk=GIZiwHBr9ioGEkpfhQvGIR7yFWMXNWecdOXP4G6VdXw%3d&risl=&pid=ImgRaw&r=0" width="35%">
<img src="https://ts1.cn.mm.bing.net/th/id/R-C.0c4db9f7ec536948d5704788f415298b?rik=BAVgwHp04DEcKA&riu=http%3a%2f%2fdoc.cuav.net%2fflight-controller%2fv5-autopilot%2fassets%2fflight-controller%2fv5-autopilot%2fv5-autopilot.jpg&ehk=GIZiwHBr9ioGEkpfhQvGIR7yFWMXNWecdOXP4G6VdXw%3d&risl=&pid=ImgRaw&r=0" width="20%">
</p>

- [Pixhawk 4](https://github.com/Firmament-Autopilot/FMT-Firmware/blob/master/target/pixhawk/fmu-v5/README.md)

<p align="center">
<img src="figures/pixhawk4.jpg" width="35%">
<img src="figures/pixhawk4.jpg" width="20%">
</p>

- [Pixhawk 2.4.6](https://github.com/Firmament-Autopilot/FMT-Firmware/blob/master/target/pixhawk/fmu-v2/README.md)

<p align="center">
<img src="figures/pixhawk246.jpg" width="35%">
<img src="figures/pixhawk246.jpg" width="20%">
</p>

- [Cube Orange](https://github.com/Firmament-Autopilot/FMT-Firmware/blob/master/target/cubepilot/cubeorange/README.md)

<p align="center">
<img src="https://a2zrc.com/wp-content/uploads/2021/05/Flight_Controller_Cube_Orange_with_ADS-B_IN.jpg" width="35%">
<img src="https://a2zrc.com/wp-content/uploads/2021/05/Flight_Controller_Cube_Orange_with_ADS-B_IN.jpg" width="20%">
</p>
2 changes: 1 addition & 1 deletion docs/content_ch/hardware/peripheral.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
## 外设

本节包含与外部传感器及其他可*连接到飞行控制器*的可选外围硬件相关的主题。
本节包含与外部传感器及其他可 *连接到飞行控制器* 的可选外围硬件相关的主题。
4 changes: 2 additions & 2 deletions docs/content_ch/introduction/calibration/accel_calib.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@

1. 点击**Accelerometer**传感器按钮。
<p align="center">
<img src="figures/accel_calib1.png" width="60%">
<img src="figures/accel_calib1.png" width="50%">
</p>
2. 点击OK开始校准。
3. 将机体置于屏幕图片所示方向。一旦黄色框出现,将机体静置。当前方向校准完成后屏幕上对应图标的框将变绿。
<p align="center">
<img src="figures/accel_calib2.png" width="60%">
<img src="figures/accel_calib2.png" width="50%">
</p>
4. 将机体置于各个方向并重复以上步骤。

Expand Down
6 changes: 3 additions & 3 deletions docs/content_ch/introduction/calibration/gyro_calib.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@

1. 将机体放置水平并保持不动,然后点击**Gyroscope**传感器按钮。
<p align="center">
<img src="figures/gyro_calib1.png" width="60%">
<img src="figures/gyro_calib1.png" width="50%">
</p>
2. 点击OK开始校准。顶部的进度条将显示校准进度。
<p align="center">
<img src="figures/gyro_calib2.png" width="60%">
<img src="figures/gyro_calib2.png" width="50%">
</p>
3. 完成后,QGroundControl将显示进度条*Calibration complete*
<p align="center">
<img src="figures/gyro_calib3.png" width="60%">
<img src="figures/gyro_calib3.png" width="50%">
</p>

## 查看&保存结果
Expand Down
4 changes: 2 additions & 2 deletions docs/content_ch/introduction/calibration/level_calib.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@

1. 点击**Level Horizon**按钮。
<p align="center">
<img src="figures/level_calib1.png" width="60%">
<img src="figures/level_calib1.png" width="50%">
</p>
2. 将机体按水平飞行方向放置在平面上。
3. 点击**OK**按钮开始校准。
4. 等待校准完成。
<p align="center">
<img src="figures/level_calib2.png" width="60%">
<img src="figures/level_calib2.png" width="50%">
</p>
## 查看&保存结果

Expand Down
4 changes: 2 additions & 2 deletions docs/content_ch/introduction/calibration/mag_calib.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@

1. 点击**Compass**按钮。
<p align="center">
<img src="figures/mag_calib1.png" width="60%">
<img src="figures/mag_calib1.png" width="50%">
</p>
2. 点击**OK**开始校准。
3. 将机体置于红框所示(未完成)状态并保持不动。一旦黄色框出现,将机体沿着指定轴进行旋转。当前方向校准完成后屏幕上对应图标将变为绿框。
<p align="center">
<img src="figures/mag_calib2.png" width="60%">
<img src="figures/mag_calib2.png" width="50%">
</p>
4. 对各个方向重复校准步骤。

Expand Down
4 changes: 2 additions & 2 deletions docs/content_ch/introduction/calibration/rc_calib.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@

- Step1:在校准之前,请先确保遥控接收机有连接到飞控并且遥控器有打开。我们可以输入`mcn list`指令来查看*rc_channels*的消息的发布频率是否为非0,非0则表示有正常收到遥控信号。
<p align="center">
<img src="figures/rc_calib1.png" width="50%">
<img src="figures/rc_calib1.png" width="35%">
</p>
- Step2:输入`rc calib`指令,并按照提示进行遥控校准。
<p align="center">
<img src="figures/rc_calib2.jpg" width="50%">
<img src="figures/rc_calib2.jpg" width="45%">
</p>
- Step3:校准完成后,校准参数将更新到`RC`参数组中,可以通过`param list RC`指令查看。`rc_trim_channels`消息是由原始遥控消息`rc_channels`校准后得到的,校准后的最大、最小和中值应该分别为2000,1000和1500。
- Step4:确认校准参数无误后,在控制台输入`param save`保存校准结果,否则系统断电将丢失未保存的校准结果。
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## 输出配置

`[actuator]`可以被用来配置actuator输出模块,它包含了一个或多个`[[actuator.devices]]`。如下是一个包含了两个输出设备*main_out**aux_out*的配置。对于像Pixhawk标准的硬件,包含了2个pwm输出端口(8个主输出口,8个辅助输出口)。不同的输出设备可以分别设置PWM的输出频率。
`[actuator]`可以被用来配置actuator输出模块,它包含了一个或多个`[[actuator.devices]]`。如下是一个包含了两个输出设备 *main_out**aux_out* 的配置。对于像Pixhawk标准的硬件,包含了2个pwm输出端口(8个主输出口,8个辅助输出口)。不同的输出设备可以分别设置PWM的输出频率。

```
[[actuator.devices]]
Expand Down
5 changes: 3 additions & 2 deletions docs/content_ch/introduction/configuration/console_config.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

控制台可以用来打印系统信息和提供命令交互,其可以被重定向到不同的设备上。

`[console]`可以被用来配置控制台设备,它包含了一个或者多个`[[console.devices]]`控制台可以使用的设备。如下所示的配置定义了三个控制台可以使用的设备,分别是*serial0**serial1**mav_console*,他们分别使用`[[console.devices]]`来定义。其中前两个是通用的串口设备,*mav_console*是一个比较特殊的设备(虚拟设备),它提供了和QGC的Mavlink Console接口的读写能力。
`[console]`可以被用来配置控制台设备,它包含了一个或者多个`[[console.devices]]`控制台可以使用的设备。如下所示的配置定义了三个控制台可以使用的设备,分别是*serial0**serial1**mav_console*,他们分别使用`[[console.devices]]`来定义。其中前两个是通用的串口设备,*mav_console* 是一个比较特殊的设备(虚拟设备),它提供了和QGC的Mavlink Console接口的读写能力。

系统默认使用第一个设备(在这里是serial0)。如果其它设备设置了`auto-switch`未true,那么当对应设备收到数据后,控制台将自动切换到对应设备上。

Expand Down Expand Up @@ -39,12 +39,13 @@
<p align="center">
<img src="figures/console_out.png" width="40%">
</p>

- **mavlink**: mavlink 控制台设备能够通过 mavlink 发送和接收数据。因此,您可以通过 QGC 的 mavlink 控制台访问控制台。。

| Argument | Type | Description |
| ----------- | ------- | ---------- |
| name | string | devie name |
| auto-switch | bool | if true, automatically switch to device if data received |
<p align="center">
<img src="figures/mavlink_console.png" width="65%">
<img src="figures/mavlink_console.png" width="45%">
</p>
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## 遥控配置

`[pilot-cmd]`用来对遥控模块进行配置。您可以在`[pilot-cmd.device]`配置遥控的协议,通道数,采样时间,通道数值范围等。摇杆通道可以通过`stick-channel`进行配置,它定义了*yaw*, *throttle*, *roll* and *pitch*对应的遥控通道。一个典型的遥控设备配置如下:
`[pilot-cmd]`用来对遥控模块进行配置。您可以在`[pilot-cmd.device]`配置遥控的协议,通道数,采样时间,通道数值范围等。摇杆通道可以通过`stick-channel`进行配置,它定义了*yaw*, *throttle*, *roll* and *pitch* 对应的遥控通道。一个典型的遥控设备配置如下:

```
# channel mapping for [yaw, throttle, roll, pitch]
Expand Down Expand Up @@ -42,7 +42,7 @@

这个配置的函数时如果遥控通道5的数值在[1800, 2000]的范围内,则自稳模式被选中。这里使用的是校准后的遥控通道值,它将通过`rc_trim_channels`消息发布。您可以通过输入`mcn echo rc_trim_channels`指令来查看各个遥控通道的数值。遥控通道的索引从1开始。
<p align="center">
<img src="figures/rc_trim_channels.png" width="50%">
<img src="figures/rc_trim_channels.png" width="30%">
</p>
mode的数值定义了遥控模式,它可以被FMS(Flight Management System)识别。完整的遥控模式定义如下所示。您可以添加自己的遥控模式定义,只要能被FMS识别就行。

Expand Down
110 changes: 110 additions & 0 deletions docs/content_ch/introduction/configuration/sysconfiguration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@

## 系统配置

在配置 FMT 系统模块时,避免重新编译整个系统是很必要的。FMT是一个高度可定制化的系统,并提供了一个[TOML](https://toml.io/en/)文件来配置系统组件。这将给用户根据需求来配置系统提供极大的灵活性。

当FMT系统运行起来的时候,它会去自动寻找板载文件系统上的`/sys/sysconfig.toml`配置文件。如果这个文件存在,则会加载里面的配置项。如果这个文件不存在,则会使用`default_config.h`中固化的默认系统配置。注意,默认配置只开启了有限的功能,遥控和电机输出功能都未开启。

每个BSP下的config目录都包含一个默认的配置文件 *sysconfig.toml* 。为了开启FMT的所有功能,用户需要将 *sysconfig.toml* 配置文件上传到板子的 */sys* 目录。这个文件包含了模块功能需要的配置信息。

- [Amov ICF5 Configuration](https://github.com/Firmament-Autopilot/FMT-Firmware/blob/master/target/amov/icf5/config/sysconfig.toml)
- [CUAV V5+ Configuration](https://github.com/Firmament-Autopilot/FMT-Firmware/blob/master/target/amov/icf5/config/sysconfig.toml)
- [HEX Cubeorange Configuration](https://github.com/Firmament-Autopilot/FMT-Firmware/blob/master/target/cubepilot/cubeorange/config/sysconfig.toml)
- [Pixhawk 4 Configuration](https://github.com/Firmament-Autopilot/FMT-Firmware/blob/master/target/pixhawk/fmu-v5/config/sysconfig.toml)
- [Pixhawk 2.4.6 Configuration](https://github.com/Firmament-Autopilot/FMT-Firmware/blob/master/target/pixhawk/fmu-v2/config/sysconfig.toml)

比如如下就是pixhawk4的默认`sysconfig.toml`配置文件。注意target的值需要跟BSP的目标名称相匹配(定义在*bsp.h*中)。不然的话系统将无法启动,为了防止使用错误的配置信息。

```
# FMT System Configuration File
# The target should match with BSP's target name
target = "Pixhawk4 FMUv5"
# Console Configuration
[console]
[[console.devices]]
type = "serial"
name = "serial0"
baudrate = 57600
auto-switch = true
[[console.devices]]
type = "mavlink"
name = "mav_console"
auto-switch = true
# Mavproxy Device Configuration
[mavproxy]
[[mavproxy.devices]]
type = "serial"
name = "serial1"
baudrate = 57600
[[mavproxy.devices]]
type = "usb"
name = "usbd0"
auto-switch = true
# Pilot CMD Configuration
[pilot-cmd]
# channel mapping for [yaw, throttle, roll, pitch]
stick-channel = [4,3,1,2]
[pilot-cmd.device]
type = "rc"
name = "rc"
protocol = "sbus" # sbus or ppm
channel-num = 6 # max supported channel: sbus:16, ppm:8
sample-time = 0.05 # sample time in second (-1 for inherit)
range = [1000,2000]
[[pilot-cmd.mode]]
mode = 5 # Position mode
channel = 5
range = [1000,1200]
[[pilot-cmd.mode]]
mode = 4 # Altitude mode
channel = 5
range = [1400,1600]
[[pilot-cmd.mode]]
mode = 3 # Stabilize mode
channel = 5
range = [1800,2000]
[[pilot-cmd.command]]
type = 1 # 1:event | 2:status
cmd = 1002 # FMS_Cmd_Disarm
channel = 6
range = [1800,2000]
# Actuator Configuration
[actuator]
[[actuator.devices]]
protocol = "pwm"
name = "main_out"
freq = 400 # pwm frequency in Hz
[[actuator.devices]]
protocol = "pwm"
name = "aux_out"
freq = 400 # pwm frequency in Hz
[[actuator.mappings]]
from = "control_out"
to = "main_out"
chan-map = [[1,2,3,4],[1,2,3,4]]
```
上传配置文件有两种方式:

1. QGC Onboard File(QGC 3.5.6 only):如果您正在使用QGround-Control 3.5.6,您可以利用其提供的 "Onboard Files" 功能直接将配置文件上传到系统中。这样做简化了整个配置过程,并且能够通过 QGC 轻松地管理配置。

<p align="center">
<img src="./figures/onboard_file.jpg" width="40%">
</p>

2. SD 卡阅读器:可以使用 SD 卡阅读器将配置文件上传到系统中。只需将配置文件复制到 SD 卡上,然后插入系统中即可。这种方法不依赖于 QGC 版本,并适用于无法访问 QGC Onboard Files 的系统。

更多的配置信息内容,请参考接下来的章节。
8 changes: 4 additions & 4 deletions docs/content_ch/introduction/debug.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,21 +18,21 @@ JLINK_SERVER = $JLink/JLinkGDBServerCL

4. 连接Jlink SWD的引脚(引脚1,7,9,4)到FMU Debug端口。你也可以连接J-Link TX/RX作为控制台使用。
<p align="center">
<img src="figures/jlink_pinout.png" width="50%">
<img src="figures/jlink_pinout.png" width="30%">
</p>

5. 在 VSCode 中安装 cortex-debug 扩展。确保安装 v1.4.4 版本或更低版本。这一点至关重要,因为更高版本不支持 arm-gcc 7-2018-q2-update。
<p align="center">
<img src="figures/cortex-debug.png" width="50%">
<img src="figures/cortex-debug.png" width="30%">
</p>

6. 要在 VS Code 中启动调试过程,请点击**Debug Run**按钮。然后,确保选择适合您的目标的配置。在 `.vscode/launch` 文件夹中已经为每个目标添加了调试配置。只需选择相关配置,即可轻松开始调试代码。
<p align="center">
<img src="figures/jlink1.png" width="50%">
<img src="figures/jlink1.png" width="30%">
</p>
7. 点击**Start Debugging**按钮。此操作将启动调试固件的下载并在主函数处停止,使您可以检查代码并逐步运行。在左侧,您会发现有几个可用窗口,例如查看变量值或检查外设数据。这些窗口提供了宝贵的见解,并帮助您在调试过程中监控相关信息。
<p align="center">
<img src="figures/jlink2.png" width="50%">
<img src="figures/jlink2.png" width="30%">
</p>
## Pixhawk FMU引脚

Expand Down
Loading

0 comments on commit f92b70d

Please sign in to comment.