-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
11 changed files
with
351 additions
and
152 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 |
---|---|---|
@@ -1,41 +1,87 @@ | ||
{ | ||
"workspaceFolder": "/workspace", | ||
"name": "Ubuntu", | ||
|
||
"settings": { | ||
"terminal.integrated.shell.linux": "/bin/bash", | ||
"editor.formatOnSave": true, | ||
"python.languageServer": "Pylance", | ||
"python.pythonPath": "/usr/bin/python3", | ||
"python.autoComplete.extraPaths": [ | ||
"/opt/ros/noetic/lib/python3/site-packages", | ||
"/opt/ros/noetic/local/lib/python3/dist-packages", | ||
], | ||
"python.analysis.extraPaths": [ | ||
"/opt/ros/noetic/lib/python3/site-packages", | ||
"/opt/ros/noetic/local/lib/python3/dist-packages", | ||
], | ||
}, | ||
"name": "aerial_drone_base Development Container", | ||
// "image": "ros:humble", // Используем Docker-образ с ROS 2 Humble | ||
|
||
"extensions": [ | ||
"christian-kohler.path-intellisense", | ||
"codezombiech.gitignore", | ||
"donjayamanne.python-environment-manager", | ||
"donjayamanne.python-extension-pack", | ||
"eamodio.gitlens", | ||
"esbenp.prettier-vscode", | ||
"KevinRose.vsc-python-indent", | ||
"konicy.conan-extension", | ||
"ms-python.python", | ||
"ms-python.vscode-pylance", | ||
"ms-vscode.cmake-tools", | ||
"ms-vscode.cpptools", | ||
"ms-vscode.cpptools-extension-pack", | ||
"ms-vscode.cpptools-themes", | ||
"redhat.vscode-xml", | ||
"redhat.vscode-yaml", | ||
"twxs.cmake", | ||
"VisualStudioExptTeam.intellicode-api-usage-examples", | ||
"VisualStudioExptTeam.vscodeintellicode", | ||
], | ||
} | ||
// Рабочая директория внутри контейнера | ||
"workspaceFolder": "/workspace", | ||
|
||
"settings": { | ||
"terminal.integrated.shell.linux": "/bin/bash", // Bash как основная оболочка | ||
"editor.formatOnSave": true, // Автоформатирование при сохранении | ||
"python.languageServer": "Pylance", // Использование Pylance для Python | ||
"python.pythonPath": "/usr/bin/python3", // Путь к Python 3 | ||
"python.autoComplete.extraPaths": [ | ||
"/opt/ros/humble/lib/python3/site-packages", // Путь для ROS 2 Humble | ||
"/opt/ros/humble/local/lib/python3/dist-packages", | ||
"/workspace/install/px4/local/lib/python3.10/dist-packages", | ||
"/workspace/install/px4_msgs/local/lib/python3.10/dist-packages", | ||
"/workspace/install/px4_ros_com/local/lib/python3.10/dist-packages" | ||
], | ||
"python.analysis.extraPaths": [ | ||
"/opt/ros/humble/lib/python3/site-packages", // Путь для ROS 2 Humble | ||
"/opt/ros/humble/local/lib/python3/dist-packages", | ||
"/workspace/install/px4/local/lib/python3.10/dist-packages", | ||
"/workspace/install/px4_msgs/local/lib/python3.10/dist-packages", | ||
"/workspace/install/px4_ros_com/local/lib/python3.10/dist-packages" | ||
], | ||
"files.associations": { | ||
"*.launch": "xml", // Ассоциация файлов .launch с XML | ||
"*.launch.py": "python" // Ассоциация файлов .launch.py с Python | ||
}, | ||
"cmake.configureOnOpen": true, // Автоматическая конфигурация CMake при открытии | ||
"ros.distro": "humble", // Установка ROS 2 дистрибутива | ||
|
||
"python.analysis.exclude": [ | ||
"**/__pycache__", | ||
"**/site-packages", | ||
"**/build", | ||
"**/install", | ||
"**/devel", | ||
"**/log", | ||
"**/.venv", | ||
"**/env" | ||
], | ||
// "files.exclude": { | ||
// "**/__pycache__": true, | ||
// "**/.git": true, | ||
// "**/.vscode": true, | ||
// "**/build": true, | ||
// "**/install": true, | ||
// "**/devel": true, | ||
// "**/log": true, | ||
// "**/env": true, | ||
// "**/.venv": true | ||
// }, | ||
// "python.analysis.autoSearchPaths": false, | ||
// "python.analysis.useLibraryCodeForTypes": false | ||
}, | ||
|
||
"extensions": [ | ||
"ms-python.python", // Расширение Python | ||
"ms-python.vscode-pylance", // Pylance для Python | ||
"ms-vscode.cpptools", // Поддержка C++ | ||
"ms-vscode.cmake-tools", // Инструменты CMake | ||
"twxs.cmake", // CMake язык | ||
"esbenp.prettier-vscode", // Prettier для форматирования кода | ||
"ms-iot.vscode-ros", // Поддержка ROS в VS Code | ||
"redhat.vscode-xml", // Поддержка XML (для .launch файлов) | ||
"redhat.vscode-yaml", // Поддержка YAML (для конфигурационных файлов) | ||
"donjayamanne.python-environment-manager", // Управление Python окружениями | ||
"KevinRose.vsc-python-indent", // Улучшенная поддержка отступов для Python | ||
"VisualStudioExptTeam.vscodeintellicode", // IntelliCode для улучшенной подсказки кода | ||
"VisualStudioExptTeam.intellicode-api-usage-examples", // Примеры использования API от IntelliCode | ||
"ms-vscode.cpptools-themes", // Темы для C++ | ||
"codezombiech.gitignore", // Поддержка .gitignore | ||
"christian-kohler.path-intellisense" // Подсказки для путей | ||
], | ||
|
||
// "postCreateCommand": "source /opt/ros/humble/setup.bash && colcon build", // Команда для настройки ROS 2 и сборки проекта | ||
|
||
"remoteEnv": { | ||
"ROS_DISTRO": "humble" // Переменная окружения для ROS 2 | ||
}, | ||
|
||
// "forwardPorts": [11311, 8080], // Проброс портов, например, для ROS master и web-интерфейсов | ||
|
||
// "shutdownAction": "stopContainer" // Остановка контейнера при закрытии VS Code | ||
} |
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
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
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
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
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,67 @@ | ||
### Общий ход выполнения | ||
|
||
1. **Инициализация узла ROS 2**: | ||
- Код начинается с инициализации ROS 2 и создания узла `OffboardControl` в функции `main()`. | ||
- После создания узла запускается цикл обработки событий ROS 2 с помощью `rclpy.spin(offboard_control)`, который позволяет узлу работать в фоновом режиме и обрабатывать входящие сообщения и таймеры. | ||
|
||
2. **Создание подписок и издателей**: | ||
- В конструкторе класса `OffboardControl` создаются подписки на различные топики (например, `/fmu/out/vehicle_status`, `/offboard_velocity_cmd`) и издатели для отправки сообщений на топики, связанные с управлением дроном. | ||
- Также создаются таймеры для периодической проверки и отправки команд на армирование (`arm_timer_callback`) и основного цикла управления (`cmdloop_callback`). | ||
|
||
### Основные методы и их вызов | ||
|
||
1. **Метод `arm_timer_callback`**: | ||
- Этот метод вызывается каждые 0.1 секунды (период `arm_timer_period`). Он выполняет функции управления состоянием дрона (Finite State Machine, FSM). | ||
- В зависимости от текущего состояния дрона (`self.current_state`), метод решает, что делать дальше: | ||
- В состоянии `IDLE`, если дрон прошел проверку перед полетом (`self.flightCheck == True`) и была получена команда на армирование (`self.arm_message == True`), дрон переходит в состояние `ARMING`. | ||
- В состоянии `ARMING`, если дрон успешно армирован, он переходит в состояние `TAKEOFF`. | ||
- В состоянии `TAKEOFF`, если дрон начал взлет (состояние NAV_STATE_AUTO_TAKEOFF), он переходит в состояние `LOITER`. | ||
- В состоянии `LOITER`, если дрон достиг состояния зависания (LOITER), он переходит в режим `OFFBOARD`. | ||
- В состоянии `OFFBOARD`, если дрон все еще армирован и нет аварийной ситуации (failsafe), продолжается отправка команд управления дроном. | ||
- Этот метод управляет основными переходами между состояниями и инициирует отправку команд армирования, взлета и перехода в режим `Offboard`. | ||
|
||
2. **Метод `cmdloop_callback`**: | ||
- Этот метод вызывается каждые 0.02 секунды (период `timer_period`). Он отвечает за отправку команд управления движением дрона, когда дрон находится в режиме `Offboard`. | ||
- Метод проверяет, находится ли дрон в режиме `Offboard` (`self.offboardMode == True`). Если да, он формирует сообщение `OffboardControlMode` и отправляет его. | ||
- Затем вычисляется и отправляется сообщение `TrajectorySetpoint`, которое содержит информацию о требуемой скорости дрона и угловом повороте (yaw). | ||
|
||
3. **Метод `offboard_velocity_callback`**: | ||
- Этот метод вызывается каждый раз, когда в топик `/offboard_velocity_cmd` поступает новое сообщение `Twist`. | ||
- Метод преобразует поступающие команды `Twist` в систему координат FLU (Forward-Left-Up) и сохраняет их в переменных `self.velocity` и `self.yaw`. | ||
- Эти значения затем используются в `cmdloop_callback` для управления движением дрона. | ||
|
||
4. **Метод `vehicle_status_callback`**: | ||
- Этот метод вызывается при получении сообщений из топика `/fmu/out/vehicle_status`. | ||
- Он обновляет информацию о текущем состоянии дрона, включая навигационный статус (`nav_state`), состояние армирования (`arm_state`), наличие аварийной ситуации (`failsafe`) и результат проверки перед полетом (`flightCheck`). | ||
- Эти значения влияют на переходы между состояниями в методе `arm_timer_callback`. | ||
|
||
5. **Метод `attitude_callback`**: | ||
- Этот метод вызывается при получении сообщений из топика `/fmu/out/vehicle_attitude`. | ||
- Он вычисляет текущий угол рыскания (yaw) дрона на основе полученного сообщения и сохраняет его в переменной `self.trueYaw`. | ||
- Значение `trueYaw` используется в `cmdloop_callback` для правильного преобразования команд скорости в мировую систему координат. | ||
|
||
6. **Метод `publish_vehicle_command`**: | ||
- Этот метод вызывается для отправки команд в топик `/fmu/in/vehicle_command`. Команды могут включать армирование/разармирование дрона, команды взлета и перехода в режим `Offboard`. | ||
- Метод формирует и публикует сообщение `VehicleCommand`, которое содержит необходимые параметры для выполнения команды. | ||
|
||
7. **Методы состояний (`state_init`, `state_arming`, `state_takeoff`, `state_loiter`, `state_offboard`)**: | ||
- Эти методы реализуют конкретные действия, выполняемые в каждом состоянии FSM: | ||
- `state_init`: Инициализация состояния, сброс счетчика. | ||
- `state_arming`: Отправка команды на армирование дрона. | ||
- `state_takeoff`: Отправка команды на взлет на заданную высоту. | ||
- `state_loiter`: Ожидание завершения взлета и перехода в режим зависания (LOITER). | ||
- `state_offboard`: Отправка команды на переход в режим `Offboard` и включение этого режима. | ||
|
||
### Ход выполнения в общем | ||
|
||
1. **Инициализация и запуск узла:** | ||
- Запускается ROS 2 узел, создаются подписки, издатели и таймеры. | ||
|
||
2. **Обработка сообщений:** | ||
- По мере поступления сообщений (статус дрона, команды с клавиатуры, данные о положении) вызываются соответствующие callback-функции, которые обновляют состояние контроллера и отправляют команды дрону. | ||
|
||
3. **Цикл состояния дрона:** | ||
- В цикле состояния (`arm_timer_callback`) происходит проверка текущего состояния дрона и, при необходимости, переходы в следующие состояния (армирование, взлет, зависание, управление). | ||
|
||
4. **Отправка команд управления:** | ||
- В цикле `cmdloop_callback` проверяется, находится ли дрон в режиме `Offboard`, и если да, отправляются команды на движение на основе входных данных. |
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
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
Oops, something went wrong.