-
Notifications
You must be signed in to change notification settings - Fork 54
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Create book and deploy it to the website (#6)
* Create book structure. * Add workflow for linting the markdown using markdownlint. * Add workflow for building the book with mdBook and deploying to the website. * Restyle mdBook and support GitHub-style alerts. * Add images zooming. * Add index, firmware structure and gyroscope articles.
- Loading branch information
Showing
22 changed files
with
1,330 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
name: Docs | ||
|
||
on: | ||
push: | ||
branches: [ '*' ] | ||
pull_request: | ||
branches: [ master ] | ||
|
||
jobs: | ||
markdownlint: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Install markdownlint | ||
run: npm install -g markdownlint-cli | ||
- name: Run markdownlint | ||
run: cd docs && markdownlint . | ||
|
||
build_book: | ||
runs-on: ubuntu-latest | ||
needs: markdownlint | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Install mdBook | ||
run: cargo install mdbook --vers 0.4.43 --locked | ||
- name: Build book | ||
run: cd docs && mdbook build | ||
- name: Upload artifact | ||
uses: actions/upload-pages-artifact@v3 | ||
with: | ||
path: docs/build | ||
|
||
deploy: | ||
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} | ||
concurrency: | ||
group: "pages" | ||
cancel-in-progress: true | ||
environment: | ||
name: github-pages | ||
url: ${{ steps.deployment.outputs.page_url }} | ||
runs-on: ubuntu-latest | ||
needs: build_book | ||
steps: | ||
- name: Deploy to GitHub Pages | ||
id: deployment | ||
uses: actions/deploy-pages@v1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
{ | ||
"MD004": { | ||
"style": "asterisk" | ||
}, | ||
"MD010": false, | ||
"MD013": false, | ||
"MD024": false, | ||
"MD033": false, | ||
"MD045": false | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
build: | ||
mdbook build | ||
|
||
serve: | ||
mdbook serve | ||
|
||
clean: | ||
mdbook clean | ||
|
||
.PHONY: build serve clean |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
# https://rust-lang.github.io/mdBook/format/configuration/preprocessors.html | ||
# https://rust-lang.github.io/mdBook/for_developers/preprocessors.html | ||
|
||
import json | ||
import sys | ||
import re | ||
|
||
|
||
def transform_markdown_to_html(markdown_text): | ||
def replace_blockquote(match): | ||
tag = match.group(1).lower() | ||
content = match.group(2).strip().replace('\n> ', ' ') | ||
return f'<div class="alert alert-{tag}">{content}</div>\n' | ||
|
||
pattern = re.compile(r'> \[!(NOTE|TIP|IMPORTANT|WARNING|CAUTION)\]\n>(.*?)\n?(?=(\n[^>]|\Z))', re.DOTALL) | ||
transformed_text = pattern.sub(replace_blockquote, markdown_text) | ||
return transformed_text | ||
|
||
|
||
if __name__ == '__main__': | ||
if len(sys.argv) > 1: | ||
if sys.argv[1] == 'supports': | ||
sys.exit(0) | ||
|
||
context, book = json.load(sys.stdin) | ||
|
||
for section in book['sections']: | ||
if 'Chapter' in section: | ||
section['Chapter']['content'] = transform_markdown_to_html(section['Chapter']['content']) | ||
|
||
print(json.dumps(book)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
.sidebar-resize-handle { display: none !important; } | ||
|
||
footer { | ||
contain: content; | ||
border-top: 3px solid #f4f4f4; | ||
} | ||
|
||
footer a.telegram, footer a.github { | ||
display: block; | ||
margin-bottom: 10px; | ||
margin-top: 10px; | ||
display: flex; | ||
align-items: center; | ||
text-decoration: none; | ||
} | ||
|
||
.content .github, .content .telegram { | ||
display: flex; | ||
align-items: center; | ||
text-align: center; | ||
justify-content: center; | ||
} | ||
|
||
.telegram::before, .github::before { | ||
font-family: FontAwesome; | ||
margin-right: 0.3em; | ||
font-size: 1.6em; | ||
color: black; | ||
} | ||
|
||
.github::before { | ||
content: "\f09b"; | ||
} | ||
|
||
.telegram::before { | ||
font-size: 1.4em; | ||
color: #0084c5; | ||
content: "\f2c6"; | ||
} | ||
|
||
.content hr { | ||
border: none; | ||
border-top: 2px solid #c9c9c9; | ||
margin: 2em 0; | ||
} | ||
|
||
.content img { | ||
display: block; | ||
margin: 0 auto; | ||
} | ||
|
||
.content img.border { | ||
border: 1px solid #c9c9c9; | ||
} | ||
|
||
.firmware { | ||
position: relative; | ||
margin: 20px 0; | ||
padding: 20px 20px; | ||
padding-left: 60px; | ||
color: var(--fg); | ||
background-color: var(--quote-bg); | ||
border-block-start: .1em solid var(--quote-border); | ||
border-block-end: .1em solid var(--quote-border); | ||
} | ||
|
||
.firmware::before { | ||
font-family: FontAwesome; | ||
font-size: 1.5em; | ||
content: "\f15b"; | ||
position: absolute; | ||
width: 20px; | ||
text-align: center; | ||
left: 20px; | ||
} | ||
|
||
.alert { | ||
margin-top: 20px; | ||
margin-bottom: 20px; | ||
position: relative; | ||
border-left: 2px solid #0a69da; | ||
padding: 20px; | ||
padding-left: 60px; | ||
} | ||
|
||
.alert::before { | ||
font-family: FontAwesome; | ||
font-size: 1.5em; | ||
color: #0a69da; | ||
content: "\f05a"; | ||
position: absolute; | ||
width: 20px; | ||
text-align: center; | ||
left: 20px; | ||
} | ||
|
||
.alert-tip { border-left-color: #1b7f37; } | ||
.alert-tip::before { color: #1b7f37; content: '\f0eb'; } | ||
|
||
.alert-caution { border-left-color: #cf212e; } | ||
.alert-caution::before { color: #cf212e; content: '\f071'; } | ||
|
||
.alert-important { border-left-color: #8250df; } | ||
.alert-important::before { color: #8250df; content: '\f06a'; } | ||
|
||
.alert-warning { border-left-color: #f0ad4e; } | ||
.alert-warning::before { color: #f0ad4e; content: '\f071'; } | ||
|
||
.alert-code { border-left-color: #333; } | ||
.alert-code::before { color: #333; content: '\f121'; } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
[book] | ||
authors = ["Oleg Kalachev"] | ||
language = "ru" | ||
multilingual = false | ||
src = "book" | ||
title = "Полетный контроллер с нуля" | ||
description = "Учебник по разработке полетного контроллера квадрокоптера" | ||
|
||
[build] | ||
build-dir = "build" | ||
|
||
[output.html] | ||
additional-css = ["book.css", "zoom.css"] | ||
additional-js = ["zoom.js", "js.js"] | ||
edit-url-template = "https://github.com/okalachev/flix/blob/master/docs/{path}?plain=1" | ||
mathjax-support = true | ||
|
||
[output.html.code.hidelines] | ||
cpp = "//~" | ||
|
||
[preprocessor.alerts] | ||
command = "python3 alerts.py" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
# Flix | ||
|
||
> [!IMPORTANT] | ||
> Flix — это проект по созданию открытого квадрокоптера на базе ESP32 с нуля и учебника по разработке полетных контроллеров. | ||
<img src="img/flix1.jpg" class="border" width=500 alt="Flix quadcopter"> | ||
|
||
<p class="github">GitHub: <a href="https://github.com/okalachev/flix">github.com/okalachev/flix</a>.</p> | ||
|
||
<p class="telegram">Telegram-канал: <a href="https://t.me/opensourcequadcopter">@opensourcequadcopter</a>.</p> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
<!-- markdownlint-disable MD041 --> | ||
<!-- markdownlint-disable MD042 --> | ||
|
||
[Главная](./README.md) | ||
|
||
* [Архитектура прошивки](firmware.md) | ||
|
||
# Учебник | ||
|
||
* [Основы]() | ||
* [Светодиод]() | ||
* [Моторы]() | ||
* [Радиоуправление]() | ||
* [Гироскоп](gyro.md) | ||
* [Акселерометр]()s | ||
* [Оценка состояния]() | ||
* [PID-регулятор]() | ||
* [Режим ACRO]() | ||
* [Режим STAB]() | ||
* [Wi-Fi]() | ||
* [MAVLink]() | ||
* [Симуляция]() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
# Архитектура прошивки | ||
|
||
<img src="img/dataflow.svg" width=800 alt="Firmware dataflow diagram"> | ||
|
||
Главный цикл работает на частоте 1000 Гц. Передача данных между подсистемами происходит через глобальные переменные: | ||
|
||
* `t` *(float)* — текущее время шага, *с*. | ||
* `dt` *(float)* — дельта времени между текущим и предыдущим шагами, *с*. | ||
* `gyro` *(Vector)* — данные с гироскопа, *рад/с*. | ||
* `acc` *(Vector)* — данные с акселерометра, *м/с<sup>2</sup>*. | ||
* `rates` *(Vector)* — отфильтрованные угловые скорости, *рад/с*. | ||
* `attitude` *(Quaternion)* — оценка ориентации (положения) дрона. | ||
* `controls` *(float[])* — пользовательские управляющие сигналы с пульта, нормализованные в диапазоне [-1, 1]. | ||
* `motors` *(float[])* — выходные сигналы на моторы, нормализованные в диапазоне [-1, 1] (возможно вращение в обратную сторону). | ||
|
||
## Исходные файлы | ||
|
||
Исходные файлы прошивки находятся в директории `flix`. Ключевые файлы: | ||
|
||
* [`flix.ino`](https://github.com/okalachev/flix/blob/canonical/flix/flix.ino) — основной входной файл, скетч Arduino. Включает определение глобальных переменных и главный цикл. | ||
* [`imu.ino`](https://github.com/okalachev/flix/blob/canonical/flix/imu.ino) — чтение данных с датчика IMU (гироскоп и акселерометр), калибровка IMU. | ||
* [`rc.ino`](https://github.com/okalachev/flix/blob/canonical/flix/rc.ino) — чтение данных с RC-приемника, калибровка RC. | ||
* [`mavlink.ino`](https://github.com/okalachev/flix/blob/canonical/flix/mavlink.ino) — взаимодействие с QGroundControl через MAVLink. | ||
* [`estimate.ino`](https://github.com/okalachev/flix/blob/canonical/flix/estimate.ino) — оценка ориентации дрона, комплементарный фильтр. | ||
* [`control.ino`](https://github.com/okalachev/flix/blob/canonical/flix/control.ino) — управление ориентацией и угловыми скоростями дрона, трехмерный двухуровневый каскадный PID-регулятор. | ||
* [`motors.ino`](https://github.com/okalachev/flix/blob/canonical/flix/motors.ino) — управление выходными сигналами на моторы через ШИМ. | ||
|
||
Вспомогательные файлы включают: | ||
|
||
* [`vector.h`](https://github.com/okalachev/flix/blob/canonical/flix/vector.h), [`quaternion.h`](https://github.com/okalachev/flix/blob/canonical/flix/quaternion.h) — реализация библиотек векторов и кватернионов проекта. | ||
* [`pid.h`](https://github.com/okalachev/flix/blob/canonical/flix/pid.h) — реализация общего ПИД-регулятора. | ||
* [`lpf.h`](https://github.com/okalachev/flix/blob/canonical/flix/lpf.h) — реализация общего фильтра нижних частот. |
Oops, something went wrong.