再上一篇blog中,笔者总结了ROS系统中使用OpenCV库的进行简单图像处理的原理、系统相关的设置和程序包的下载。在这篇博客中,笔者将从代码层面介绍如何实现在ROS系统中读取图片,并使用OpenCV进行图像处理,在返回结果。
实例:从ROS中读取图象,转换后将彩色图象变成灰度图象,并返回灰度图象,转换后在ROS下输出。
正文
1. 在ROS下创建工作空间
工作空间(work space)是ROS中非常重要的一个概念,可以把工作空间理解为一个大的工厂,里面的分成几个大的生产车间(package),每一个生产车间中会有若干个具有不同技能的工人(node)。当工厂运转时,每个车间中的工人(node)同时工作,他们通过话题(topic)进行信息沟通。各个大的车间之间也存在这互相依赖的关系,共同组成一个有机的整体。
因此在每次编写ROS下的程序时都应该先建立一个独立的工作空间,然后再不段的丰满它的功能。
方法如下:新建一个终端输入:
mkdir -p cv_ws/src
cd src
catkin_init_workspace
cd ..
catkin_make
2. 在工作空间下创建程序包
创建好了工作空间,下一步需要创建程序包。在ROS中节点是实现某一个功能的可执行文件(工人),一个或者多个节点可以组成一个程序包。这样做便于代码的复用。程序包默认在工作空间中的src文件夹中创建,而node默认在程序包的src文件中创建(cpp文件)。
方法如下:在原来的终端下继续输入:
cd src
catkin_create_pkg robot_vision roscpp std_msgs cv_bridge image_transport sensor_msgs
cd ..
catkin_make
创建程序包的一般格式是catkin_create_pkg <name> <dependencies package>,在本程序中我们要用到除roscpp之外的三个程序包进行图片的转换工作。