以下著述着手于:CSDN开发者社区作家:干了这碗汤爱情电影网
原文连结:https://blog.csdn.net/weixin_43321489/article/details/134703965?spm=1001.2014.3001.5502
由于篇幅实质过长,本文将分为两期为天下张开先容,本期主要先容以下几个方面:
特殊视频1. APSync
说到机载计较机Companion computer就不得不提另一个关键词APSync;
APSync简化了机载计较机的斥地,以便它不错为ArduPilot提供迥殊的功能,并简化与互联网处事的集成;
提供日记下载和视频流转发到大地站的功能;
机载计较机通过串口与飞控纠合,将飞控的log转存到我方的文献系统中,并创建一个收集热门,用于给启动大地站的PC纠合,PC纠合该热门后不错:1)从机载计较机下载日记;2)查看视频流;3)纠合热门后大地站不错通过UDP纠合到飞控;
(Configuration pages)
:8000 (Which shows a video streaming on/off button)
PC纠合到收集热门后(收集热门称号为ardupilot,密码亦然ardupilot),大地站可通过UDP,port 14550来纠合到飞控;
对于下载log:不错用这个剧本来下载机载计较机的日记到PC:apsync-download-logs,好像从机载计较机上拔下SD卡来读取;(https://firmware.ardupilot.org/Companion/apsync/apsync-download-logs-latest.zip)
对于视频流:视频流被发送到央求遥测数据的第一个大地站的IP地址;大地站查看视频流:右击Hub ~> Video ~> Set GSreamer Source;
PC纠合热门后可通过SSH器具来辛勤登录到机载计较机;
飞控的数据怎样路由到各式门径的?How flight controller data is routed to various programs:https://ardupilot.org/dev/docs/apsync-intro.html#how-flight-controller-data-is-routed-to-various-programs
Installing APSync and setting the autopilot:https://ardupilot.org/dev/docs/apsync-intro.html#installing-apsync
2. 阿木实验室SpireCV-SDK参考文献:SpireCV-SDK
(https://docs.amovlab.com/Spire_CV_Amov/#/src/项目介绍/项目介绍?id=spirecv-sdk-wiki使用手册)
2.1 简介*
主邀功能包括吊舱/相机驱散、视频保存、推流、决议检测、识别与追踪等。旨在为智能无东说念主系统开发者提供高性能、高可靠、接口苟且、功能丰富的视觉处理功能。
3. SpireCV-SDK实践历程
编译源码:
cd ~/SpireCV/build sudo make install
查看行使门径称号:爱情电影网
ls ~/SpireCV/build
扩充行使门径:
./app-name3.1 新增一个demo,怎样修改CMakeLists.txt让编译器编译我方的demo
面貌:在VSCode中搜索现存的demo的cpp文献名,望望在那儿使用了这些文献名,你会发现仅在归并目次的CMakeLists.txt中使用了这些cpp文献名,因此只需要修改这些CMakeLists.txt即可。
如:在/home/hyl20/SpireCV/CMakeLists.txt 中添加以下
add_executable(CameraReading2 samples/demo/camera_reading2.cpp) target_link_libraries(CameraReading2 sv_world)
其中camera_reading2.cpp便是新添加的demo的称号。
3.2 转变视觉源输入类型
以视频文献行动输入源
在现时目次下新建一个mp4文献如000.mp4,以camera_reading2.cpp为例,作念以下代码修改:
cap.setVideoPath("/home/hyl20/SpireCV/samples/demo/000.mp4"); cap.open(sv::CameraType::VIDEO, 0); // CameraID 0
以RTSP视频流行动输入源
以camera_reading2.cpp为例,作念以下代码修改:
cap.setRtspUrl("rtsp://192.168.144.25:8554/main.264"); cap.setPort(8554); cap.open(sv::CameraType::RTSP, 0); // CameraID 0
报错后应该怎样处置?
修改代码:
SpireCV/video_io/sv_video_input.cpp中的else if (this->_type == CameraType::RTSP) {…}
//正本的代码 sprintf(pipe, "rtspsrc location=%s W=%d H=%d FPS=%d latency=100 ! \ application/x-rtp,media=video ! rtph264depay ! parsebin ! avdec_h264 ! \ videoconvert ! appsink sync=false", this->_rtsp_url.c_str(), this->_width, this->_height, this->_fps); this->_cap.open(pipe, cv::CAP_GSTREAMER); //修改后的代码: sprintf(pipe, "rtspsrc location=%s latency=100 ! \ application/x-rtp,media=video ! rtph264depay ! parsebin ! avdec_h264 ! \ videoconvert ! \ videorate ! video/x-raw,framerate=%d/1 ! \ videoscale ! video/x-raw,width=%d,height=%d ! \ appsink sync=false", this->_rtsp_url.c_str(), this->_fps, this->_width, this->_height ); this->_cap.open(pipe, cv::CAP_GSTREAMER); //好像改成: sprintf(pipe, "%s",this->_rtsp_url.c_str()); this->_cap.open(pipe, cv::CAP_ANY);
其中cv::CAP_ANY会自动检测数据着手类型,opencv会自行调用gstreamer中稳当的功能函数。
3.3 相机内参标定
1)遴荐读取视频文献的形势行动视觉输入源,修改calibrate_camera_charuco.cpp中的代码:
inputVideo.setWH(imW, imH); inputVideo.setFps(fps); inputVideo.open(c_type, camId); //修改为: inputVideo.setVideoPath("/home/hyl20/SpireCV/samples/demo/bd1.mp4"); inputVideo.setWH(imW, imH); inputVideo.setFps(fps); inputVideo.open(sv::CameraType::VIDEO, camId); // CameraID 0
2)打印一张标定图案(A4纸)
3)录制一段标定图案的视频保存为:/home/hyl20/SpireCV/samples/demo/bd1.mp4
拍摄缜密事项:不同角度、不同距离拍摄;
4)编译代码
cd ~/SpireCV/build sudo make install
5)扩充标定门径
./CameraCalibrarion -w=5 -h=7 -sl=0.035 -ml=0.021 -d=6 -ci=0 calib.yaml
6)缜密事项
w为标定板一转的格子数,h为标定板一列的格子数,sl为测量玄色实心方块的边长,ml为测量玄色二维码方块的边长,ci为Camera ID数;
标定时需要拍摄不同距离、不同像平面位置、不同歪斜角的多张图像(>5张);
标定完成后,标定文献保存在build目次下calib.yaml里;
3.4 二维码检测意志Aruco二维码
二维码示例文献下载
(https://download.amovlab.com/model/template/6X6_250.zip)
用途:一般用于增强践诺、相机姿势忖度和相机校准等行使场景,具体如无东说念主机的自主降落地标、机器东说念主定位等。
构成:玄色宽边框 + 二进制矩阵(长短方形阵列) 玄色边框:有助于其在图像中的快速检测;长短方形阵列:标志符 (ID) ,用于被识别以及造作检测和修订时刻;长短方形的大小决定了里面矩阵的大小。举例,6×6 的Aruco码大小由 36 位构成;6×6即长宽齐是4个方形;
实践:
1)遴荐读取视频文献的形势行动视觉输入源,修改aruco_detection.cpp中的代码:
cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0 改为: cap.setVideoPath("/home/hyl20/SpireCV/samples/demo/ac2.mp4"); cap.open(sv::CameraType::VIDEO, 0); // CameraID 0
2)修改内参文献的旅途,使用上一个实验生成的内参:
// 手动导入相机参数,如若使用Amov的G1等吊舱或相机,则不错忽略该设施,将自动下载相机参数文献 ad.loadCameraParams(sv::get_home() + "/SpireCV/build/calib1.yaml");
3)录制一段aruco二维码图案视频保存为:/home/hyl20/SpireCV/samples/demo/ac2.mp4
拍摄缜密事项:不同角度、不同距离拍摄。
4)编译
cd ~/SpireCV/build sudo make install
5)启动
./ArucoDetection
6)不雅察终局的打印信息
7)启动ros接口查看ros数据
4. 在wsl2-ubuntu20.04上装置SpireCV
参考:Ubuntu20.04+CUDA11.6装置教程( https://docs.amovlab.com/Spire_CV_Amov/#/src/快速使用/SDK安装/Ubuntu20.04+CUDA11.6安装教程/Ubuntu20.04+CUDA11.6安装教程)
问题:文档上提供的教程是基于ubuntu20.04 cuda11.6 ,可是本机电脑的cuda版块是12.2的,应该怎样装置环境和依赖呢?请看本文的第6末节。
实践依据:分析SpireCV官方教程中的 ubuntu2004-cuda-cudnn-11-6.sh 剧本。
5. Ubuntu20.04装置NVIDIA显卡驱动、cuda、cuDNN、tensorRT参考文献:
https://blog.csdn.net/JineD/article/details/131201121
https://blog.csdn.net/qq_43515934/article/details/123897435
本期的实质共享就先到这里,下一期咱们将为天下先容如安在wsl2-Ubuntu20.04上装置cuda、cuDNN、tensorRT,以及Gstreamer等软件。如若您在SpireCV开发历程中有其他方面的问题,迎接给咱们留言,共同洽商联系时刻~
以下为SpireCV技俩联系先容
技俩Github网址:
https://github.com/amov-lab/SpireCV
技俩Gitee网址:
https://gitee.com/amovlab/SpireCV
使用手册:
https://www.wolai.com/4qWFM6aZmtpQE6jj7hnNMW爱情电影网