這個首先並不是我一邊做實驗一遍記錄的,而是我做完成以后才想起來做個分享的,所以中途遇到的很多問題,並沒有來得及記錄下來,現在寫的這些都是后話了
首先呢!我們不需要在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上
關注微信公眾號,加入群聊

