linux设备上的Onvif 实现21:解决大华摄像头无法使用问题

2023-05-16

好长时间没有再写该系列文章了,最近刚好摸索着解决了大华摄像头无法使用问题,记录下来,应该对其他博友有所帮助。之前虽然写了一大堆文章说明了如何使用gsoap连接摄像头,但这是针对一台海康的摄像头开发的,一旦使用了同品牌不同型号摄像头或者其他牌子的摄像头就可能出现兼容性问题,导致无法使用。我就是碰到了这个问题,测试过的多个品牌型号摄像头,有的能直接使用,有的不能使用,问题各部相同。本文就是针对大华摄像头的问题解决过程说明。

摄像头型号:DH-IPC-HDW130S-0600B
MAC:90:02:A9:3D:1A:63
默认IP: 192.168.16.108, 修改使用IP:192.168.0.108
默认用户名密码;admin:admin

软件里面查看版本信息如下:
设备类型 IPC-HDW4105S
软件版本 2.400.0000.0.R, build : 2013-12-31
WEB版本  3.2.4.161826
ONVIF版本 2.3
序列号   TGC4AW158W00019

有意思的一点是摄像头标签上的型号是HDW130s,但是固件中的设备类型却是HDW4105S,不一致的哦。

-------------------------------------------------------------------

问题1:我的分机发出probe命令,但是没有收到大华IPC应答,无法发现 。

问题分析:OnvifTest软件可以正确发现大华IPC,抓包比对OnvifTest报文和我的报文,发现SOAP-ENV不同。百度后明白原因如下:

我使用的gsoap版本生成 RemoteDiscoveryBinding.nsmap,内容是有版本区别的。

    //SOAP 1.1版本

    {"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope", NULL},
    {"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding", NULL}, //1.1

    //SOAP 1.2版本
    {"SOAP-ENV", "http://www.w3.org/2003/05/soap-envelope", "http://schemas.xmlsoap.org/soap/envelope/", NULL},
    {"SOAP-ENC", "http://www.w3.org/2003/05/soap-encoding", "http://schemas.xmlsoap.org/soap/encoding/", NULL},  //1.2
1.1版本的可以发现海康IPC,1.2版本才能发现大华IPC。使用1.2版本内容,收到大华Probe应答,解析成功。

-------------------------------------------------------------------

问题2:我的分机发出GetCapabilities命令,无应答。

问题分析:

    还是对比OnvifTest软件和分机发出的GetCapabilities命令,发现主要是域名空间不同。

这是使用ONVIF TEST软件发送的GetCapabilities

POST /onvif/device_service HTTP/1.1
Host: 192.168.0.108
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 335
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope 
  xmlns:s="http://www.w3.org/2003/05/soap-envelope">
  <s:Body 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <GetCapabilities xmlns="http://www.onvif.org/ver10/device/wsdl">
    <Category>All</Category>
  </GetCapabilities>
  </s:Body>
</s:Envelope>

一共使用了4个命名,

 xmlns s="http://www.w3.org/2003/05/soap-envelope"

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 xmlns="http://www.onvif.org/ver10/device/wsdl">

而gsoap生成的RemoteDiscoveryBinding.nsmap,完整的命令空间如下,密密麻麻好多啊!

SOAP_NMAC struct Namespace namespaces[] ={ 
    {"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope", NULL}, 
    {"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding", NULL}, 
    {"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL},   
    {"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL}, 
    {"wsa", "http://schemas.xmlsoap.org/ws/2004/08/addressing", NULL, NULL},    
    {"wsdd", "http://schemas.xmlsoap.org/ws/2005/04/discovery", NULL, NULL},    
    {"chan", "http://schemas.microsoft.com/ws/2005/02/duplex", NULL, NULL}, 
    {"wsa5", "http://www.w3.org/2005/08/addressing", "http://schemas.xmlsoap.org/ws/2004/08/addressing", NULL}, 
    {"c14n", "http://www.w3.org/2001/10/xml-exc-c14n#", NULL, NULL},   
    {"wsu", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", NULL, NULL},  
    {"xenc", "http://www.w3.org/2001/04/xmlenc#", NULL, NULL},  
    {"wsc", "http://schemas.xmlsoap.org/ws/2005/02/sc", NULL, NULL},    
    {"ds", "http://www.w3.org/2000/09/xmldsig#", NULL, NULL},  
    {"wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd", NULL},  
    {"xmime", "http://www.w3.org/2005/05/xmlmime", NULL, NULL}, 
    {"ns5", "http://www.w3.org/2004/08/xop/include", NULL, NULL},   
    {"ns6", "http://docs.oasis-open.org/wsrf/bf-2", NULL, NULL},    
    {"ns3", "http://www.onvif.org/ver10/schema", NULL, NULL},   
    {"ns4", "http://docs.oasis-open.org/wsn/b-2", NULL, NULL},  
    {"ns7", "http://docs.oasis-open.org/wsn/t-1", NULL, NULL},  
    {"wsdd10", "http://tempuri.org/wsdd10.xsd", NULL, NULL},    
    {"ns1", "http://www.onvif.org/ver10/network/wsdl", NULL, NULL}, 
    {"ns2", "http://www.onvif.org/ver10/device/wsdl", NULL, NULL},  
    {"ns8", "http://www.onvif.org/ver10/media/wsdl", NULL, NULL},  
    {NULL, NULL, NULL, NULL}
};
尝试只保留上述4个命名空间,就收到了大华IPC应答。由此确定是分机中的命令空间太多了,大华摄像头不支持某些命名空间,直接无视了,却不会发出任何错误应答。有了这个教训,后面的过程都是小心翼翼的试验只添加命令报文中使用的命名空间,这样就不会出现无应答错误了。最终各种命令汇总后的必须命名空间如下:

  xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" ‘
  xmlns:SOAP-ENC="http://www.w3.org/2003/05/soap-encoding" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" 
  xmlns:wsdd="http://schemas.xmlsoap.org/ws/2005/04/discovery" 
  xmlns:ns1="http://www.onvif.org/ver10/network/wsdl" 
  xmlns:ns2="http://www.onvif.org/ver10/device/wsdl" 
  xmlns:ns3="http://www.onvif.org/ver10/schema" 
  xmlns:ns8="http://www.onvif.org/ver10/media/wsdl">

------------------------------------------------------------------

问题3:  我的分机设备发出Probe命令成功,发现了大华IPC,然后发送命令GetCapabilities,收到了大华IPC应答报文,但是分机却返回error=SOAP_TYPE,导致失败。使用OnvifTest软甲测试GetCapabilities,IPC发送了同样的报文,就可以正确解析。

问题分析过程:

    SOAP_TYPE: 标准解释是An XML Schema type mismatch, 到底是个什么意思我也说不出来,猜测是一些字段或域名空间关键字错误。

(1)首先怀疑报文解析过程中的每个字段项解析是否出现了错误,确定是哪个字段项错误。

  方法:编译分机程序时天机编译开关-DDEBUG,这样运行分机程序会自动生成调试文件:RECV.log、SENT.log、TEST.log。打开TEST.log文件,查找error没有发现。观察报文解析过程,发现出现在这一段:

   <tt:Extension>
          <tt:DeviceIO>
            <tt:XAddr>http://192.168.0.108/onvif/deviceIO_service</tt:XAddr>
            <tt:VideoSources>1</tt:VideoSources>
            <tt:VideoOutputs>0</tt:VideoOutputs>
            <tt:AudioSources>0</tt:AudioSources>
            <tt:AudioOutputs>0</tt:AudioOutputs>
            <tt:RelayOutputs>0</tt:RelayOutputs>
          </tt:DeviceIO>
          <tt:Extensions>
            <tt:TelexCapabilities>
              <tt:XAddr>http://192.168.0.108/onvif/telecom_service</tt:XAddr>
              <tt:TimeOSDSupport>true</tt:TimeOSDSupport>
              <tt:TitleOSDSupport>true</tt:TitleOSDSupport>
              <tt:PTZ3DZoomSupport>true</tt:PTZ3DZoomSupport>
              <tt:PTZAuxSwitchSupport>true</tt:PTZAuxSwitchSupport>
              <tt:MotionDetectorSupport>true</tt:MotionDetectorSupport>
              <tt:TamperDetectorSupport>true</tt:TamperDetectorSupport>
            </tt:TelexCapabilities>
          </tt:Extensions>
        </tt:Extension>

遇到Extension段中包含Extensions段,内部的Extensions段都未能识别出来,后面的log中都没有出现该段内容的解析过程。这种TelexCapabilities是海康IPC报文中没有的,在gsoap代码中也找不到该字段。由此确定是该段解析出错。

(2)确定代码中的错误位置

从GetCapabilities命令的调用关系一层层的跟踪下去,

soap_call___ns2__GetCapabilities()  soapClient.c
  soap_get__ns2__GetCapabilitiesResponse()  该函数执行后出现error=SOAP_TYPE
    soap_in__ns2__GetCapabilitiesResponse()
      soap_in_PointerTons3__Capabilities()
        soap_in_ns3__Capabilities()
          soap_in_PointerTons3__CapabilitiesExtension()
            soap_in_ns3__CapabilitiesExtension()
              soap_in_PointerTons3__CapabilitiesExtension2()
                soap_in_ns3__CapabilitiesExtension2()

最后的CapabilitiesExtension2()返回error=SOAP_TYPE,通过添加打印信息确定是if (soap_in_byte(soap, "-any", a->__any, "xsd:byte"))出现失败。 仔细观察soap_in_byte()函数,内部调用 stdsoap2.c soap_s2byte()函数,目的是把输入字符串转换成10进制的整数。

soap_s2byte(struct soap *soap, const char *s, char *p)
{ if (s)
  { long n;
    char *r;

    n = soap_strtol(s, &r, 10);   
    if (s == r || *r || n < -128 || n > 127)
    {         
        soap->error = SOAP_TYPE;
    }
    *p = (char)n;
  }
  return soap->error;
}

soap_s2byte这个函数调用soap_strtol进行转换,s是输入字符串,p指向转换后的单字节。但是对于s=“”空字符串无法转换成功,引起s==r成立,导致错误返回SOAP_TYPE。  看起来好像是gsoap的一个bug。修改方法是去除s==r的判断条件,避免报告错误。

if ( n < -128 || n > 127)
    {         
        soap->error = SOAP_TYPE;
    }

这样修改后就不会出现错误了,soap_call___ns2__GetCapabilities()  解析成功,TEST.log文件中也可以看到相关字段的解析了,下列内容是发现了字段,但是无法识别,予以忽略。

Tags and (default) namespaces match: 'tt:Extensions' 'ns3:Extensions'
Begin element found (level=6) 'tt:Extensions'='ns3:Extensions'
Reverting to last element 'tt:Extensions' (level=5)
Tags and (default) namespaces match: 'tt:Extensions' 'ns3:Extensions'
Begin element found (level=6) 'tt:Extensions'='ns3:Extensions'
Enter id='' type=781 loc=(nil) size=8 level=0
stdsoap2.c(7512): malloc(20) = 0x410d98
New block sequence (prev=(nil))
stdsoap2.c(2187): malloc(12) = 0x410dc8
Push block of 1 bytes (1 bytes total)
stdsoap2.c(2209): malloc(9) = 0x410df0
Enter id='' type=3 loc=0x410df8 size=1 level=0
Element content value=''
Push block of 1 bytes (2 bytes total)
stdsoap2.c(2209): malloc(9) = 0x410e18
Enter id='' type=3 loc=0x410e20 size=1 level=0
Element content value=''
Unexpected element 'tt:TelexCapabilities' in input (level=6, 1)
Tags 'tt:TelexCapabilities' and 'SOAP-ENV:' match but namespaces differ
IGNORING element 'tt:TelexCapabilities'
Unexpected element 'tt:XAddr' in input (level=7, 1)
Tags 'tt:XAddr' and 'SOAP-ENV:' match but namespaces differ
IGNORING element 'tt:XAddr'
End element found (level=8) 'tt:XAddr'=''
Unexpected element 'tt:TimeOSDSupport' in input (level=7, 1)
Tags 'tt:TimeOSDSupport' and 'SOAP-ENV:' match but namespaces differ
IGNORING element 'tt:TimeOSDSupport'
End element found (level=8) 'tt:TimeOSDSupport'=''
Unexpected element 'tt:TitleOSDSupport' in input (level=7, 1)
Tags 'tt:TitleOSDSupport' and 'SOAP-ENV:' match but namespaces differ
IGNORING element 'tt:TitleOSDSupport'
End element found (level=8) 'tt:TitleOSDSupport'=''
Unexpected element 'tt:PTZ3DZoomSupport' in input (level=7, 1)
Tags 'tt:PTZ3DZoomSupport' and 'SOAP-ENV:' match but namespaces differ
IGNORING element 'tt:PTZ3DZoomSupport'
End element found (level=8) 'tt:PTZ3DZoomSupport'=''
Unexpected element 'tt:PTZAuxSwitchSupport' in input (level=7, 1)
Tags 'tt:PTZAuxSwitchSupport' and 'SOAP-ENV:' match but namespaces differ
IGNORING element 'tt:PTZAuxSwitchSupport'
End element found (level=8) 'tt:PTZAuxSwitchSupport'=''
Unexpected element 'tt:MotionDetectorSupport' in input (level=7, 1)
Tags 'tt:MotionDetectorSupport' and 'SOAP-ENV:' match but namespaces differ
IGNORING element 'tt:MotionDetectorSupport'
End element found (level=8) 'tt:MotionDetectorSupport'=''
Unexpected element 'tt:TamperDetectorSupport' in input (level=7, 1)
Tags 'tt:TamperDetectorSupport' and 'SOAP-ENV:' match but namespaces differ
IGNORING element 'tt:TamperDetectorSupport'
End element found (level=8) 'tt:TamperDetectorSupport'=''
End element found (level=7) 'tt:TelexCapabilities'=''
Pop block
stdsoap2.c(2236): free(0x410e18)
stdsoap2.c(7512): malloc(12) = 0x410e18
Save all blocks in contiguous memory space of 1 bytes (0x410df0->0x410e18)

 

总结: 通过上述修改,解决了大华IPC无法使用问题,分机可以发现设备、查询设备能力、修改媒体配置、获取流媒体地址。最后,分机能通过rtsp连接摄像头,显示出了视频画面。

 

致谢:最近才在CSDN发现一篇博文,简直就是黑夜中指路明灯啊,一下子解决困扰我大半年的问题,太谢谢这位小兵_小白大神了!

原文:关于onvif对接海康设备出现soap->error=4的问题

http://blog.csdn.net/bing87496988/article/details/38707829

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux设备上的Onvif 实现21:解决大华摄像头无法使用问题 的相关文章

  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • Linux:在文件保存时触发 Shell 命令

    我想在修改文件时自动触发 shell 命令 我认为这可以通过注册 inotify 挂钩并调用来在代码中完成system 但是是否有更高级别的 bash 命令可以完成此任务 尝试 inotify 工具 我在复制链接时遇到问题 抱歉 但 Git
  • 如何在apache 2.4.6上安装apxs模块

    我刚刚用过apt get update我的 apache 已更新为2 4 6 我想安装 apxs 来编译模块 但收到此错误 The following packages have unmet dependencies apache2 pre
  • 有谁知道在哪里定义硬件、版本和序列号。 /proc/cpuinfo 的字段?

    我想确保我的 proc cpuinfo 是准确的 目前它输出 Hardware am335xevm Revision 0000 Serial 0000000000000000 我可以在代码中的哪里更改它以给出实际值 这取决于 Linux 的
  • 为arm构建WebRTC

    我想为我的带有arm926ej s处理器的小机器构建webrtc 安装 depot tools 后 我执行了以下步骤 gclient config http webrtc googlecode com svn trunk gclient s
  • SSE:跨页边界的未对齐加载和存储

    我在页面边界旁边执行未对齐加载或存储之前读过某处 例如使用 mm loadu si128 mm storeu si128内在函数 代码应首先检查整个向量 在本例中为 16 个字节 是否属于同一页 如果不属于同一页 则切换到非向量指令 我知道
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • 如何通过ssh检查ubuntu服务器上是否存在php和apache

    如何通过ssh检查Ubuntu服务器上apache是 否安装了php和mysql 另外如果安装的话在哪个目录 如果安装了其他软件包 例如 lighttpd 那么它在哪里 确定程序是否已安装的另一种方法是使用which命令 它将显示您正在搜索
  • 在脚本内使用不带密码的 sudo

    由于某种原因 我需要作为用户在没有 sudo 的情况下运行脚本 script sh 该脚本需要 root 权限才能工作 我认为将 sudo 放入 script sh 中是唯一的解决方案 让我们举个例子 script sh bin sh su
  • 是否可以创建一个脚本来保存和恢复权限?

    我正在使用 Linux 系统 需要对一组嵌套文件和目录进行一些权限实验 我想知道是否没有某种方法可以保存文件和目录的权限 而不保存文件本身 换句话说 我想保存权限 编辑一些文件 调整一些权限 然后将权限恢复到目录结构中 将更改的文件保留在适
  • 如何减去两个 gettimeofday 实例?

    我想减去两个 gettimeofday 实例 并以毫秒为单位给出答案 这个想法是 static struct timeval tv gettimeofday tv NULL static struct timeval tv2 gettime
  • Linux - 从第二个选项卡获取文本

    假设我们有这样的文件 一些文本11 一些文本12 一些文本13 一些文本21 一些文本22 一些文本23 文本由制表符分隔 我们知道第 1 列中的一些文本 但希望从第 2 列中获取文本 我知道我可以通过以下方式获取线路 grep somet
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 如果在等待“read -s”时中断,在子进程中运行 bash 会破坏 tty 的标准输出吗?

    正如 Bakuriu 在评论中指出的那样 这基本上与BASH 输入期间按 Ctrl C 会中断当前终端 https stackoverflow com questions 31808863 bash ctrlc during input b
  • 子目录中的头文件(例如 gtk/gtk.h 与 gtk-2.0/gtk/gtk.h)

    我正在尝试使用 GTK 构建一个 hello world 其中包括以下行 include
  • C++ Boost ASIO 简单的周期性定时器?

    我想要一个非常简单的周期性计时器每 50 毫秒调用我的代码 我可以创建一个始终休眠 50 毫秒的线程 但这很痛苦 我可以开始研究用于制作计时器的 Linux API 但它不可移植 I d like使用升压 我只是不确定这是否可能 boost
  • 在 Mac OSX 上交叉编译 x86_64-unknown-linux-gnu 失败

    我尝试将我的 Rust 项目之一编译到 x86 64 unknown linux gnu 目标 cargo build target x86 64 unknown linux gnu Compiling deployer v0 1 0 fi
  • 为什么C Clock()返回0

    我有这样的事情 clock t start end start clock something else end clock printf nClock cycles are d d n start end 我总是得到输出 时钟周期是 0
  • Capistrano 3 部署无法连接到 GitHub - 权限被拒绝(公钥)

    我使用 Capistrano v3 和 capistrano symfony gem 设置了以下部署脚本 我正在使用 Ubuntu 14 4 部署到 AWS EC2 实例 我正在连接从 AWS 下载的 pem 文件 我的deploy rb中
  • 在 unix 中编译 dhrystone 时出错

    我是使用基准测试和 makefile 的新手 我已经从下面的链接下载了 Dhrystone 基准测试 我正在尝试编译它 但我遇到了奇怪的错误 我尝试解决它 但没有成功 有人可以帮助我运行 dhrystone 基准测试吗 以下是我尝试编译的两

随机推荐

  • 北斗模块学习之初

    BD定义 xff1a 北斗卫星导航系统 xff08 BeiDou xff08 COMPASS xff09 NavigationSatellite System xff09 是中国正在实施的自主发展 独立运行的全球卫星导航系统 系统建设目标是
  • 关于Boost库和STL标准模板库

    一 关于STL 首先 xff0c 关于stl xff0c 最近也看了不少关于stl的博客 往大概的讲 xff0c stl即一种标准的模板库 xff0c 同时 xff0c 它也是静态库 xff0c 它存在的目的即是为了实现代码的服用性 xff
  • c语言char* 转char[]方法

    vector lt char gt splite by delim char host name char a 1000 strcpy a host name char p 61 strtok a split vector lt char
  • STL常用容器对比

    STL的常用容器大致有以下8个 xff1a 1 vector vector是一种动态数组 xff0c 在内存中具有连续的存储空间 xff0c 支持快速随机访问 由于具有连续的存储空间 xff0c 所以在插入和删除操作方面 xff0c 效率比
  • C 语言 stm32 无符号8位转换为int类型 uchar 转换为 int

    我做的是一个无线鼠标 xff0c stm32用nRF24L01无线传输模块发送数据时 xff0c 是传输无符号8位 uchar 三个数据是角度值 xff0c 有正负 直接使用无符号数据的话负数会出错 xff0c 在接收端要把数据恢复为整数
  • 常见IMU的性能比较

    型号gyr零偏稳定性gyr量程acc零偏稳定性acc量程HZ价格其他说明 EG320N xff08 epson xff09 http www canalgeomatics com wp content uploads 2020 06 oem
  • strcat函数用法的一点看法

    最近在刷题时碰到了strcat这个函数 xff0c 一开始没怎么理解它的用法 xff0c 出了错 xff0c 现在写点自己的理解吧 首先来看两个小程序 代码一 xff1a include lt iostream gt using names
  • CMake教程——QT项目使用CMake

    文章目录 1 Basic Cmake Based Project2 Executable VS Library3 Every module has its own CMakeList txt in its folder3 1 不推荐的做法
  • Proteus ISIS仿真软件中英文元件名称对照

    定时 计数器的使用方法 xff1a CLK xff1a 计数和测频状态时 xff0c 数字波的输入端 xff08 counter enable CE xff1a 计数使能端 xff1b 通过属性设置高还是低有效 无效暂停计数 RST 复位端
  • STL详解

    STL简介 编程的抽象发展 xff1a 面向过程 to 基于对象 to
  • 双目立体视觉 I:标定和校正

    点击上方 AI公园 xff0c 关注公众号 xff0c 选择加 星标 或 置顶 作者 xff1a Ali Yasin Eser 编译 xff1a ronghuaiyang 导读 双目立体校正和标定 大家好 xff01 今天我们将讨论什么是立
  • 4_竞赛无人机基本自动飞行支持函数与导航控制函数解析——零基础学习竞赛无人机搭积木式编程

    竞赛无人机基本自动飞行支持函数与导航控制函数解析 基本自动飞行支持函数 void basic auto flight support void 根据前面几讲的介绍 xff0c 要想实现无人机的自动飞行 xff0c 单依靠姿态自稳 高度控制远
  • Ubuntu20.04/Ubuntu22.04 配置VScode+Opencv+cmake(C++)

    下面介绍Ubuntu20 04下安装opencv xff0c 当然Ubuntu22 04也适用 xff0c 然后将opencv链接到VsCode 先主体按照 gt 点我 xff1a 链接1 lt 的第一点进行安装 xff0c 但是特别注意
  • makefile和cmake

    目录 作用优点cmake 作用 makefile关系到了整个工程的编译规则 一个工程中的源文件不计其数 xff0c 其按类型 功能 模块分别放在若干个目录中 xff0c makefile定义了一系列的规则来指定 xff0c 哪些文件需要先编
  • Linux查看线程的堆栈信息

    1 使用top命令 xff0c 查找pid 2 显示线程 xff0c 查找线程tid ps mp pid o THREAD tid time sort rn 3 将线程id转化为16进制0xtid printf 34 x n 34 tid
  • MPU6050 简介

    目录 关于MPU6050芯片 关于小板 关于厂家和DATASHEET 关于漂移 关于角加速度还是角速度 关于精度和量程 xff08 可调 xff0c 可选 xff09 关于功耗 xff0c 陀螺仪 43 加速器工作电流 xff1a 3 8m
  • 银河麒麟V10操作系统安装putty和cutecom和网络调试助手(mNetAssist)

    银河麒麟V10操作系统安装putty和cutecom和网络调试助手 xff08 mNetAssist xff09 安装Putty 需要连接网络 sudo apt get install putty 安装Cutecom 需要连接网络 sudo
  • STM32串口中断接收和中断发送

    STM32串口USART1中断接收和中断发送 先贴出中断函数 void USART1 IRQHandler void if USART GetITStatus USART1 USART IT RXNE 61 RESET USART Clea
  • ICP(Iterative Closest Point迭代最近点)算法学习笔记

    背景 xff1a 博主从百度百科开始学习icp算法 xff0c 主要是后期加得学习笔记 xff08 红色部分 xff09 ICP算法 xff1a 以点集对点集 xff08 PSTPS xff09 配准方法为基础 xff0c 他们阐述了一种曲
  • linux设备上的Onvif 实现21:解决大华摄像头无法使用问题

    好长时间没有再写该系列文章了 xff0c 最近刚好摸索着解决了大华摄像头无法使用问题 xff0c 记录下来 xff0c 应该对其他博友有所帮助 之前虽然写了一大堆文章说明了如何使用gsoap连接摄像头 xff0c 但这是针对一台海康的摄像头