cd /opt/ros/noetic/share/cv_bridge/cmake
sudo gedit cv_bridgeConfig.cmake
修改line 94-118,直接复制覆盖!
#if(NOT "include;/usr/include/opencv4 " STREQUAL " ")
# set(cv_bridge_INCLUDE_DIRS "")
# set(_include_dirs "include;/usr/include/opencv4")
set(libraries "cv_bridge;/usr/local/lib/libopencv_core.so.3.4.18;/usr/local/lib/libopencv_imgproc.so.3.4.18;/usr/local/lib/libopencv_imgcodecs.so.3.4.18")
if(NOT "https://github.com/ros-perception/vision_opencv/issues " STREQUAL " ")
set(_report "Check the issue tracker 'https://github.com/ros-perception/vision_opencv/issues' and consider creating a ticket if the problem has not been reported yet.")
elseif(NOT "http://www.ros.org/wiki/cv_bridge " STREQUAL " ")
set(_report "Check the website 'http://www.ros.org/wiki/cv_bridge' for information and consider reporting the problem.")
else()
set(_report "Report the problem to the maintainer 'Vincent Rabaud <vincent.rabaud@gmail.com>' and request to fix the problem.")
endif()
foreach(idir ${_include_dirs})
if(IS_ABSOLUTE ${idir} AND IS_DIRECTORY ${idir})
set(include ${idir})
elseif("${idir} " STREQUAL "include ")
get_filename_component(include "${cv_bridge_DIR}/../../../include" ABSOLUTE)
if(NOT IS_DIRECTORY ${include})
message(FATAL_ERROR "Project 'cv_bridge' specifies '${idir}' as an include dir, which is not found. It does not exist in '${include}'. ${_report}")
endif()
else()
message(FATAL_ERROR "Project 'cv_bridge' specifies '${idir}' as an include dir, which is not found. It does neither exist as an absolute directory nor in '\${prefix}/${idir}'. ${_report}")
endif()
_list_append_unique(cv_bridge_INCLUDE_DIRS ${include})
endforeach()
#endif()
5.2 安装Mavros
这个地方需要等待较长时间
sudo apt-get install ros-noetic-mavros
cd /opt/ros/noetic/lib/mavros
sudo ./install_geographiclib_datasets.sh
原本的
Fast-Drone-250项目是基于x86平台实现的。将其迁移到Jetson orin nx上面临着两个问题,一是arm架构与x86架构的代码兼容性问题,二是nx的cpu算力不足,需要部署vins-gpu。本文Jetson orin nx使用的是
jetpack 5.1.4,Ubuntu20.04,ROS noetic。项目完全从一个刚刷上的全新系统从0开始部署。详细的修改方法:【实机飞行!】在Jetson Orin NX上部署Fast-Drone-250进行实机飞行:https://blog.csdn.net/weixin_66375409/article/details/156237705?spm=1001.2014.3001.5501
1. 配置CUDA环境
2.1安装jtop
查看机载电脑的当前环境
1.2 安装与配置CUDA与CUDNN
1.2.1 安装CUDA与CUDNN
安装
cuda11.4与cudnn软连接
验证
1.2.2 配置CUDA
下载功能包并设置cuda
注释
cuda_gl_interop.h62~68行的下列部分,保留#include <GL/gl.h>2. 安装并配置OpenCV
2.1 卸载原有的opencv 4.2.0
【此方法可能会误删一些ROS rqt之类的文件,建议后面鱼香ROS重新补充安装一下】
2.2 安装opencv3.4.18和opencv_contrib3.4.18
OpenCV3.4.18的文件已经存放到项目目录下:OpenCV3.4.18项目地址:https://github.com/opencv/opencv/tree/3.4.18
OpenCV_contrib3.4.18项目地址:https://github.com/opencv/opencv_contrib/tree/3.4.18
在文件夹中编译安装
验证
opencv与cuda的安装2.3 安装eigen3
3. ROS与实验软件的安装
3.1 ROS的安装
详见:ros安装(一键最简安装,吹爆鱼香ROS,请叫我鱼吹)
3.2 补充nvidia源
添加源
3.3 实验软件的安装
3.4 VScode的安装
步骤参考:ROS学习笔记:VScode下ROS环境的配置
4. 安装ceres与glog
进入项目文件夹中,解压
3rd_party.zip压缩包4.1 安装glog
进入
glog文件夹打开终端,给予可执行权限执行脚本
4.2 ceres1.14编译安装
进入
ceres文件夹打开终端,创建一个build文件夹并进入编译安装
5. 配置VINS-GPU环境
5.1 修改cv_bridge
进入
opt/ros/melodic/share/cv_brige_cmake,更改cv_brigeConfige.cmake修改
line 94-118,直接复制覆盖!5.2 安装Mavros
这个地方需要等待较长时间
5.3 编辑px4.launch
找到波特率,将波特率从
"57600"改成"921600"6. 配置Realsense环境
6.1 安装realsenseSDK
先下载源码
进入安装包开始安装
将Realsense摄像头(D435i)插入USB3.0的接口,验证
6.2 安装realsenseROS
在终端输入
7. 编译与运行ego_planner
7.1 编译Fast-Drone-250项目
进入工作空间中,编译项目
7.2 运行ego_planner仿真
在Rviz内按下键盘G键,再单击鼠标左键以点选无人机目标点
7.3 实机飞行
7.3.1 检查飞控链接并赋予权限
查看端口
查看是否有
ttyACM0这个端口,并赋予权限7.3.2 检查IMU频率
打开一个终端,进入工作空间中
再打开一个终端,查看频率是否再200Hz左右
7.3.3 建图模块验证
打开一个终端,进入工作空间,运行脚本
再打开一个终端,运行ego
再打开一个终端,打开rviz可视化界面
7.3.4 检查realsense驱动正常
打开一个终端,运行realsense相机
再打开一个新的终端,查看图像
查看
/camera/infra1/image_rect_raw,/camera/infra2/image_rect_raw,/camera/depth/image_rect_raw话题正常7.3.5 VINS内参标定
打开一个终端,运行realsense相机
打开一个新的终端,打印信息
进入
Fast-Drone-250-NX\src\realflight_modules\vins_gpu\src\VINS-Fusion-gpu\config,把终端中的K矩阵中的fx,fy,cx,cy填入left.yaml和right.yaml例如我这里是D435i相机,则为7.3.6 VINS外参标定
在主目录中新建一个文件夹
vins_output。修改配置文件,打开
"Fast-Drone-250-NX\src\realflight_modules\vins_gpu\src\VINS-Fusion-gpu\config\fast_drone_250.yaml"。在
line 16将其中的output_path改成你自己的路径:打开一个终端,运行脚本
再打开一个新的终端
拿起飞机沿着场地尽量缓慢地行走,场地内光照变化不要太大,灯光不要太暗,不要使用会频闪的光源,尽量多放些杂物来增加VINS用于匹配的特征点。把
vins_output/extrinsic_parameter.txt里的内容替换到fast-drone-250.yaml的body_T_cam0和body_T_cam1重复上述操作直到走几圈后VINS的里程计数据偏差收敛到满意值(一般在0.3米内)
7.3.7 实机参数调整
调整
Fast-Drone-250-NX/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.launchrostopic echo /mavros/rc/in7.3.8 Vins悬停遥控飞行
进入到工作空间中启动Vins
打印vins数据,摇晃无人机查看Vins的位置情况
遥控器5通道拨到内侧,六通道拨到下侧,油门打到中位 打开一个新的终端
起飞!
7.3.9 ego_planner飞行实验
进入到工作空间中
启动Vins
打印vins数据,摇晃无人机查看Vins的位置情况
遥控器5通道拨到内侧,六通道拨到下侧,油门打到中位 打开一个新的终端
起飞!
打开一个新的终端,运行ego
再打开一个新的终端,运行脚本
再打开一个新的终端,运行可视化界面
按下G键加鼠标左键点选目标点使无人机飞行
参考文献
[1]【详细|ARM NX】优雅的配置ego-planner到arm架构的Jetson Orin-NX机载电脑上(opencv3.4.18-cuda11.4+VINS-Fusion-GPU)
[2] 从零制作自主空中机器人:https://github.com/ZJU-FAST-Lab/Fast-Drone-250
[3] Jetson Orin NX 开发指南(4): 安装 CUDA 和 Realsense
[4] ros安装(一键最简安装,吹爆鱼香ROS,请叫我鱼吹)
[5] Jetson nx 安装cuda JetPack
[6] ROS学习笔记:VScode下ROS环境的配置