基于VINS和EGO的室内自主路径规划无人机开发
基于VINS和EGO的室内自主路径规划无人机开发的技术分享。包括源代码参考、VINS-Fusion-GPU版本参考教程、VINS参数设置与外参标定、Ego-Planner实验等内容。
type
status
date
slug
summary
tags
category
icon
password
技术部分
源代码参考Fast-Lab:
VINS-Fusion-GPU 版本参考教程:
试飞部分
第十章: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.yaml
和right.yaml
- 在home目录创建
vins_output
文件夹(如果你的用户名不是fast-drone,需要修改config内的vins_out_path为你实际创建的文件夹的绝对路径) - 修改
fast-drone-250.yaml
的body_T_cam0
和body_T_cam1
的data
矩阵的第四列为你的无人机上的相机相对于飞控的实际外参,单位为米,顺序为x/y/z,第四项是1,不用改
- VINS外参精确自标定
sh shfiles/rspx4.sh
rostopic echo /vins_fusion/imu_propagate
- 拿起飞机沿着场地尽量缓慢地行走,场地内光照变化不要太大,灯光不要太暗,不要使用会频闪的光源,尽量多放些杂物来增加VINS用于匹配的特征点
- 把
vins_output/extrinsic_parameter.txt
里的内容替换到fast-drone-250.yaml
的body_T_cam0
和body_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通道紧急停桨。这样飞机会直接失去动力摔下来,对飞机机身破坏比较大,一般慢速情况下不建议。
代码学习
- Ceres学习
- Ceres LocalParameterization参数化
相关问题
Ceres-solver 安装报错:
sudo Ceres-solver最新版本为2.1.0,该版本已经取消
针对于ROS Noetic版本,libcxsparse版本为3而不是3.1.2
Anaconda与系统自带Python选择:
VINS-Fusion OpenCV4迁移:
VINS原代码从OpenCV3迁移到OpenCV4:
catkin_make默认编译线程为CPU的物理线程数,可能会导致CPU跑满而卡死,建议编译设置选项-j,后面跟的数为最大值的一半即可。
Loading...