- 博客(59)
- 资源 (1)
- 收藏
- 关注
原创 Halcon 3D应用 - 胶路提取
本文基于某手环(拆机打磨处理)做的验证性工作,为了项目保密性,只截取部分数据进行测试。这里使用的是海康3D线激光轮廓相机+直线电机的方式进行的高度数据采集,我们拿到的是数据。提取手环上的胶路信息,检测胶路的胶宽、胶高、断胶等信息。
2024-10-09 18:00:00 1081
原创 DevC++编译及使用Opencv
这个DevCpp真的难用的要死,代码提示、代码补全、定义跳转等等无比难用,还是选择vscode+mingw吧!
2024-09-07 07:32:07 1135
原创 Qt 树形控件 QTreeView QTreeWidget深入剖析
通过上面的分析,用QTreeWidget在数据量不是特别大的时候,用着是没什么问题的。QTreeWidget为了兼容各种情况,已经写的很灵活了,但如何更高效呢?答案就是定制化,这样就减少了一部分灵活性。如何定制化呢?核心就是重写,Qt已经给了我们一个很好的实例,可以自己看一下这个例子,笔者这里实现的也是在这个例子基础上改的,添加了TreeItem和TreeModel两个类。TreeItem:对应了树的一行,每一列的数据存储在成员中,同时还存储父和子TreeModel:重新实现关键函数。
2024-08-26 18:03:44 1269
原创 hyper-v ubuntu下连接嵌入式linux板卡
用hyper-v非常的方便,不用装vm也不会那么臃肿,但如何在hyper-v和嵌入式板卡之间进行通讯呢?
2024-08-20 06:49:37 811
原创 Hyper-v ubuntu22 上外网方法
步骤一,首先新建一个虚拟网络交换机,我这里名称为vEthernet (hyper-v-ubuntu),选【内部网络】步骤二, 在网络设置中,找到可以上网的网卡,这里我用的是无线网卡WLAN,设置共享连接为vEthernet (hyper-v-ubuntu):步骤三:此时查看vEthernet (hyper-v-ubuntu)网卡的ip地址,发现自动设置为了192.168.137.1。
2024-08-18 15:28:18 719
原创 C语言结构体4字节对齐对效率的影响
CPU只能寻址4或8整除的地址,如果要寻址其他地址,比如0x00000003,则会寻址到0x00000000上取出4字节再找到第3位置上的数据,如果此时的数据比较长,比如有4个数据,那么第一次寻址只能拿到0x00000000取出4字节的最后一个,然后再寻址0x00000004,拿出剩余的3字节,这样就寻址了两次,花费的时间更多了。在本例中,先看TNoAlign ,当取(或者赋值)ch1时,没问题,ch2和ch3都可以取ch1的地址。当取sh4时,问题就来了,只能先取。拿到第一个字节,再取。
2024-07-26 16:47:06 293
原创 windows下vscode调试虚拟机linux c++工程的三种方法
vscode去远程调试方法有很多种,不同的插件对应了不同的调试方法,比如:1.C/C++插件进行GDB调试(编写launch.json文件)2.C/C++ Runner插件3.CMake Tools插件(只针对CMake工程,需要搭配C/C++插件一起使用,但无需编写launch.json)
2024-04-16 14:03:07 2299 1
原创 Hdevelop编辑器常用功能
【阈值分割】——对应算子threshold通过菜单【可视化】-【工具】-【灰度直方图】打开,打开后选中【变量窗口】的某张图片即可进行灰度直方图分析。刚打开并选中某张图片:调节【最小化】和【最大化】的两个竖线,此时图中绿色部分为分割出的部分(颜色可以通过【颜色】选项修改):【缩放图像灰度】——对应算子scale_image作用:即拉开图像的对比度,让图像中黑的地方更黑,亮的地方更亮。
2024-04-15 18:07:51 447
原创 halcon 3.2标定相机
使用HALCON,您不局限于使用平面校准对象,如HALCON校准板。你可以使用3D校准对象,甚至可以使用任意特征点(自然地标)。唯一的要求是模型点的3D世界位置具有高精度。然后,只需将校准对象所有点(标记)的三维坐标作为参数中的元组传递set_calib_data_calib_object对象的CalibObjDescr。所有点的所有x、y和z坐标都必须以[X,Y,Z]的形式打包在元组中按顺序排列。但是,请注意,如果使用自己的校准对象,则不能使用运算符find_calib_object接口。
2024-04-15 17:48:44 1524
原创 Halcon 3D算子总结整理
对于hom_mat3d_rotate/hom_mat3d_rotate_local等旧轴和新轴的区别,这里用2d下的类似算子进行验证,这样比较直观。对图像先旋转30度,再沿x轴平移100个像素。套用hom_mat2d_rotate_local 和hom_mat2d_translate_local,因为是对新轴进行的,所以平移是按照旋转之后的坐标系沿x平移。套用hom_mat2d_rotate和hom_mat2d_translate,因为是对旧轴进行的,所以平移还是按照之前的图像坐标系平移。
2024-03-18 11:25:40 3524 1
原创 2D/3D相机手眼标定总结
无需进行相机内参标定,只能识别,属于平面标定,在标定过程中。该算法的核心是,即到的(注意这里并不是RT的刚体变换)。由上篇文章,可知仿射变换的基本公式:有6个自由度,至少需要3组点才能解决,超过3组点,可以用非线性最小二乘优化。uvxy求解后,就可以根据给出的像素点,得到机械手的点坐标,进而可以控制机械手去相应的位置了。
2024-03-04 17:41:40 3546 1
原创 射影变换的一种解法
按照《计算机视觉中的多视图几何》P430的解释,透视变换是射影映射的一种特殊情况,它最终要的一个性质是:连接对应点的直线,共点。
2024-03-01 09:18:17 1149
原创 git 总结整理
当合并分支时,小乌龟git默认使用Fast-forward选项,如下图中将 some feature 分支合并进 master 分支,Git 只需要将 master 分支的指向移动到最后一个 commit 节点上。如果将feature分支合并到dev分支上,记得先将dev合并到feature,然后再合并到dev,这样能避免很多问题。比如:https://zhuanlan.zhihu.com/p/192972614。
2024-02-13 14:30:27 690
原创 C/C++工程中错误码定义总结
系统一般是按模块划分的,模块与模块之间通过调用与被调用的关系,一般也会划分为多个层次,底层一般对接系统级API或者实现一些算法,上层调用底层的接口来处理业务。那么这些错误码如何定义呢?首先要明白错误码是什么:在笔者看来,错误码分为通用的系统级错误码和业务错误码,系统级错误码一般包括指针为空、内存分配失败、无效参数、超时等等,业务错误码和具体的模块业务有关系。
2023-12-21 23:22:11 1883
原创 相机标定张正友、opencv和halcon对比(1)
说了这么多到底有什么用呢,对于普通镜头,我们可以了解到标定出的焦距其实是主距。而对于其他镜头,我认为关键是初始值的选取,尤其是沙姆标定中,我们可以基于镜头参数,推导出理论初始值进行标定,然后控制标定的结果在理想的范围内是非常关键的。注意这里用的是halcon中的模型转换,opencv中的并没有说明它的模型怎么定义的,但我们用halcon的模型去套用应该也是没问题的。
2023-11-29 16:35:05 2252
原创 halcon 图像拼接
这里关键是concat_obj 和tile_images_offset的搭配使用,前者是一个图像数组,后者将该图像数组中的图像进行排布。需求:将两个图像各裁剪一半,然后拼接到一张图像中。
2023-11-15 13:52:48 662
原创 halcon快速傅里叶变换
低频特征是灰度变化不明显,例如图像整体轮廓,高频特征是图像灰度变化剧烈,如图像边缘和噪声。一个重要的经验结论:低频代表图像整体轮廓,高频代表了图像噪声,中频代表图像边缘、纹理等细节。
2023-11-07 09:53:54 731
原创 vtk编译要点及去除报警窗口
2.选择vs相应版本3. 选择build的项目,这里只选了库4. CMAKE_INSTALL_PREFIX配置5.INSTALL配置,这个在最后的工程中编译Install工程时会拷贝文件到相应目录6.QT相关配置7.再次执行config后报错,然后按提示配置,这里用的是qt5.12,选择版本为58.配置完毕。
2023-10-08 15:38:48 172
原创 vscode c/c++ global插件实现代码跳转
在vscode阅读编写c/c++代码时,体验不是很好,有时候会无法跳转。这里通过GNU Global工具解决这个问题。
2021-03-11 15:11:26 13043 2
原创 ROS(1)安装
目录1. ros安装1.1. 添加源1.2. 添加私钥1.3. 更新软件列表1.4. 安装ros1.5. 初始化1.5.1. 问题11.5.2. 问题21.6. 环境变量配置1.7. 安装rosinstall1.8. 测试小乌龟1.9. 测试rviz1.10. 卸载ros2. 注意注意3. 创建工作空间与功能包3.1. 创建工作空间3.2. 编译工作空间3.3. 设置环境变量3.4. 检查环境变量3.5. 创建功能包3.6. 编译功能包3.7. 编译指定的功能包4. 话题4.1. 发布与订阅4.2. 自定义
2021-01-25 15:18:23 578
原创 ROS(11)move_base详解
11. move_base详解11.1. move_base配置参数解读参考链接:https://blog.csdn.net/banzhuan133/article/details/90239252https://wenku.baidu.com/view/1ae6d9a56729647d27284b73f242336c1fb9304d.htmlhttps://blog.csdn.net/qq_29313679/article/details/106237063在仿真中,查看turtlebot3_n
2021-01-25 14:55:56 3093 3
原创 ROS(10)turtlebot仿真(利用cartographer_ros)
10. turtlebot仿真(利用cartographer_ros替换karto)参考链接https://blog.csdn.net/qq_34935373/article/details/111991920https://www.freesion.com/article/9794248452/10.1. 官方纯定位Pure localization仿真测试10.1.1. 下载数据集wget -P mnt/e/wsl/cartographer_demo/pureLoc/ https://sto
2021-01-25 14:54:53 451
原创 ROS(9)turtlebot仿真(利用karto)
9. turtlebot仿真(利用karto)参考链接https://blog.csdn.net/qq_40078576/article/details/104773668https://blog.csdn.net/lingchen2348/article/details/795039709.1. 安装Gazebo仿真软件安装ros时已经安装。9.2. 下载Gazobo的模型包不需要再下载模型包了,turtlebot包会加载出模型。9.3. 安装slam建图包turtlebot3支持gma
2021-01-25 14:53:53 952
原创 ROS(8)Navigation安装
8. ROS-Navigation安装官方链接:http://wiki.ros.org/navigation8.1. 安装方式注意,如果通过turtlebot来仿真,当用apt-get安装时它会自动下载导航包。这里因为可能会研究源码,利用源码进行安装。方式一,通过apt-get安装编译好的包;方式二,通过源码编译安装–推荐。会安装如下包:navigation (metapackage) map_server amcl fake_localization voxel_grid co
2021-01-25 14:52:55 6648 5
原创 ROS(7)launch启动文件
7. launch启动文件任何包含两个或两个以上节点的系统都可以利用启动文件来指定和配置需要使用的节点。通常的命名方案是以.launch作为启动文件的后缀,启动文件是XML文件。一般把启动文件存储在取名为launch的目录中。7.1. 指令roslaunch [options] [package] <filename> [arg_name:=value...]roslaunch [options] <filename> [<filename>...] [arg_n
2021-01-25 14:52:02 699
原创 ROS(6)AGV方向-坐标管理系统
6. ros中坐标系管理系统【 原理 】 : 通过tf包的发布功能,可以发布一组坐标之间的转换关系(平移+旋转), 构建一个树形结构,然后通过lookupTransform()接口可以获取任意两个坐标之间的转换关系,不用自己再计算了,强大!!即通过tf广播器广播坐标映射关系,通过tf监听器得到任意两个坐标系之间的关系6.1. 代码解释创建坐标映射 static tf::TransformBroadcaster tfb; tfb.sendTransform(tf::StampedTran
2021-01-25 14:51:36 731
原创 ROS(3~5)话题、服务、参数
3. 话题3.1. 发布与订阅容易理解的是,话题是节点与节点之前通信的一种方式,(服务是节点之间通信的另一种方式)话题与服务的区别是:节点只管投递,数据可能会丢失;服务会有request和response,相当于RPC调用。话题用.msg文件定义数据,服务用.srv文件定义数据代码示例:1、pos_subscriber和velocity_publisher是订阅和发布ros系统已有的一个话题;利用advertise()创建发布者对象。2、person_pubsher和person_sub
2021-01-25 14:50:09 489
原创 ROS(2)工作空间与包
2. 创建工作空间与功能包ros的工作空间是我们开发ros项目的一个工作目录src:代码空间,包含代码、lanuch文件、配置文件等等,是源码所在的目录;build:编译空间,包含编译过程中产生的中间文件;devel:开发空间,编译生成的可执行文件、库等等;install:安装空间,用install命令安装的文件放置的位置(开发基本用不到)。2.1. 创建工作空间mkdir -p ~/catkin_ws/src cd ~/catkin_ws/srccatkin_init_works
2021-01-25 14:48:39 240
原创 记录一次Windows下通过reimp和dlltool转换.lib到.a的过程
背景是这样的:在linux下的一个C++服务由于特殊原因,需要在windows下跑,该工程为cmake搭建,用到了qt的一些基础库,我们想在qtcreator中用mingw来调试运行,其中用到的activemq客户端库原先已经有现成的dll库,只需要转换.lib到.a即可无缝切换。上网查阅资料,步骤很简单,先用exports转出def导出文件,然后用mingw下的dlltool转.a:下...
2019-08-13 21:19:34 6440 1
原创 GDB调试中 如何在so共享库中打断点、保存断点以及加载断点
最近在使用gdb的过程中,需要对so文件进行调试,在这里记录一下调试中的问题及解决方法。如何在so源文件中打断点?首先编译so时需要-g指令。在gdb xxx指令后,发现无法在so对应的源码文件中打断点,break指令找不到so中的类、源文件cpp,这里的方法就是需要在so加载进来后,就可以找到so文件的类名和源文件了,我们可以先run执行一遍,然后Ctrl+C结束,重新打断点即可找...
2019-07-26 14:32:28 9303
原创 windows下vscode安装go插件
1、GIT安装、vscode安装(略)2、GO在win下安装及环境变量配置安装完GO后,创建一个目录作为工作区,如G:\my\project\go,环境变量添加GOPATH并指向该目录。在该目录下创建三个子目录bin、pkg及src。3、配置vscode如果github.com下载太慢,我们可以通过https://gopm.io/download进行下载,速度杠杠的。 ...
2019-07-10 22:36:35 11047 1
原创 git使用记录
摘自廖雪峰论坛整理:https://www.liaoxuefeng.com/wiki/896043488029600git【安装后的一步操作】$ git config --global user.name "Your Name"$ git config --global user.email "email@example.com"【创建版本库】--初始化一个Git仓库,在指定目...
2019-07-07 20:47:46 178
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人