- 博客(48)
- 资源 (1)
- 收藏
- 关注
原创 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 1123
原创 2D/3D相机手眼标定总结
无需进行相机内参标定,只能识别,属于平面标定,在标定过程中。该算法的核心是,即到的(注意这里并不是RT的刚体变换)。由上篇文章,可知仿射变换的基本公式:有6个自由度,至少需要3组点才能解决,超过3组点,可以用非线性最小二乘优化。uvxy求解后,就可以根据给出的像素点,得到机械手的点坐标,进而可以控制机械手去相应的位置了。
2024-03-04 17:41:40 756
原创 射影变换的一种解法
按照《计算机视觉中的多视图几何》P430的解释,透视变换是射影映射的一种特殊情况,它最终要的一个性质是:连接对应点的直线,共点。
2024-03-01 09:18:17 769
原创 C/C++工程中错误码定义总结
系统一般是按模块划分的,模块与模块之间通过调用与被调用的关系,一般也会划分为多个层次,底层一般对接系统级API或者实现一些算法,上层调用底层的接口来处理业务。那么这些错误码如何定义呢?首先要明白错误码是什么:在笔者看来,错误码分为通用的系统级错误码和业务错误码,系统级错误码一般包括指针为空、内存分配失败、无效参数、超时等等,业务错误码和具体的模块业务有关系。
2023-12-21 23:22:11 1204
原创 相机标定张正友、opencv和halcon对比(1)
说了这么多到底有什么用呢,对于普通镜头,我们可以了解到标定出的焦距其实是主距。而对于其他镜头,我认为关键是初始值的选取,尤其是沙姆标定中,我们可以基于镜头参数,推导出理论初始值进行标定,然后控制标定的结果在理想的范围内是非常关键的。注意这里用的是halcon中的模型转换,opencv中的并没有说明它的模型怎么定义的,但我们用halcon的模型去套用应该也是没问题的。
2023-11-29 16:35:05 1549
原创 halcon 图像拼接
这里关键是concat_obj 和tile_images_offset的搭配使用,前者是一个图像数组,后者将该图像数组中的图像进行排布。需求:将两个图像各裁剪一半,然后拼接到一张图像中。
2023-11-15 13:52:48 278
原创 halcon快速傅里叶变换
低频特征是灰度变化不明显,例如图像整体轮廓,高频特征是图像灰度变化剧烈,如图像边缘和噪声。一个重要的经验结论:低频代表图像整体轮廓,高频代表了图像噪声,中频代表图像边缘、纹理等细节。
2023-11-07 09:53:54 289
原创 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 109
原创 vscode c/c++ global插件实现代码跳转
在vscode阅读编写c/c++代码时,体验不是很好,有时候会无法跳转。这里通过GNU Global工具解决这个问题。
2021-03-11 15:11:26 11362 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 387
原创 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 2604 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 395
原创 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 802
原创 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 5508 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 552
原创 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 616
原创 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 397
原创 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 166
原创 记录一次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 5476 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 8642
原创 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 10922 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 154
翻译 Redis使用(一):安装
Redis介绍 redis通常用于“数据结构”服务器。它提供了一系列命令集来操作多种数据结构,可以通过“server-client”模式,基于TCP提供简单的协议进行访问。不同的进程可以通过一种共享的方式,查询和修改相同的数据结构对象。 redis实现的数据结构有如下的一些特殊属性:redis可以保存这些数据结构到磁盘,即使它们总是在服务器内存中修改或提供服务,这意味着r...
2019-06-12 21:03:15 118
转载 位运算与取模
(1) 判断int型变量a是奇数还是偶数a&1 = 0 偶数 a&1 = 1 奇数(2) 取int型变量a的第k位 (k=0,1,2……sizeof(int)),即a>>k&1(3) 将int型变量a的第k位清0,即a=a&~(1<<k)(4) 将int型变量a的第k位置1, 即a...
2019-05-29 22:09:04 3134
转载 do{}while(0)用法
linux内核和其他一些开源的代码中,经常会遇到这样的代码:do{ ...}while(0)这样的代码一看就不是一个循环,do..while表面上在这里一点意义都没有,那么为什么要这么用呢?实际上,do{...}while(0)的作用远大于美化你的代码。查了些资料,总结起来这样写主要有以下几点好处:1、辅助定义复杂的宏,避免引用的时候出错:举例来说,假设你需要定义这样一个...
2019-05-29 21:47:34 4688 2
原创 Ubuntu16.04下从零搭建Qt5.9.3+PyQt5+Eric6开发平台
关于Ununtu16.04 1.修改下载源列表,加快下载速度:s1.找到/etc/apt/sources.list并备份: cp /etc/apt/sources.list /etc/apt/sources.list.baks2.删除sources.list中的内容,修改为下面的内容:deb http://mirrors.ustc.edu.cn/ubuntu/ xenial m...
2018-09-03 19:50:55 1129
原创 OpenCV内存池管理(二)
上一节绘制了基本的Opencv内存池结构,本节着重讲解一下运行的流程,注意没有考虑线程安全。1、三个链表在上一节的图中,有三个主要的链表:①内存池自由链:单向链接的Block区块。②Block区块的私有链:单向链接的区块内释放过的地址链表③通过START和FREE管理的双向链表。2、fastmalloc()流程3、falstfree()流程4、初始化
2016-07-19 22:10:06 809
原创 OpenCV内存池管理(一)
OpenCV提供了一套高效的内存管理方案,提升了内存申请速率,减少了内存碎片,能够很好的提升程序的稳定性,同时支持线程同步。下面是对OpenCV内存管理源码中alloc.cpp的主要函数fastMalloc()和fastFree()的解读研究。
2016-07-17 16:33:24 2040
转载 关于在dll中申请内存,外部释放的问题
因为malloc/free,new/delete都是调用HeapAlloc/HeapFree来实现来实现内存分配是释放的。查看Windows的API可以看到,这两个函数都需要一个Heap的HANDLE做为参数。CRT库采用了全局变量来保存这个HANDLE。如果是CRT静态链接,CRT库的代码会链接到各个DLL中去,也包括这个全局变量。也就是说,每个使用CRT静态链接的dll中都有一个自己的
2016-06-11 23:00:16 1492
转载 内存对齐的那点事
首先由一个程序引入话题: 1 //环境:vc6 + windows sp2 2 //程序1 3 #include 4 5 using namespace std; 6 7 struct st1 8 { 9 char a ;10 int b ;11 short c ;12 };13 14 struct st
2015-06-22 21:23:41 242
原创 memcmp与strncmp
看实现:(网上摘录)int memcmp(const void * cs,const void * ct,size_t count) { const unsigned char *su1, *su2;//定义临时指针,因为void*不能做自增自减运算 int res = 0; for( su1 = (unsigned char* )cs, su2 = (unsigned char
2015-06-22 21:14:32 639
转载 服务器开发的一点心得体会
http://www.cnblogs.com/knight-monkey/p/monkey_server_blog.html
2015-06-20 17:05:51 431
原创 c++文件路径的总结
CString filename=_T("D:\\文件夹");或CString filename=_T("D:/matcom45/doc/users/_themes/m.dat");工程文件夹下简写路径应该是 ".. \\program \\file.txt
2014-04-28 17:18:28 427
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人