# uav **Repository Path**: guanty18/uav ## Basic Information - **Project Name**: uav - **Description**: THU2021年工训大赛UAV小组 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2021-03-11 - **Last Updated**: 2025-12-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # uav ## 介绍 THU2021年工训大赛UAV小组 ## 技术基础要求 * 掌握solidworks等机械建模软件,能够建立简单的三维模型,能够完成装配体装配 * 了解四旋翼的飞行原理,熟练使用四旋翼的遥控器控制 * 了解电路基础知识,了解激光雕刻、3D打印等机械加工方法,掌握使用电烙铁接线等操作 * 了解各个硬件通信串口的基础知识,了解所用到的传感器的基本原理 * 掌握C++和Python的基本语法,能够读懂并简单修改开源项目的代码 * 掌握Linux系统的文件结构,熟练运用终端的常用命令行操作,能够使用vim等终端文本编辑器 * 掌握ROS的相关基础知识,熟悉一个rospackage下的所有文件夹和文件功能,能够在终端进行ROS命令操作 -- 进行本程序二次开发还需要 * 能够自行编写C++程序,能够修改简单的CMake文件,了解编译过程 * 了解mavros,jetson-GPIO,opencv等相关依赖库 * 了解视觉定位和激光建图的原理,能够处理相应的传感器数据,熟悉ROS相关开源库和tf模块 ## 硬件需求 * Pixhawk 4 * Jetson Nano * Rplidar A2 * realsense T265 * TFmini Plus * FS-i6X * USB camera * wireless network adapter ## 软件架构 ### ./include * uav.h 声明Uav类型 ### ./src * uav.cpp 定义Uav类型 * uav_controller.cpp 使用Uav类型进行无人机控制 ---------------------------------- * check.cpp 执行起飞前检查,包括飞控连接和各种传感器 * servo_ctrl_node.cpp 执行舵机控制,接受遥控器指令并发布消息 * sim.cpp 仿真环境下的任务程序,与主任务程序基本相同 * square.cpp 执行固定高度的矩形循环飞行,用于定点飞行的调试 * task.cpp 主任务程序,详见内部注释 ### ./scripts * gpio_ctrl.py 使用jetson的GPIO库,封装的各种子程序 * imagepro.py 读取图形并进行圆形识别,发布圆心坐标 * preflight.py 飞行前检查主程序 * servo_write.py 执行舵机控制,接受主任务程序指令 ### ./msg * position.msg 包含三个float变量,用于发布位置信息 * servo.msg 包含两个UInt8变量,用于发布舵机控制信息 * Cmd.msg 用于发布指定编号的无人机的命令信息 ### ./launch * slam.launch 用于激光雷达建图定位(待调试) * sim.launch 运行仿真环境内飞行任务 * muav.launch 用于遥控飞行,启动各传感器 * task.launch 单独运行主任务程序 * uav.launch 完成比赛全自主飞行任务 ### ./config * sim.yaml 用于仿真任务的参数配置 * task.yaml 用于主程序任务的参数配置 ### ./sh * px4_gazebo_sim.sh 运行仿真脚本 * start_flag.sh 开机标志,需配置入开机自启动项 * start_uav.sh 启动飞机主任务流程 * start_sim.sh 开启多无人机仿真,使用terminator ## px4飞控配置 ### 接线 1. 按照标记对应,连接飞控板和分电板的power1,power2,I/O PWM,FMU PWM四个接口 2. 将遥控器接收器连接到飞控板的PPM RC接口 3. 将WIFI数传模块、TFmini、与机载计算机的连线分别连接到TELEM1,TELEM2,TELEM4(UART)接口, 注意改线,其中TELEM接口顺序可以交换,只需要与飞控参数设置一致 4. 将光流连接到I2C接口 ### 飞控参数设置,需下载QGroundControl软件 1. 连接笔记本电脑的QGC软件,和px4飞控 * 可使用USB线有线连接 * 可使用WIFI数传,在笔记本上选择连接CUAVWLINK_XXXX网络连接,默认密码cuavwlink 2. 电机QGC软件左上角的软件图标,弹出窗口选择第一项Setup,逐项进行配置 * Firmware选项,进入页面后不动,拔掉飞控连接线后重插,自动进入固件烧写选项 * Airframe选项,选择所使用的机架类型,注意图形下方的复选框,并将电机标号和转向进行对应,选定后在最上方确认 * Sensors选项,逐个按要求校准磁罗盘、陀螺仪、加速度计、水平仪,校准后重启飞控 * Radio选项,连接遥控器并对码之后,点击校准按钮,按照右边的图片提示推动摇杆 -- 附遥控器对码 -- 1. 接收器断电,用一根杜邦线连接最右边一组竖置针脚的上下两根(对码线),然后通电,红灯快闪 -- 2. 按住遥控器的对码键(屏幕左下角的黑色按键),开启遥控器,自动对码,右上角出现RX信号栏 * Flightmode选项,默认配置channel5作为飞行模式切换键,将1,4,6号设置为Stablized,Altitude,Position 另外,将一键锁桨emergency kill配置到相应通道 * Power选项,设置电池节数为4,单节最大电压4.2V * Parameters选项,根据功能需求选择进行以下配置 -- 1. TFmini(用于进入Altitude飞行模式) -- EKF2_RNG_AID = Range aid enabled -- EKF2_HGT_MODE = Range Sensor -- SENS_TFMINI_CFG = TELEM2 -- 2. 与机载计算机连接 -- MAV_1_CONFIG= TELEM4 -- MAV_1_MODE = Onboard -- SER_TEL4_BAUD = 921600 8N1 -- 3. 使用Realsense自主飞行 -- EKF2_HGT_MODE = Vision 可选 -- EKF2_AID_MASK = vision position fusion, vision yaw fusion -- EKF2_EV_DELAY, EKF2_EV_POS_X, EKF2_EV_POS_Y, EKF2_EV_POS_Z 需调试 ## 环境配置 1. 安装ROS环境(Ubuntu18.04 + ros-melodic) [参考](http://wiki.ros.org/melodic/Installation/Ubuntu) 2. 安装mavros(二进制安装) * sudo apt-get install ros-melodic-mavros ros-melodic-mavros-extras 3. 配置px4与jetson nano连接 * 连接px4的UART(TELEM4)接口与jetson nano的UART接口(pin 6,8,10) * 使用QGroundControl配置飞控以下参数 MAV_1_CONFIG= TELEM4 MAV_1_MODE = Onboard SER_TEL4_BAUD = 921600 8N1 * sudo vim /opt/ros/melodic/share/mavros/launch/px4.launch 文件中修改以下语句,其中替换为同一局域网下地面站的IP arg name="fcu_url" default="/dev/ttyTHS1:921600" arg name="gcs_url" default="udp://:14550@192.168.xxx.xxx" * sudo vim /opt/ros/melodic/share/mavros/launch/px4_config.yaml 文件中修改以下语句 timesync_rate: 0.0 * sudo usermod -aG dialout #username# 4. 创建工作空间 * mkdir -p ~/catkin_ws/src * cd ~/catkin_ws/src * catkin_init_workspace * echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc 5. 连接Jetson nano和px4后增加串口权限 * sudo gedit /etc/udev/rules.d/99-pixhawk.rules 在文件的最后增加以下内容: SUBSYSTEM=="tty", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0042", SYMLINK+="ttyArduino" SUBSYSTEM=="tty", ATTRS{idVendor}=="26ac", ATTRS{idProduct}=="0011", SYMLINK+="ttyPixhawk" KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0666", GROUP:="dialout", SYMLINK+="rplidar" KERNEL=="ttyTHS1", SUBSYSTEM=="tty", GROUP="users", MODE="0666" * sudo lsof | grep ttyTHS1 * systemctl stop nvgetty * systemctl disable nvgetty * sudo usermod -a -G dialout username * sudo service udev reload * sudo service udev restart * sudo udevadm control --reload 6. 安装Realsense依赖库(可选)[参考](https://zhuanlan.zhihu.com/p/367357019) ## Jetson nano连接指南 1. jetson nano本身相当于一台电脑主机,直接连接屏幕等外设即可使用 2. 特殊情况需要连接时,可以使用个人电脑的USB接口与Jetson nano的Micro USB接口相连,然后使用ssh方法登录 有线连接时默认IP为192.168.55.1 3. 当无法有线连接时,可以将jetson nano与个人电脑接在同一局域网内,比如同一路由器,或开启电脑或者手机热点 然后使用1或2中的方法查看jetson nano的IP地址,即可使用ssh方法远程登录终端操作 4. 当需要无线连接且需要图形界面时,需要借助第三方工具比如no-machine等软件,预先安装在jetson nano上并开机自启 使用时在个人电脑上启动no-machine,并输入IP地址(同3)创建连接,即可进入图形界面 注1:ssh登录方法:在个人电脑的终端上输入 ssh username@192.168.55.1 其中username替换为jetson nano的用户名 注2:[no-machine下载及安装方法](https://blog.csdn.net/qq_44360908/article/details/116981831)一定要是arm64版本!!! ## 安装教程 * cd ~/uav_ws/src * git clone https://gitee.com/guanty18/uav * git clone https://gitee.com/guanty18/VIO * git clone https://gitee.com/guanty18/vision_to_mavros * git clone https://gitee.com/guanty18/rplidar_ros * git clone https://gitee.com/guanty18/slam_gmapping * cd .. * catkin_make * source devel/setup.bash * chmod +x src/uav/scripts ## 使用说明 遥控飞行(只启动传感器) * roslaunch uav muav.launch 自主飞行(完成默认任务) * roslaunch uav uav.launch ## 参考 * [摄像头定位教程](http://docs.px4.io/master/en/peripherals/camera_t265_vio.html) * [仿真教程](http://docs.px4.io/master/en/simulation/gazebo.html) * [飞行模式教程](http://docs.px4.io/master/en/flight_modes/offboard.html) * [阿木实验室](https://github.com/amov-lab/Prometheus)