如何学习、上手点云算法(三):用VsCode、Visual Studio来debug基于PCL、Open3D的代码

写在前面

  • 本文内容
    以PCL 1.14.0,Open3D0.14.1为例,对基于PCL、Open3D开发的代码进行源码debug;
    如何学习、上手点云算法系列:
    如何学习、上手点云算法(一):点云基础
    如何学习、上手点云算法(二):点云处理相关开源算法库、软件、工具
    如何学习、上手点云算法(三):用VsCode、Visual Studio来debug基于PCL、Open3D的代码
    更多点云基础、算法相关内容请关注专栏:
    点云处理基础
    点云配准(PointCloud Registration)
    Open3D点云处理
    PCL点云处理
    点云算法

  • 平台/环境
    Windows10, CMake, Open3D, PCL

  • 转载请注明出处:
    https://blog.csdn.net/qq_41102371/article/details/136504094

目录

  • 写在前面
  • PCL
    • 准备
    • 编译debug版本
    • 配置launch.json
    • Visual Studio
  • Open3D
    • 准备
    • 添加open3d测试
    • 调试
  • 参考

PCL

准备

安装PCL1.14.0: PCL1.14.0安装、使用教程
VsCode配置PCL: VsCode配置PCL、Open3D自动补全
在此基础上,下载debug需要的pdb文件:https://github.com/PointCloudLibrary/pcl/releases
在这里插入图片描述

打开压缩包
在这里插入图片描述
将pdb文件复制到之前装PCL的bin路径下,我这里是
D:\carlos\install\PCL 1.14.0\bin
在这里插入图片描述

注:PDB文件的作用见vs2019配置opencv+contrib-440 + PCL1.10.0 + 源码单步调试

编译debug版本

在VsCode配置PCL、Open3D自动补全和的基础上,新建一个compile_debug.bat:

cmake -DCMAKE_BUILD_TYPE=Debug ^
-DPCL_DIR="D:/carlos/install/PCL 1.14.0/cmake" ^
-S ./ -B ./build_debugcmake --build ./build_debug --config Debug --target ALL_BUILD

在这里插入图片描述
然后使用compile_debug.bat进行编译,完了会自动生成build_debug
在这里插入图片描述

配置launch.json

创建launch
在这里插入图片描述
添加配置
在这里插入图片描述
修改配置
"program"就是我们debug的程序对象,"environment"就是为当前程序添加PCL的环境变量,让其能找到PCL、VTK、FLANN等的动态库(.dll)
示例:

{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "(Windows) Launch","type": "cppvsdbg","request": "launch","program": "${workspaceFolder}/build_debug/Debug/statistical_removal.exe","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [{"name": "PATH","value": "D:/carlos/install/PCL 1.14.0/bin;D:/carlos/install/PCL 1.14.0/3rdParty/FLANN/bin;D:/carlos/install/PCL 1.14.0/3rdParty/VTK/bin;D:/carlos/install/PCL 1.14.0/3rdParty/Qhull/bin;D:/carlos/install/PCL 1.14.0/3rdParty/OpenNI2/Tools;$(PATH)"}],"console": "externalTerminal"}]
}

在这里插入图片描述
在statistical_removal.cpp中随便加一个断点,然后使用F5或者右上角的Debug C/C++ File, 开始debug
在这里插入图片描述
然后就可以看到程序运行到了断点处,左侧有变量状态,自己添加监控,线程的显示
在这里插入图片描述

Visual Studio

打开文件夹,找到.sln文件双击打开
在这里插入图片描述
鼠标右键,将statistical_removal设置为启动项目
在这里插入图片描述
再点开最下面的属性,Debug–调试–环境–编辑,输入

PATH=;D:\carlos\install\PCL 1.14.0\bin;
D:\carlos\install\PCL 1.14.0\3rdParty\FLANN\bin;
D:\carlos\install\PCL 1.14.0\3rdParty\VTK\bin;
D:\carlos\install\PCL 1.14.0\3rdParty\Qhull\bin;
D:\carlos\install\PCL 1.14.0\3rdParty\OpenNI2\Tools;
$(PATH)

在这里插入图片描述
确定
在这里插入图片描述
在这里插入图片描述

Open3D

准备

Open3D没有像PCL提供Debug版的lib和对应的pdb文件,需要自己编译,在Open3D0.14.1编译、安装、demo使用教程中我们已经编译好了debug版本,现在需要去build_debug/lib/Debug中找到pdb文件在这里插入图片描述
然后将pdb文件复制到install的目录中
在这里插入图片描述

添加open3d测试

在上面PCL示例project中,我们添加一个open3d的测试,在编译脚本中添加open3d的debug版的路径
在这里插入图片描述
compile_debug.bat:

cmake -DCMAKE_BUILD_TYPE=Debug ^
-DPCL_DIR="D:/carlos/install/PCL 1.14.0/cmake" ^
-DOpen3D_DIR="D:/carlos/install/open3d141_d/CMake" ^
-S ./ -B ./build_debugcmake --build ./build_debug --config Debug --target ALL_BUILD

添加一个测试代码test_open3d.cpp,该代码作用是平面拟合,并把拟合出的平面与剩下点云用不同颜色显示

#include <open3d/Open3D.h>int main()
{std::shared_ptr<open3d::geometry::PointCloud> pcd(new open3d::geometry::PointCloud);open3d::io::ReadPointCloud("./table_scene_lms400.pcd", *pcd);pcd->SegmentPlane();pcd->PaintUniformColor({1, 0, 0});open3d::visualization::DrawGeometries({pcd});return 0;
}

修改CMakeLists.txt

cmake_minimum_required(VERSION 3.18)project(statistical_removal)# PCL
find_package(PCL 1.2 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
# PCL test
add_executable(statistical_removal statistical_removal.cpp)
target_link_libraries(statistical_removal ${PCL_LIBRARIES})# Open3D
option(STATIC_WINDOWS_RUNTIME "Use static (MT/MTd) Windows runtime" ON)
if(STATIC_WINDOWS_RUNTIME)set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
else()set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
endif()
find_package(Open3D REQUIRED)
include_directories(${Open3D_INCLUDE_DIRS})# Open3D test
add_executable(test_open3d test_open3d.cpp)
target_link_libraries(test_open3d ${Open3D_LIBRARIES})

然后使用compile_debug.bat进行编译

调试

修改launch.json

{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "(Windows) Launch","type": "cppvsdbg","request": "launch",// "program": "${workspaceFolder}/build_debug/Debug/statistical_removal.exe","program": "${workspaceFolder}/build_debug/Debug/test_open3d.exe","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [{"name": "PATH","value": "D:/carlos/install/PCL 1.14.0/bin;D:/carlos/install/PCL 1.14.0/3rdParty/FLANN/bin;D:/carlos/install/PCL 1.14.0/3rdParty/VTK/bin;D:/carlos/install/PCL 1.14.0/3rdParty/Qhull/bin;D:/carlos/install/PCL 1.14.0/3rdParty/OpenNI2/Tools;$(PATH)"}],"console": "externalTerminal"}]
}

在源码添加断点,开始调试
在这里插入图片描述
平面分割结果可视化
在这里插入图片描述

用Visual Studio debug参照上面PCL示例,打开.sln,设置启动项
在这里插入图片描述
但是Open3D是静态库,所以不用设置环境变量就可以了,另外用Visual Studio调试前把代码中点云读取路径改成绝对路径再重新编译一下,不然会找不到点云
在这里插入图片描述

参考

https://code.visualstudio.com/docs/cpp/launch-json-reference
其余文中已列出

主要做激光/影像三维重建,配准、分割等常用点云算法,熟悉open3d、pcl等开源点云库,技术交流、咨询可私信

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/271311.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java项目:41 springboot大学生入学审核系统的设计与实现010

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本大学生入学审核系统管理员和学生。 管理员功能有个人中心&#xff0c;学生管理&#xff0c;学籍信息管理&#xff0c;入学办理管理等。 学…

WordPress建站入门教程:如何上传安装WordPress主题?

我们成功搭建WordPress网站后&#xff0c;默认使用的是自带的最新主题&#xff0c;但是这个是国外主题&#xff0c;可能会引用一些国外的资源文件&#xff0c;所以为了让我们的WordPress网站访问速度更快&#xff0c;强烈建议大家使用国产优秀的WordPress主题。 今天boke112百…

【C++】学习记录

一、第一个C程序 #include<iostream> using namespace std;int main() {cout << "Hello World!";return 0; } 二、数据类型、变量与常量、运算符 2.1 数据类型 2.2 变量与常量 2.3 运算符 三 、判断语句&#xff08;if-else、switch-case&#xff09; …

蓝桥杯物联网竞赛_STM32L071_11_知识体系的查漏与补缺

太久没学单片机了&#xff0c;再重新过一遍查漏补缺&#xff0c;对其中之前没怎么在意的&#xff0c;而现在又发觉的问题进行再分析与补充 1. debug serial wire是干什么用的 这个东西我勾选不勾选都对我的程序没有什么影响&#xff0c;我很好奇是干什么用的&#xff0c;网上查…

《Ubuntu20.04环境下的ROS进阶学习1》

一、vscode和超级终端Terminator 在上节我们已经逛了逛ROS官方应用商店和全球最大开源平台github。为了方便阅读代码和启动程序&#xff0c;本节我们来下载两个好用的app&#xff0c;当然是在Ubuntu上。 二、下载安装并运行vscode 1、下载vscode安装包 这里为了方便我们直接打…

职工医疗报销管理系统

目录 1 系统目标与范围说明... 0 1.1项目名称... 0 1.2问题说明... 0 1.3项目目标... 0 1.4项目范围... 0 1.5初步想法... 0 1.6可行性研究计划... 0 2 可行性分析报告... 1 2.1系统概述... 1 2.2可行性分析... 2 2.3结论意见... 2 3 项目开发计划... 2 3.1系统…

【电路笔记】-NPN晶体管

NPN晶体管 文章目录 NPN晶体管1、概述2、双极NPN晶体管配置3、NPN晶体管中的α和β关系4、示例5、共发射极配置1、概述 NPN 晶体管是三端三层器件,可用作放大器或电子开关。 在前面的文章中,我们看到标准双极晶体管或 BJT 有两种基本形式。 NPN(负-正-负)配置和PNP(正-负…

代码随想录 二叉树第四周

目录 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众树 236.二叉树的最近公共祖先 617.合并二叉树 617. 合并二叉树 简单 给你两棵二叉树&#xff1a; root1 和 root2 。 想象一下&#xff0c;当你将其…

程序员未来发展之路-从入门到高手的成长轨迹

作为程序员&#xff0c;每个人的职业发展路径都是独特而富有挑战性的。从新手到专家&#xff0c;需要不断学习和实践&#xff0c;积累经验和技能。本文将带你探讨程序员职业发展的各个阶段以及关键要素&#xff0c;帮助你规划自己的职业发展之路。 一、新手阶段&#xff1a;夯…

fasta文件与fastq文件相互转化Python脚本

fa文件与fq文件互相转换 今天分享的内容是fasta文件与fastq文件的基本知识&#xff0c;以及通过Python实现两者互相转换的方法。 测序数据公司给的格式通常是fq.gz&#xff0c;也就是fastq文件&#xff0c;计算机的角度来说&#xff0c;生物的序列属于一种字符串&#xff0c;就…

2024/3/7—2575. 找出字符串的可整除数组

代码实现&#xff1a; int* divisibilityArray(char *word, int m, int *returnSize) {int n strlen(word);int *res (int*)malloc(sizeof(int) * n);long cur 0;for (int i 0; i < n; i) {cur (cur * 10 (word[i] - 0)) % m;res[i] (cur 0) ? 1 : 0;}*returnSize …

windows重装系统后如何恢复自带的正版office

前言 重装系统后&#xff0c;正版office如何安装 登录微软官网 https://www.microsoft.com 下载office&#xff0c;在已购买的产品中找到Office产品&#xff0c;点击安装,选择默认即可 https://account.microsoft.com/services

基于UDP实现直播间聊天的功能

需求&#xff1a;软件划分为用户客户端和主播服务端两个软件client.c和server.c 用户客户端负责&#xff1a;1.接收用户的昵称2.接收用户输入的信息&#xff0c;能够将信息发送给服务端3.接收服务端回复的数据信息,并完成显示主播服务端负责&#xff1a;1.对所有加入直播间的用…

pytorch(四、五)用pytorch实现线性回归和逻辑斯蒂回归(分类)

文章目录 线性回归代码过程准备数据设计模型设计构造函数与优化器训练过程训练代码和结果pytorch中的Linear层的底层原理&#xff08;个人喜欢&#xff0c;不用看&#xff09;普通矩阵乘法实现Linear层实现 回调机制 逻辑斯蒂回归模型损失函数代码和结果 线性回归 代码过程 训…

一键清除JavaScript代码中的注释:使用正则表达式实现

这个正则表达式可以有效地匹配 JavaScript 代码中的各种注释&#xff0c;并且跳过了以 http: 或 https: 开头的链接。 /\/\*[\s\S]*?\*\/|\/\/[^\n]*|<!--[\s\S]*?-->|(?<!http:|https:)\/\/[^\n]*/gvscode 实战&#xff0c;ctrlF 调出查找替换工具&#xff0c;点…

(五)关系数据库标准语言SQL

注&#xff1a;课堂讲义使用的数据库 5.1利用SQL语言建立数据库 5.1.1 create Database 5.1.2 create schema...authorization... 创建数据库和创建模式的区别&#xff1a; 数据库是架构的集合&#xff0c;架构是表的集合。但在MySQL中&#xff0c;他们使用的方式是相同的。 …

设计模式学习笔记(二):工厂方法模式

一、定义 工厂方法模式&#xff08;Factory Method Pattern&#xff09;是一种创建型设计模式&#xff0c;它提供了一种在不指定具体类的情况下创建对象的方法。工厂方法模式定义了一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟…

maven项目结构管理统一项目配置操作

一、maven分模块开发 Maven 分模块开发 1.先创建父工程&#xff0c;pom.xml文件中&#xff0c;打包方式为pom 2.然后里面有许多子工程 3.我要对父工程的maven对所有子工程进行操作 二、解读maven的结构 1.模块1 <groupId>org.TS</groupId><artifactId>TruthS…

Dubbo基础入门二

8、Dubbo协议 服务调用 8.1 服务端 启动过程深入分析 我们查看一下服务启动的过程 ProtocolFilterWrapper.export 好我们进入DubboProtocol.export 创建服务 分析我们的Handler 我们接着返回刚才位置 下面的super方法里面会创建服务&#xff0c;ChannelHandlers.wrap会对hand…

19-Java中介者模式 ( Mediator Pattern )

Java中介者模式 摘要实现范例 中介者模式&#xff08;Mediator Pattern&#xff09;提供了一个中介类&#xff0c;该类通常处理不同类之间的通信&#xff0c;并支持松耦合&#xff0c;使代码易于维护中介者模式是用来降低多个对象和类之间的通信复杂性中介者模式属于行为型模式…