• ubuntu Ros环境halcon的一个程序


    这个首先并不是我一边做实验一遍记录的,而是我做完成以后才想起来做个分享的,所以中途遇到的很多问题,并没有来得及记录下来,现在写的这些都是后话了

    首先呢!我们不需要在ROS下写halcon的程序也是可以主要就是要添加halcon 的库而已,但是我也是找了很长时间,发现其实是有国外的大牛做的类似与cv_bridge的开发包,

    所以也是有halcon_bridge 的开发包 asr_halcon_bridge This package is used to convert between image-messages of the ROS environment and HALCON-images.

    Source: git https://github.com/asr-ros/asr_halcon_bridge.git

    这里这是像cv_bridge一样的功能,就是实现数据格式的转换,这样我们就就可以使用ROS的系统实现opencv  halcon PCL (点云库)

    三者之间的库函数的使用,这是十分便利 且有很多功能可以直接交叉使用,是多么爽的一件事啊

    那么我们下载这个包编译,可能会遇到一些依赖项的问题,这个我就记不得了,但是有一个重要的就是依赖项一般我们都是可以直接安装的

    比如ROS-indigo,就直接使用sudo apt-get install ros-indigo-(你想安装的包名)

    那如果是一般的库的话我们就像上一篇文章说的那样就是用sudo apt-get install lib(依赖项的名称)-dev,但是如果你找不到,你可以使用

    sudo apt-get install lib(依赖项名称)*,(发现没有这边是有一个*的)系统会提示你所有与这个名称相关的依赖项,然后就可以直接补全你想要安装的依赖项即可

    可能需要的依赖项  wxWidgets  Eigen  Boost 等等 反正有好多,就试着用上面的方法试试吧

    一个简单的教程如下,如果你对这个Halcon这种方式不熟悉,你可以先用cv_bridge 练手网址:http://wiki.ros.org/cv_bridge

    我记得我前面的文章里有写过好像,这里就不在赘述,而且对三维点云的格式转换也是同样适用的,都是有在前面的文章有写过

    有兴趣的可以返回过去找一下看一下就可以了

    Convert an image:

    把ROS中的图片的数据 sensor_msgs::Image 转换为Halcon的图片的格式  HalconCpp::HImage :

    HalconImagePtr toHalconCopy(const sensor_msgs::ImageConstPtr& source)
    HalconImagePtr toHalconCopy(const sensor_msgs::Image& source);

    The return-value is a HalconImagePtr object, which contains a HalconCpp::HImage-Pointer as a member called image.

    那么把Halcon的图像的格式 HalconImage转为ROS的格式的:

    sensor_msgs::ImagePtr toImageMsg() const;
    void toImageMsg(sensor_msgs::Image& ros_image) const;

    对于三维点云的格式的转换:

    把ROS的三维点云的数据转化为halcon的数据格式,转换的步骤和二维图像是差不多的,主要的函数如下

    HalconPointcloudPtr toHalconCopy(const sensor_msgs::PointCloud2ConstPtr& source);
    HalconPointcloudPtr toHalconCopy(const sensor_msgs::PointCloud2& source);

    to convert a sensor_msgs::PointCloud2 to a HalconCpp::HObjectModel3D (the member in the returned HalconPointcloud is called model).

    相反把halcon的数据格式转化为ROS的数据格式,然后这样我们就可以使用点云库(PCL)来处理点云

    sensor_msgs::PointCloud2Ptr toPointcloudMsg() const;
    void toPointcloudMsg(sensor_msgs::PointCloud2& ros_pointcloud) const;

    那么这些我们在后期会有机会的话再写一篇关于这样的文章

    比如我们读取单目摄像头的数据,然后转化到halcon下进行处理,这是一个很少有人做的事情,当然我们可以使用kinect1.0 

    或者kinect 2.0获取点云的数据然后转化到halcon的格式下处理,这个都是可以利用这样方法使用的,

    之前安装过kinect 2.0 的驱动以及ROS环境下使用kinect2.0的,网上有很多人教你如何安装kinect2.0 的教程所以就不在赘述

    比如我们就显示一下,因为这主要的目的就是要使用Ubuntu环境在halcon下处理三维点云的数据

    roslaunch kinect2_bridge kinect2_bridge.launch,开启kinect2.0的驱动

    可视化命令如下

    查看节点之间的关系

    可视化的结果

     emmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm似乎好像有点跑题了,好了因为安装的过程中真的有很多问题,但是我没有及时的记录

     这只是为了后期我们在使用传感器的时候,通过ROS作为一个桥梁的工具,其实使用halon我们不在ROS下也是可以直接使用的,只要CMakeLists.txt文件写好就可以、

    但是使用ROS下使用halcon的分享还是比较少的,接下来我就使用一个简单的例子来说明一下使用halcon的方法、

    假设我们已经对ROS熟悉的条件下啊,其中的创建工作空间啊,理解ROS的节点这些问题都不在赘述了

    在src文件下建立一个halcon_read.cpp文件,如图

    都是以前的笔记,都发布一下吧,具体代码在我的github上

     关注微信公众号,加入群聊

  • 相关阅读:
    解决jar包冲突
    postman使用记录
    get请求直接通过浏览器发请求传数组或者list到后台
    excel中ppmt/pmt/ipmt的计算方式
    unicode编码与解码
    spring参数拼装
    java内存模型(jmm)
    Mysql事务,并发问题,锁机制-- 幻读、不可重复读(转)
    星空雅梦
    星空雅梦
  • 原文地址:https://www.cnblogs.com/li-yao7758258/p/7372495.html
Copyright © 2020-2023  润新知