GNURadio 3.9 使用 OOT 自定义模块问题记录

2023-05-16

最近由于 GR3.8 里的卷积编码模块有问题就换用了 GR3.9 ,发现 GR3.9 可以正常使用,关于  GR3.8 里的卷积编码模块为什么不能用就先不深究了,之前写过 GR3.8 编写 OOT 的流程, GR3.9 编写 OOT 跟 3.8 差别不大,但是有些修改需要注意下。

目录

1、依赖版本的问题

2、每次修改公共头文件后要重新 bind 绑定

3、编译啥的都通过了,用的时候有问题了


1、依赖版本的问题

(GNURadio3.9.3有这个问题,但3.9.4已经解决了这个问题,如果图省事可以直接换新版本哈~)

GR3.9 与 GR3.8 一个很重要的区别就是 python 与 C++ 接口的方式变了, GR3.8 使用的是 swig ,而 GR3.9 使用的是 pybind11,如果没了解过这两个的也问题不大,相关接口会由 gr_modtool 自动完成,我们也不用关心具体如何实现的。 但是根据官网的教程, GR3.9 需要 pybind11 的版本 >= 2.5.0

上面说的 ubuntu20.04 中的 pybind11 已经升级到了 2.5.0,但是我查了下的还是 2.4.3 版本的,至于为什么咱也不知道,所以索性直接源码安装个新的吧,也不是很麻烦~过程如下:

curl -Lo pybind11.tar.gz https://github.com/pybind/pybind11/archive/v2.5.0.tar.gz 
mkdir pybind11 && tar xzf pybind11.tar.gz -C pybind11 --strip-components=1 && cd pybind11
mkdir build && cd build 
cmake .. -DCMAKE_BUILD_TYPE=Release -DPYBIND11_TEST=OFF 
make
sudo make install 

注意第一行命令是从指定的网址上下载下来压缩包文件并重命名为 pybind11.tar.gz。不过有可能因为网络原因下载失败,这时可以进行手动下载下载地址就是命令行中的那个:

https://github.com/pybind/pybind11/archive/v2.5.0.tar.gz 

注意下载后要重命名为 pybind11.tar.gz 再执行后续的命令。

2、每次修改公共头文件后要重新 bind 绑定

不要问我什么是公共头文件,我也不清楚。。。按字面意思我的理解是可能就是你创建的 module 的 include/ 文件夹里的头文件就是公共头文件,因为这里的文件可以被你后面创建的所有 block 使用,我可真机智/狗头。就是说每次修改这里的头文件的内容都要执行以下命令进行重新绑定:

gr_modtool bind [blockname]

把 [blockname] 换成对应的 block 的名字就可以了。原因可以看官网解释。

这点比较坑,要是没有注意到会在 CMake 的时候遇到类似下面这个问题:

。。。。。。
CMake Error at /usr/local/lib/cmake/gnuradio/GrPybind.cmake:201 (message):
  Python bindings for my_header_payload_demux.h are out of sync
Call Stack (most recent call first):
  python/bindings/CMakeLists.txt:34 (GR_PYBIND_MAKE_OOT)
。。。。。。

你以为这就结束了?不,可能还有 bug 在等着你,我在执行 bind 时遇到了下面这个问题:

Error: Can't parse input signature.
Error: Can't parse output signature.
Writing binding code to ./python/bindings/my_header_payload_demux_python.cc
Writing binding code to ./python/bindings/docstrings/my_header_payload_demux_pydoc_template.h

就是这俩 error ,说没法解析我的输入输出?之前在我的这篇博客里也记录过类似的问题,但是当时的解决办法现在又用不了了,我也没管他,因为看后面的 log 信息还是成功了的,后面事实证明,这俩error 确实没没啥影响,让他俩搁那秀吧,咱就当没看到嘿嘿。

3、编译啥的都通过了,用的时候有问题了

我的问题报错是这样的:

AttributeError: 'myDemux.myDemux_python.my_header_payload_demux' object has no attribute 'to_basic_block'

就是形如:AttributeError: '×××' object has no attribute 'to_basic_block' 这样的错误,这个就又是 binding 文件出问题了(莫慌,bind也就这几个问题,目前还没发现其它问题),解决方法还是官网上的:

 就是需要把 python/bindings/[blockname]_python.cc 文件中的相应位置加上这么几个参数:

gr::sync_block,
gr::block,
gr::basic_block,

给你们看看我该完后的效果:

是不是发现我注释掉了一个 gr::sync_block 参数,没错,如果我不注释掉这个参数,在我重新编译代码时就会出现以下 bug :

/home/wsx/USRPworkarea/mymodule/gr-myDemux/python/bindings/my_header_payload_demux_python.cc:37:23: error: ‘sync_block’ is not a member of ‘gr’
   37 |                   gr::sync_block,
      |                       ^~~~~~~~~~
/home/wsx/USRPworkarea/mymodule/gr-myDemux/python/bindings/my_header_payload_demux_python.cc:37:23: error: ‘sync_block’ is not a member of ‘gr’

然后我就把它注释掉了,然后再重新编译安装就可以用了,具体原因先不深究了。 

参考:

GNU Radio 3.9 OOT Module Porting Guide - GNU Radio

Re: issues porting C++ OOT to 3.9 - fails at runtime import

https://github.com/gnuradio/gnuradio/issues/4773

(兄弟们如果遇到相关的问题欢迎交流哈~)

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

GNURadio 3.9 使用 OOT 自定义模块问题记录 的相关文章

随机推荐

  • windows中freeRTOS模拟器环境搭建

    windows中的freeRTOS使用 FreeRTOS参考手册中的模拟程序都是基于windows版本的模拟器 因此为了学习FreeRTOS xff0c 需要在Windows中搭建一下模拟器的运行环境 网络上的一般都是直接跑一下FreeRT
  • Xavier NX+4路Cameralink图像处理卡

    Xavier NX 43 4路Cameralink图像处理卡 M D CAP是天津雷航光电科技有限公司推出的一款复合加速计算平台 xff0c 由 NVidia GPU 和 Xilinx FPGA 通过PCIE 互联而成的高性能计算平台 其中
  • Xavier NX+KU040图像处理卡

    Xavier NX 43 KU040图像处理卡 CS NX21T是天津雷航光电科技有限公司推出的一款复合加速计算平台 xff0c 由 NVidia GPU 和 Xilinx FPGA 通过PCIE 互联而成的高性能计算平台 其中 FPGA
  • js使用input上传文件夹、拖拽上传文件夹并将文件夹结构展示为树形结构

    一 实现效果 左侧区域支持选择一个系统中的文件夹 xff0c 或者将文件夹拖拽到这个区域进行上传 xff0c 右侧区域可以将文件夹的结构展示为树形结构 二 代码实现 由于需要使用树形插件zTree xff0c 这个插件是依赖于jquery的
  • 傅里叶描述子、HOG特征描述子原理及matlab代码

    一 傅里叶描述子 傅里叶描述子的作用是用来描述图像的轮廓信息 xff0c 具有平移 旋转 尺度不变性特征 对于一幅图像 xff0c 通过傅里叶描述子获得其图像轮廓信息 xff0c 其本质就是空间 频域变换问题 通过将图像中的像素点进行傅里叶
  • raise ValueError(‘Expected input batch_size ({}) to match target batch_size ({}).‘

    raise ValueError Expected input batch size to match target batch size 记得在正向传播之前打印一下图片的尺寸 xff0c 这次没注意到图片其实都进来是 RGB 三通道的数据
  • RuntimeError mat1 dim 1 must match mat2 dim 0

    RuntimeError mat1 dim 1 must match mat2 dim 0 代码 self span class token punctuation span fc1 span class token operator 61
  • python 中 subprocess.Popen 总结

    python 中 subprocess Popen 总结 subprocess的目的就是启动一个新的进程并且与之通信 subprocess模块中只定义了一个类 Popen 可以使用Popen来创建进程 xff0c 并与进程进行复杂的交互 它
  • 关于 GNURadio-OFDM 运行时掉帧问题的解决

    最近在运行 GNURadio 中的 OFDM 例程时发现了丢帧的问题 2022 08 01更新 xff1a 1 突然又想起了这个问题 xff0c 今年年初的时候与西电的一个师兄又重新讨论了这个问题 xff0c 有了更深一步的理解 xff0c
  • 相机标定(Camera calibration)原理、步骤

    相机标定 xff08 Camera calibration xff09 原理 步骤 简介 在图像测量过程以及机器视觉应用中 xff0c 为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系 xff0c 必须建立相机成像的几何
  • python3-rosdep2 : Depends: python3-catkin-pkg but it is not going to be installed

    python3 rosdep2 Depends python3 catkin pkg but it is not going to be installed 今天在 Ubuntu18 04 中安装ros莫名其妙的出现了上述问题 xff0c
  • Ubuntu 18.04 安装 T265 相机驱动

    Ubuntu 18 04 安装 T265 相机驱动 Make Ubuntu Up to date span class token function sudo span span class token function apt get s
  • VINS中旋转外参初始化

    VINS 中的旋转外参初始化 为了使这个两个传感器融合 xff0c 我们首先需要做的事情是将两个传感器的数据对齐 xff0c 除了时间上的对齐 xff0c 还有空间上的对齐 空间上的对齐通俗的讲就是将一个传感器获取的数据统一到另一个传感器的
  • 旋转矩阵求导

    旋转矩阵的导数 证明 quad 假设旋转矩阵为 R mathbf R theta
  • VINS中陀螺仪零偏的估计

    VINS中关于陀螺仪零偏的初始化估计 对于窗口中得连续两帧 b k b k b k 和 b
  • 非线性优化问题基本形式概述

    非线性优化问题以及在视觉SLAM中的应用 1 0 最小二乘基础概念 定义 quad 找到一个 n 维的变量 x
  • Ceres 自动求导解析-从原理到实践

    Ceres 自动求导解析 从原理到实践 文章目录 Ceres 自动求导解析 从原理到实践1 0 前言2 0 Ceres求导简介3 0 Ceres 自动求导原理3 1 官方解释3 2 自我理解 4 0 实践4 1 Jet 的实现4 2 多项式
  • 深度学习环境搭建之cuda、cudnn以及pytorch和torchvision的whl文件安装方法

    一 前言 假设已经装好了pycharm anaconda xff0c 并且新建了一个conda虚拟环境 xff08 我的虚拟环境名为pytorch xff09 接下来需要安装新版的显卡驱动 xff0c 安装cuda cudnn pytorc
  • FreeRtos快速入门

    堆和栈 堆 堆即为一块空闲的内存 xff0c 从这块内存中来取出一部分用完之后再把它释放回去 span class token comment 此时heap buf就相当于一块空闲的内存 span span class token comm
  • GNURadio 3.9 使用 OOT 自定义模块问题记录

    最近由于 GR3 8 里的卷积编码模块有问题就换用了 GR3 9 xff0c 发现 GR3 9 可以正常使用 xff0c 关于 GR3 8 里的卷积编码模块为什么不能用就先不深究了 xff0c 之前写过 GR3 8 编写 OOT 的流程 x