项目来源:ZJU-FAST-Lab/Fast-Drone-250: hardware and software design of the 250mm autonomous drone (github.com)

从零制作自主空中机器人

本文档是视频教程从零制作自主空中机器人的配套文档,视频来自B站:【完结】从0制作自主空中机器人 | 开源 | 浙江大学Fast-Lab_哔哩哔哩_bilibili

我报的课程介绍:飞行+机器视觉+生活记录:加入了浙江大学Fast-Lab开设的免费课程《从0制作自主空中机器人》的学习 – TAHOLAB

安全事项

四旋翼无人机具有较高的安全风险,请同学们严格遵守安全规范,不要在有人的室内或室外进行试验,对自己和他人的安全负责,本实验室完全免责。

[TOC]

第一章:课程介绍

本次课程是一套面向对自主空中机器人感兴趣的学生、爱好者、相关从业人员的免费课程,包含了从硬件组装、机载电脑环境设置、代码部署、实机实验等全套详细流程,带你从0开始,组装属于自己的自主无人机,并让它可以在未知的环境中自由避障穿行。本次课程所涉及的所有代码、硬件设计全部开源,严禁商用与转载,版权与最终解释权由浙江大学FASTLAB实验室所有。 本次课程的重心主要落在自主空中机器人的搭建、代码部署及调试上,关于自主空中机器人的一些理论基础,例如动力学模型,路径搜索,轨迹规划,地图构建等内容,高飞老师在深蓝学院有非常详尽而深入浅出的课程,本次课程就不再赘述。

所需硬件:

设备
备注 类目 型号 数量
机架 QAV250 + 简易脚架 1
预算充足建议这个 电调 银燕45A 5
银燕30A 5
电机 Tmotor 2306 2400KV 5
预算充足建议这个 Tmotor F60 2550KV 5
课程内容仅介绍holybro pix4 mini的安装,其余飞控的安装大同小异,但最推荐的还是mini 飞控 Holybro pixhawk4 mini 1
Holybro pixhawk4 1
CUAV V5 NANO 1
比较厚且长,安装可能遇到问题 CUAV V5 1
比较厚且长,安装可能遇到问题 CUAV X7 1
DC供电线 XT60 2
根据飞控接口型号购买,例如pix4 mini是micro usb,CUAV的是typec 飞控连接线 双左弯0.15m 2
TYPEC连接线 15cm 2
机载电脑 Intel NUC 猛虎峡谷 准系统 i5 薄款 1
内存条和固态类似型号都能用 三星 DDR4内存条 8G 3200hz 1
影驰黑将 250G M.2固态硬盘 1
7通道以上的遥控器和对应的SBUS接收机都能用,但设置方法不额外介绍 接收机 乐迪 R12DSM 1
遥控器 乐迪 AT9S PRO 左手不回中 1
碳板是定制的,把附件里的stp文件发给卖家即可 碳纤维板 上板+下板 1
HDMI欺骗器 1
必须买这个型号,可以刚好塞进机架里 电池 格氏 2300mAh 4S 2
TYPEC连接线 30cm 2
类似5寸桨都行 桨叶 乾丰51477 2
5V稳压模块 5V工业级 2
双目深度相机 INTEL REALSENSE D435 1
根据个人情况选购 5寸桨保 2
耗材 硅胶线 20,18,14AWG 若干
BB响 1
硅胶杜邦线 10cm,15cm,公对母 若干
XT60母头 1
双通铝柱 M3*8/10/15/20的各买4根以上
3M双面胶 20mm*3m 1
螺丝 M3*6mm 扁头
工具
类目 型号 单价
烙铁 AT937标配 143
烙铁头 900M-1.6K 11
海绵 2
焊锡 0.5mm 500g 76.67
夹持台 褐色 75
扳手 11
螺丝刀 2.0mm、2.5mm 10.99
万用表 49
剪刀 3把中号 10.9
切割垫 A3 19.9

第二章:动力套焊接

机器人本体相关配件及焊接用工具详见purchase_list.xlsx,对硬件选型有相关疑问请看 番外一:硬件选型

第三章:飞控的安装与接线

  • 一定要注意电调信号线顺序!!! 电机方向
  • 飞控箭头与机头同向为正向,任意方向旋转90°的倍数也可以,后续可以在飞控设置内调整,推荐和视频内相同朝向摆放。
  • 强烈推荐使用硅胶杜邦线,常规杜邦线线材过硬,容易出现接触不良。
  • 5V稳压模块注意贴黑胶带绝缘,周围注意贴一圈厚的海绵胶带来防止飞机降落时损坏5V模块,也可以考虑把5V模块用扎带扎在机臂旁边
  • 使用V5 飞控或其他把模拟和数字输出分开的飞控(特点是输出口标号为A1A4 M1M4),如果要用Dshot协议,请插在A口上

第四章:飞控设置与试飞

  • 请烧录本git项目下的/firmware/px4_fmu-v5_default.px4固件,这个固件是官方1.11.0版本固件编译而来,如有需要可以自行编译。实测1.13版本固件存在BUG,不建议使用,更老的固件版本未经测试。

  • 在飞控的sd卡的根目录下创建/etc/extras.txt,写入

    以提高imu发布频率

  • 修改机架类型为 Generic 250 Racer,代指250mm轴距机型。如果是其他尺寸的机架,请根据实际轴距选择机架类型

  • 修改dshot_config为dshot600

  • 修改CBRK_SUPPLY_CHK为894281 执行这步跳过了电源检查,因此左侧栏的电池设置部分就算是红的也没关系

  • 修改CBRK_USB_CHK为197848

  • 修改CBRK_IO_SAFETY为22027

  • 修改SER_TEL1_BAUD为921600

  • 修改SYS_USE_IO为0(搜索不到则不用管)

  • 上电前请先用万用表通断档检测电源正负焊点是否短接,强烈建议第一次上电前先接一个短路保护器

  • 检测电机转向前确保没有安装螺旋桨!!!!

  • 修改电机转向:进入mavlink控制台

    修改1为需要反向的电机序号

  • 第一次试飞请务必找有自稳模式下飞行经验的飞手协助,只飞过大疆无人机的飞手99%无法飞好!

  • 身边没有有经验的飞手怎么办?详见Q&A

第五章:机载电脑与传感器的安装

  • 碳板已经预留了拆壳NUC的安装空位。如果想拆壳安装NUC,需要额外购买USB网卡,或者拆下自带的网卡天线找地方固定住,并且由于碳纤维板导电,请务必用尼龙柱把NUC支起来,相关资料请自行查阅。
  • 机载电脑使用4S航模电池直接供电,正常情况下没有问题。但理论上最好接一个稳压模块,否则在无人机炸机/电池几乎耗尽时会出现机载电脑关机的情况。但由于符合NUC功率的稳压模块比较大,请同学们酌情选用。

第六章:Ubuntu20.04的安装

  • 镜像站地址:http://mirrors.aliyun.com/ubuntu-releases/20.04/ 下载 ubuntu-20.04.4-desktop-amd64.iso
  • 烧录软件UltraISO官网:https://cn.ultraiso.net/
  • 分区设置:
    • EFI系统分区(主分区)512M
    • 交换空间(逻辑分区)16000M(内存大小的两倍)
    • 挂载点/(主分区)剩余所有容量
    • 笔记本上也需要安装ubuntu,推荐装20.04版本。虚拟机或双系统都可以,如果有长期学习打算推荐双系统

第七章:机载电脑的环境配置

  • ROS安装
    • sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
    • sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654'
    • sudo apt update
    • sudo apt install ros-noetic-desktop-full
    • echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
    • 建议没有ROS基础的同学先去B站学习古月老师的ROS入门教程
  • 测试ROS
    • 打开三个终端,分别输入
    • roscore
    • rosrun turtlesim turtlesim_node
    • rosrun turtlesim turtle_teleop_key
  • realsense驱动安装
    • sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
    • sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u
    • sudo apt-get install librealsense2-dkms
    • sudo apt-get install librealsense2-utils
    • sudo apt-get install librealsense2-dev
    • sudo apt-get install librealsense2-dbg
    • 测试:realsense-viewer
    • 注意测试时左上角显示的USB必须是3.x,如果是2.x,可能是USB线是2.0的,或者插在了2.0的USB口上(3.0的线和口都是蓝色的)
  • 安装mavros
    • sudo apt-get install ros-noetic-mavros
    • cd /opt/ros/noetic/lib/mavros
    • sudo ./install_geographiclib_datasets.sh
  • 安装ceres与glog与ddyanmic-reconfigure
    • 解压3rd_party.zip压缩包
    • 进入glog文件夹打开终端
    • ./autogen.sh && ./configure && make && sudo make install
    • sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev libgoogle-glog-dev libgtest-dev
    • 进入ceres文件夹打开终端
    • mkdir build
    • cd build
    • cmake ..
    • sudo make -j4
    • sudo make install
    • sudo apt-get install ros-noetic-ddynamic-reconfigure
  • 下载ego-planner源码并编译
    • git clone https://github.com/ZJU-FAST-Lab/Fast-Drone-250
    • cd Fast-Drone-250
    • catkin_make
    • source devel/setup.bash
    • roslaunch ego_planner single_run_in_sim.launch
    • 在Rviz内按下键盘G键,再单击鼠标左键以点选无人机目标点

第八章:常用实验与调试软件的安装与使用

  • VScode:sudo dpkg -i ***.deb
  • Terminator:sudo apt install terminator
  • Plotjuggler:
    • sudo apt install ros-noetic-plotjuggler
    • sudo apt install ros-noetic-plotjuggler-ros
    • rosrun plotjuggler plotjuggler
  • Net-tools:
    • sudo apt install net-tools
    • ifconfig
  • ssh:
    • sudo apt install openssh-server
    • 在笔记本上:ping 192.168.**.**
    • sudo gedit /etc/hosts
    • 加上一行:192.168.**.** fast-drone
    • ping fast-drone
    • ssh fast-drone@fast-drone(ssh 用户名@别名)

第九章:Ego-Planner代码框架与参数介绍

  • src/planner/plan_manage/launch/single_run_in_exp.launch下的:
    • map_size:当你的地图大小较大时需要修改,注意目标点不要超过map_size/2
    • fx/fy/cx/cy:修改为你的深度相机的实际内参(下一课有讲怎么看)
    • max_vel/max_acc:修改以调整最大速度、加速度。速度建议先用0.5试飞,最大不要超过2.5,加速度不要超过6
    • flight_type:1代表rviz选点模式,2代表waypoints跟踪模式
  • src/planner/plan_manage/launch/advanced_param_exp.xml下的:
    • resolution:代表栅格地图格点的分辨率,单位为米。越小则地图越精细,但越占内存。最小不要低于0.1
    • obstacles_inflation:代表障碍物膨胀大小,单位为米。建议至少设置为飞机半径(包括螺旋桨、桨保)的1.5倍以上,但不要超过resolution的4倍。如果飞机轴距较大,请相应改大resolution
  • src/realflight_modules/px4ctrl/config/ctrl_param_fpv.yaml下的:
    • mass:修改为无人机的实际重量
    • hover_percent:修改为无人机的悬停油门,可以通过px4log查看,具体可以参考文档 如果你的无人机是和课程的一模一样的话,这项保持为0.3即可。如果更改了动力配置,或重量发生变化,或轴距发生变化,都请调整此项,否则自动起飞时会发生无法起飞或者超调严重的情况。
    • gain/Kp,Kv:即PID中的PI项,一般不用太大改动。如果发生超调,请适当调小。如果无人机响应较慢,请适当调大。
    • rc_reverse:这项使用乐迪AT9S的不用管。如果在第十一课的自动起飞中,发现飞机的飞行方向与摇杆方向相反,说明需要修改此项,把相反的通道对应的值改为true。其中throttle如果反了,实际实验中会比较危险,建议在起飞前就确认好,步骤为:
      • roslaunch mavros px4.launch
      • rostopic echo /mavros/rc/in
      • 打开遥控器,把遥控器油门从最低满满打到最高
      • 看echo出来的消息里哪项在缓慢变化(这项就是油门通道值),并观察它是不是由小变大
      • 如果是由小变大,则不需要修改throttle的rc_reverse,反之改为true
      • 其他通道同理

第十章:VINS的参数设置与外参标定

  • 检查飞控mavros连接正常

    • ls /dev/tty*,确认飞控的串口连接正常。一般是/dev/ttyACM0
    • sudo chmod 777 /dev/ttyACM0,为串口附加权限
    • roslaunch mavros px4.launch
    • rostopic hz /mavros/imu/data_raw,确认飞控传输的imu频率在200hz左右
  • 检查realsense驱动正常

    • roslaunch realsense2_camera rs_camera.launch
    • 进入远程桌面,rqt_image_view
    • 查看/camera/infra1/image_rect_raw,/camera/infra2/image_rect_raw,/camera/depth/image_rect_raw话题正常
  • VINS参数设置

    • 进入realflight_modules/VINS_Fusion/config/

    • 驱动realsense后,rostopic echo /camera/infra1/camera_info,把其中的K矩阵中的fx,fy,cx,cy填入left.yamlright.yaml

    • 在home目录创建vins_output文件夹(如果你的用户名不是fast-drone,需要修改config内的vins_out_path为你实际创建的文件夹的绝对路径)

    • 修改fast-drone-250.yamlbody_T_cam0body_T_cam1data矩阵的第四列为你的无人机上的相机相对于飞控的实际外参,单位为米,顺序为x/y/z,第四项是1,不用改

  • VINS外参精确自标定

    • sh shfiles/rspx4.sh
    • rostopic echo /vins_fusion/imu_propagate
    • 拿起飞机沿着场地尽量缓慢地行走,场地内光照变化不要太大,灯光不要太暗,不要使用会频闪的光源,尽量多放些杂物来增加VINS用于匹配的特征点
    • vins_output/extrinsic_parameter.txt里的内容替换到fast-drone-250.yamlbody_T_cam0body_T_cam1
    • 重复上述操作直到走几圈后VINS的里程计数据偏差收敛到满意值(一般在0.3米内)
  • 建图模块验证

    • sh shfiles/rspx4.sh
    • roslaunch ego_planner single_run_in_exp.launch
    • 进入远程桌面 roslaunch ego_planner rviz.launch

第十一章:Ego-Planner的实验

  • 自动起飞:

    • sh shfiles/rspx4.sh
    • rostopic echo /vins_fusion/imu_propagate
    • 拿起飞机进行缓慢的小范围晃动,放回原地后确认没有太大误差
    • 遥控器5通道拨到内侧,六通道拨到下侧,油门打到中位
    • roslaunch px4ctrl run_ctrl.launch
    • sh shfiles/takeoff.sh,如果飞机螺旋桨开始旋转,但无法起飞,说明hover_percent参数过小;如果飞机有明显飞过1米高,再下降的样子,说明hover_percent参数过大
    • 遥控器此时可以以类似大疆飞机的操作逻辑对无人机进行位置控制
    • 降落时把油门打到最低,等无人机降到地上后,把5通道拨到中间,左手杆打到左下角上锁
  • Ego-Planner实验

    • 自动起飞
    • roslaunch ego_planner single_run_in_exp.launch
    • sh shfiles/record.sh
    • 进入远程桌面 roslaunch ego_planner rviz.launch
    • 按下G键加鼠标左键点选目标点使无人机飞行
  • 如果实验中遇到意外怎么办!!!

    • case 1: VINS定位没有飘,但是规划不及时/建图不准确导致无人机规划出一条可能撞进障碍物的轨迹。如果飞手在飞机飞行过程中发现无人机可能会撞到障碍物,在撞上前把6通道拨回上侧,此时无人机会退出轨迹跟随模式,进入VINS悬停模式,在此时把无人机安全着陆即可
    • case 2:VINS定位飘了,表现为飞机大幅度颤抖/明显没有沿着正常轨迹走/快速上升/快速下降等等,此时拨6通道已经无济于事,必须把5通道拨回中位,使无人机完全退出程序控制,回到遥控器的stablized模式来操控降落
    • case 3:无人机已经撞到障碍物,并且还没掉到地上。此时先拨6通道,看看飞机能不能稳住,稳不住就拨5通道手动降落
    • case 4:无人机撞到障碍物并且炸到地上了:拨5通道立刻上锁,减少财产损失
    • case 5绝招 反应不过来哪种case,或者飞机冲着非常危险的区域飞了,直接拨7通道紧急停桨。这样飞机会直接失去动力摔下来,对飞机机身破坏比较大,一般慢速情况下不建议。

Q&A 常见问题及解答

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注