# Music-Drone-225 **Repository Path**: dudongyue/music-drone-225 ## Basic Information - **Project Name**: Music-Drone-225 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-11-18 - **Last Updated**: 2024-11-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Music-Drone-225 参照[1]中Fast-Drone-250的基于ROS1的PX4控制框架,针对ROS2开发与PX4对接的控制框架,最大的好处是在上位机(机载电脑)可实现对电机油门的直接控制,降低仿真与实际的差距和针对新构型飞机的控制开发难度。 **此控制框架有三种模式:实际飞行、带控仿真、调参**。控制框架已在四旋翼上进行实飞验证,四旋翼由自己搭建(如下图),控制算法参考文献[2]。跟踪轨迹为8字轨迹(最高速度为2m/s),位置曲线如下图所示,跟踪结果良好,目前未出现电机控制延迟而导致的控制失效问题。 ![image-20241118145141215](./README.assets/image-20241118145141215.png) ![image-20241118145217585](./README.assets/image-20241118145217585.png) **注:** 1. 实际飞行需要增加PX4中EKF2的采样频率,目前可最大增加到400HZ,即上位机发布电机油门频率不会超过400HZ。 2. Linux系统:Ubuntu 20.04 ROS2版本:Foxy PX4版本:15.0以上 #### 前期准备 1. 安装ROS2 ```bash wget http://fishros.com/install -O fishros && . fishros ``` 2. 下载并配置15.0版本以上PX4代码 ```bash cd git clone https://github.com/PX4/PX4-Autopilot.git --recursive bash ./PX4-Autopilot/Tools/setup/ubuntu.sh cd PX4-Autopilot/ ``` 修改话题XRCE-DDS发布频率: 在PX4源码`/PX4-Autopilot/src/modules/uxrce_dds_client/dds_topics.h.em`文件中,修改 ```c++ #define UXRCE_DEFAULT_POLL_RATE 1 //数字代表所有话题最大发布周期ms,写1表示按最大频率发布,实际与EKF2的采样频率有关 ``` 编译烧录 ```bash make px4_fmu-v6c_default upload # Pixhawk 6C mini make matek_h743-slim upload # Matek H743-slim V3 ``` 3. 安装Micro XRCE-DDS 代理 ```bash git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git cd Micro-XRCE-DDS-Agent mkdir build cd build cmake .. make sudo make install sudo ldconfig /usr/local/lib/ ``` 3. QGC地面站中配置DDS + 这里有设置方式:https://blog.csdn.net/Zecet/article/details/130567392,波特率设置为最高3000000 + 插入飞控,设置串口权限`sudo chmod 777 /dev/ttyUSB0` + 在ubuntu中启动代理`MicroXRCEAgent serial -D /dev/ttyUSB0 -b 3000000`,看是否有话题成功发布标志 #### 实际飞行 1. 在QGC中设置遥控器如下 | 遥控器通道 | topic中的映射 | 功能 | 在QGC中的设置DOWN | 在QGC中的设置UP/MIDDLE | | ---------- | ------------- | --------------------------- | ----------------- | ---------------------- | | SA | AUX1 | 切换手动飞行模式(ON->OFF) | Stablize飞行模式 | 未知 | | SB | AUX2 | 切换悬停、CMD模式 | 未知 | 未知 | | SC | AUX3 | 解锁/上锁 | DISARM | ARM | | SD | AUX4 | 即停开关 | KILL | NO KILL | 2. 启动代理连接PX4 ```bash MicroXRCEAgent serial -D /dev/ttyUSB0 -b 3000000 ``` 3. 运行控制器 ```bash git clone https://gitee.com/music-lab/music-drone-225.git cd ./Music-Drone-225 colcon build source install/setup.bash ros2 launch px4ctrl run_ctrl.launch.py ``` #### 带控仿真 仿真中遥控器对飞行模式的切换逻辑和实际飞行一致,在rviz中可感受飞行手感来辅助调参。 1. 连接遥控器 准备RADIOMASTER遥控器,使用USB连接电脑,遥控器弹出模式选择界面选择第一个即可 编译接口源码 ```bash git clone https://gitee.com/music-lab/joystick_ros2_ws.git cd ./joystick_ros2_ws colcon build source install/setup.bash ros2 run joystick_ros2 joystick_ros2 ``` ​ 终端出现`Joystick Received!`则表明连接成功 2. 在文件`src/realflight_modules/px4ctrl/include/px4ctrl/input.h`中将`#define SIMULATION`解除注释 3. 运行控制器 ```bash cd ./Music-Drone-225 ros2 launch px4ctrl run_ctrl.launch.py ``` 4. 运行Rviz可视化 ```bash ros2 launch odom_visualization run_odom.launch.py ``` #### 调参 目前可以针对姿态环中串级PID参数进行调整 1. 在仿真模式下,修改文件`src/realflight_modules/px4ctrl/include/px4ctrl/controller.h`中: ```c++ #define DEBUG_ANGLE //取消注释则可指定期望角度,在controller.cpp文件中99行给定期望角度 #define DEBUG_RATE //取消注释则可指定期望角速度,在controller.cpp文件中115行给定期望角速度 ``` 2. 重新编译运行 #### 参考 [1]https://github.com/ZJU-FAST-Lab/Fast-Drone-250 [2] S. Sun, A. Romero, P. Foehn, E. Kaufmann and D. Scaramuzza, "A Comparative Study of Nonlinear MPC and Differential-Flatness-Based Control for Quadrotor Agile Flight," in IEEE Transactions on Robotics, vol. 38, no. 6, pp. 3357-3373, Dec. 2022, doi: 10.1109/TRO.2022.3177279.