配置:(ROV水下机器人

python代码

UDP视频流

控制软件是QGroundCtrol

系统Ubuntu 18)

代码是从github上搬运的,放在CSDN也是方便大家检索,并且给出一些自己在使用代码遇到的问题。

原网址:https://gist.github.com/patrickelectric/443645bb0fd6e71b34c504d20d475d5a

搬运代码如下:

#!/usr/bin/env python
"""
BlueRov video capture class
"""import cv2
import gi
import numpy as npgi.require_version('Gst', '1.0')
from gi.repository import Gstclass Video():"""BlueRov video capture class constructorAttributes:port (int): Video UDP portvideo_codec (string): Source h264 parservideo_decode (string): Transform YUV (12bits) to BGR (24bits)video_pipe (object): GStreamer top-level pipelinevideo_sink (object): Gstreamer sink elementvideo_sink_conf (string): Sink configurationvideo_source (string): Udp source ip and port"""def __init__(self, port=5600):"""SummaryArgs:port (int, optional): UDP port"""Gst.init(None)self.port = portself._frame = None# [Software component diagram](https://www.ardusub.com/software/components.html)# UDP video stream (:5600)self.video_source = 'udpsrc port={}'.format(self.port)# [Rasp raw image](http://picamera.readthedocs.io/en/release-0.7/recipes2.html#raw-image-capture-yuv-format)# Cam -> CSI-2 -> H264 Raw (YUV 4-4-4 (12bits) I420)self.video_codec = '! application/x-rtp, payload=96 ! rtph264depay ! h264parse ! avdec_h264'# Python don't have nibble, convert YUV nibbles (4-4-4) to OpenCV standard BGR bytes (8-8-8)self.video_decode = \'! decodebin ! videoconvert ! video/x-raw,format=(string)BGR ! videoconvert'# Create a sink to get dataself.video_sink_conf = \'! appsink emit-signals=true sync=false max-buffers=2 drop=true'self.video_pipe = Noneself.video_sink = Noneself.run()def start_gst(self, config=None):""" Start gstreamer pipeline and sinkPipeline description list e.g:['videotestsrc ! decodebin', \'! videoconvert ! video/x-raw,format=(string)BGR ! videoconvert','! appsink']Args:config (list, optional): Gstreamer pileline description list"""if not config:config = \['videotestsrc ! decodebin','! videoconvert ! video/x-raw,format=(string)BGR ! videoconvert','! appsink']command = ' '.join(config)self.video_pipe = Gst.parse_launch(command)self.video_pipe.set_state(Gst.State.PLAYING)self.video_sink = self.video_pipe.get_by_name('appsink0')@staticmethoddef gst_to_opencv(sample):"""Transform byte array into np arrayArgs:sample (TYPE): DescriptionReturns:TYPE: Description"""buf = sample.get_buffer()caps = sample.get_caps()array = np.ndarray((caps.get_structure(0).get_value('height'),caps.get_structure(0).get_value('width'),3),buffer=buf.extract_dup(0, buf.get_size()), dtype=np.uint8)return arraydef frame(self):""" Get FrameReturns:iterable: bool and image frame, cap.read() output"""return self._framedef frame_available(self):"""Check if frame is availableReturns:bool: true if frame is available"""return type(self._frame) != type(None)def run(self):""" Get frame to update _frame"""self.start_gst([self.video_source,self.video_codec,self.video_decode,self.video_sink_conf])self.video_sink.connect('new-sample', self.callback)def callback(self, sink):sample = sink.emit('pull-sample')new_frame = self.gst_to_opencv(sample)self._frame = new_framereturn Gst.FlowReturn.OKif __name__ == '__main__':# Create the video object# Add port= if is necessary to use a different onevideo = Video()while True:# Wait for the next frameif not video.frame_available():continueframe = video.frame()cv2.imshow('frame', frame)if cv2.waitKey(30)&0xff==27:break

遇到的问题:

  1. 我用的是Anaconda的虚拟环境,所以用apt-install下载gi后仍然无法在虚拟环境中使用gi(即代码报错,“NO module named gi”),而虚拟环境中的python版本已经不支持gi。通过以下指令强行下载gi:

(解决方法搬运至下方链接23楼)

https://stackoverflow.com/questions/59838238/importerror-cannot-import-name-gi-from-partially-initialized-module-gi-mo

pip install --ignore-installed PyGObject
  1. 打开QGC软件后,代码无法正常运行获取视频流。

解决办法:在QGC的视频流设置中将Enable 关闭,即关闭QGC的视频获取。这样代码和软件就不会对视频流进行“占线”,实现操作机器人的同时可以对图像进行处理。

ROV水下机器人的视频流获取相关推荐

  1. 海狮号水下机器人_供应海狮(SeaLion)ROV水下机器人

    供应海狮(SeaLion)ROV水下机器人 海狮(SeaLion)ROV水下机器人 海狮ROV在性价比方面是具有革命性的产品,其性能完全可以与比其贵一倍的ROV相媲美. 基本配置/规 格 *海 狮RO ...

  2. 巡检水中机器人_无需潜水员也能巡检水坝裂纹,ROV水下机器人水利水务行业应用...

    P100是一款为专业用户和政企用户设计的轻工业级水下机器人.采用8推进全矢量布局,360度全方位移动.最大航速3节.深度100米.最大水平半径200米.支持机械臂. GOPRO.外置LED灯和置光卡尺 ...

  3. 水下机器人ROV和AUV

    水下机器人,也可以称为无人水下潜航器(Unmanned Underwater Vehicle,UUV),是在水下的极限环境中运行并能潜入水面替代人进行某种动作的可控机器结构.水下无人潜航器通常可分为三 ...

  4. 浅谈水下机器人ROV发展态势现状

    水下机器人也称无人遥控潜水器,是一种工作于水下的极限作业机器人.水下环境恶劣危险,人的潜水深度有限,所以水下机器人已成为开发海洋的重要工具. 无人遥控潜水器主要有:有缆遥控潜水器和无缆遥控潜水器两种, ...

  5. DIY ROV系列(六)水下机器人控制系统

    终于到了ROV的控制系统了.这部分是ROV能否平稳运行的核心.理解控制系统可以按照如下步骤. 1,水下机器人的动力系统是电机,那么只要能随心所欲的控制电机,那么你就掌握了控制系统. 2,先试着控制一个 ...

  6. 机器人水库涵洞检测_水下机器人(ROV)在水库大坝检测作业的安全分析

    水下机器人( ROV )在水库大坝检测作业的安全分析 吕 骥,张洪星,陈 浩 [摘 要] 摘要:文章针对现有的水库大坝水下检测作业中,缺少 ROV 相关的 作业安全分析( JSA )规范的事实,提出有 ...

  7. 海狮号水下机器人_海狮(SeaLion)小型水下遥控机器人(ROV)

    海狮(SeaLion)ROV是一款可往任意方向移动的水下摄像系统.它非常适合管道检查.水下(河流.湖泊.海洋等)探索.危险区域调查等应用领域.海狮ROV是海獭(SeaOtter)ROV的增强型版本.海 ...

  8. 水下机器人ROV亚克力密封舱漏水的可能性及解决方案

    舱体是水下机器人不可缺少的一部分,市场常用的有铝合金材质和亚克力材质,千米级水深用钛合金材质.其中钛合金价格十分昂贵,一般是科研人员使用:铝合金材质适合百米级耐压,采用活塞式密封且表面可做处理(例如阳 ...

  9. 水下机器人二维变速圆周运动的SBL定位EKF滤波仿真分析

    水下机器人在水下想要获得定位信息目前主要是基于声学方式的长基线(LBL).短基线(SBL).超短基线(USBL)获得局部定位数据,还有通过地磁场或者重力场匹配导航的方式,这类方式目前仅限于军事领域.当 ...

最新文章

  1. Spyder更改默认工作路径已经文件路径
  2. 前沿 | 阿里达摩院最牛科技~摄像头ISP处理器,提升夜间识别精准率
  3. 网易丁磊:给我100个亿,也不会躺平
  4. 按键精灵post教程_掌控POST(1)
  5. Linux网络socket网络抓包工具
  6. 【建模算法】基于粒子群算法求解TSP问题(Python实现)
  7. 1、节假日万年历API接口,免费好用
  8. s7 modbus测试软件,S7-1200 Modbus-Tcp通讯测试
  9. Android开发之小程序-秒表
  10. Zemax曲率半径的控制方法
  11. Airbnb是如何创造更好的邮件体验的
  12. 固态硬盘的计算机需要进行磁盘碎片整理吗,浅析为什么固态硬盘不需要磁盘碎片整理...
  13. 2022焊工(初级)考试题库及答案
  14. TeXstudio-粗体斜体无法显示
  15. 教您如何远离电脑病?
  16. 微信公众号怎样运营涨粉?
  17. 昆仑mcp文件是什么版本_高性价比重疾险昆仑健康保,12月31日截止投保,想要要趁早!...
  18. android atlas,Atlas接入及使用教程
  19. MySQL深度分页的问题及优化方案:千万级数据量如何快速分页
  20. 出现“/opt/ros/melodic/lib/gazebo_ros/gzserver -e ode /home/jize/turtlebot_ws/src/turtlebot_simulator/”

热门文章

  1. word文档通配符换行_职场小技巧|没想到word中的表格就可以排版图片大小
  2. 与胖相比,腰粗更要命,腰臀比每增加一个单位,死亡风险翻倍
  3. ConceptDraw WebWave 5.8 網站結構分析工具 - wowbox blog (網頁設計知識庫)
  4. MATLAB对图像做仿生变换和对两图像小波做变换融合
  5. Linux-时钟同步
  6. 这款课件制作工具可以轻松画出数轴
  7. eis电子防抖好还是光学防抖好_【玩码】OPPO Reno2 搭载超级视频防抖技术,视频拍摄稳得很...
  8. pyquery查询古诗词
  9. java终极面试题目总结
  10. golang 月工作日