6

飞行+创客:从零制作自主空中机器人完整资料 – TAHOLAB

 2 years ago
source link: https://www.taholab.com/25044
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

项目来源: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,写入

    mavlink stream -d /dev/ttyACM0 -s ATTITUDE_QUATERNION -r 200
    mavlink stream -d /dev/ttyACM0 -s HIGHRES_IMU -r 200

    以提高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控制台

    dshot reverse -m 1
    dshot save -m 1

    修改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 常见问题及解答

Q: 能不能用265 435来不跑vins?
A:可以,但265直出的里程计的速度估计有问题,可能导致控制不稳定。需要把265和imu做ekf融合。
Q: 硬件清单中的xxx能不能更换?
A: 请看视频番外一,讲解了大部分替换可能。
如果要换大轴距机架,请相应更换动力套及桨叶。pid参数也需要相应调整,相关内容自行查阅。
435相机可以换430相机。430更便宜但没有外壳,不好固定且容易炸坏。
电池不建议更换,因为课程的Q250机架刚刚好可以塞入2300mah 4S电池,不需要额外固定。更换电池需要自行解决电池放置问题。
Q: 能不能用D435i自带的imu运行vins?
A: 不行,因为435的imu噪声很大
Q: QGC内测试电机不转怎么办?
A: 1. 检查电调是否支持dshot,不支持请自行查阅pwm电调校准方法。
2.如果是使用V5 飞控或其他把模拟和数字输出分开的飞控(特点是输出口标号为A1~A4 M1~M4),如果要用Dshot协议,请插在A口上
3.使用holybro pixhawk4完全版飞控,飞控与分电板的插线请插在FMU PWM OUTPUT上,而非I/O PWM OUTPUT
Q: 运行vins后报红字错误?
A: 大概率是你改config后格式错误,照着报错去修改对应的config
Q: 运行vins后报"VINS_RESULT_PATH not opened"?
A: 在home目录创建`vins_output`文件夹(如果你的用户名不是fast-drone,需要修改config内的vins_out_path为你实际创建的文件夹的绝对路径)
Q: 这台飞机的载重有多少?续航有多少?能飞多远?
A: 不带额外负载起飞重量在1.1~1.2kg左右,最大起飞重量在1.8kg内,再大控制不稳且续航很短。
不带负载续航约5分钟。
能飞多远取决于你wifi的通讯质量,一般wifi顶多通讯100米。此外由于栅格地图直接开在内存内,如果地图范围设置过大,容易占满内存导致其他程序运行缓慢。一般不建议超过50米*50米。
Q: 为什么要挡住D435的结构光?
A: 结构光的意义在于使相机得到的深度图更准确,但双目图片上会显示出位置固定不变的点阵光斑,这对VIO的运行是不利的,所以需要关掉。
Q: VINS飘怎么办?
A: 1. 检查环境中是否有强反光物体(瓷砖、玻璃等)
   2. 尽量缓慢地移动无人机,场景内不要有运动物体
   3. 尽量准确地测量初始外参
   4. 不要在运行vins的时候在远程桌面上运行rviz(会占用大量CPU资源),实在想开建议去配一下ROS多机,然后在笔记本上开
   5. 检查环境中是否有频闪光源(肉眼无法看出,在realsense的单目画面中检查)
Q: 我没有自稳模式无人机的飞行经验,身边也没有有经验的飞手,怎么办呢?
A: 1. 有预算的情况下,建议购买一台耐摔的带保护圈的穿越机来练手,推荐的型号有mobula6,吉朗小金鱼85x,化骨龙racewhoop30等
2. 没啥预算的情况下,建议购买一个遥控器加密狗来把课程推荐的AT9S遥控器连接到电脑,然后在模拟器里练熟。模拟器

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK