2.2 开发工程的建立与项目管理
2.2.1 Windows下建立编译链接PCL工程
在Windows下面建立编译链接PCL工程,读者可以参考2.1.1节中的测试安装是否成功来建立自己的工程,也可以通过手动添加所需的头文件和链接库等方式建立工程。因为PCL本身就是用CMake作为工程管理的工具,本书中所有实例都提供了CMakeLists文件,所以建议读者使用CMake来进行工程管理,自学CMake相关命令和宏定义,相信会非常受益于该工具。
2.2.2 ROS下建立编译链接PCL工程
1.如何在ROS环境下建立与编译基于PCL的模块
本节内容成功重现的前提是,读者已经按照2.1.2小节安装配置好了Ubuntu和ROS环境。
安装openni(编译案例需要,一般开发不是必须)
这里安装openni是由于后面案例需要使用到该软件包,一般PCL在ROS下的开发不需要该步骤。openni_camera 包是OpenNI 深度(+RGB)相机的 ROS 驱动程序。其中包括:Microsoft Kinect,PrimeSense PSDK,ASUS Xtion Pro 和 Pro Live,驱动程序发布原始深度,RGB和IR图像流。
该软件包为使用OpenNI标准的深度传感器提供ROS接口。这里使用的深度传感器为ASUS Xtion PRO Live。
安装ASUS Xtion PRO Live 的 ROS 驱动程序,首先安装 openni_camera 包(如图2-23所示)。
强烈建议通过openni_launch使用此软件包,该软件为openni_node生成的数据提供额外的RGB-D处理能力。安装openni_launch(如图2-24所示)。
图2-23 安装openni camera 驱动模块
图2-24 安装openni launch模块
安装完毕后,在运行roslaunch openni_launch openni.launch命令启动OpenNI驱动程序时可能会出现以下错误。
这时需要对/etc/openni/GlobalDefaults.int文件进行修改,将UsbInterface的值改为0、1或者2。
运行roscore,重新运行roslaunch openni_launch openni.launch命令,打开rviz可实时显示Xtion PRO Live获取的点云信息,测试说明ROS下该设备使用正常,如图2-25所示。
图2-25 测试roslaunch openni_launch openni.launch结果
创建PCL的 package
该小节参考http://wiki.ros.org/pcl/Tutorials,读者可以直接参考官方网站资料。
(1)首先切换到之前创建的catkin工作空间中的src目录下。
使用catkin_create_pkg命令来创建一个名为my_pcl_tutorial的新程序包,这个程序包依赖于pcl_conversions、pcl_ros、std_msgs、roscpp和sensor_msgs。
(2)修改package.xml文件,添加下列语句,这里使用Gedit编辑器进行编辑。
使用<run_depend>标签,在后面的编译中可能出现以下错误,这时只需将标签改为<exec_depend>,就能成功编译。
(3)创建一个名为src/example.cpp的空文件,并在其中粘贴代码,读者可以到下面的网址下载这个例子的源文件。
http://wiki.ros.org/pcl/Tutorials/hydro?action=AttachFile&do=view&target=example_voxelgrid.cpp
在这个例子中,我们使用PCL里面提供的下采样类库对PointCloud2进行下采样,从而显著减少输入数据集中的点数。本例中使用了ROS消息:sensor_msgs::PointCloud2,sensor_msgs/PointCloud2格式是ROS应用程序的首选。
代码主要分为三部分:加载点云(第9~19行)、处理点云(第20~24行)、保存输出(第25~32行)。由于代码片段中使用了ROS订阅者和发布者,因此我们可以忽略使用PCD格式加载和保存点云数据。第20~24行处理云,它们创建PCL对象,传递输入数据并执行实际计算。
(4)编辑新创建的包中的CMakeLists.txt文件,添加下列语句。
编译运行程序包
记得事先source你的环境配置(setup)文件,在Ubuntu中的操作指令如下。
使用 catkin_make进行编译。catkin_make 是一个命令行工具,它简化了catkin的标准工作流程。你可以认为catkin_make是在CMake标准工作流程中依次调用了cmake 和 make。
注意,使用catkin,一定要确保在调用catkin_make后,并且在运行自己的程序前,已经source了catkin工作空间下的setup.sh文件。
否则,会出现下面的问题,找不到刚刚创建的package。
在单独的终端里运行如下代码。
然后在两个终端中分别运行以下命令。
运行rviz来可视化结果。
在打开的rviz中,添加“PointCloud2”显示。将Fixed Frame选择为camera_depth_frame(或任何适合你的传感器的frame),首先将PointCloud2的Topic选为/output,这时你会看到下采样后的点云。为了进行比较,可以将Topic 选为/camera/depth/points,来查看它下采样的结果,如图2-26和图2-27所示。
图2-26 下采样输出结果(topic选为/output)
图2-27 原始点云输出结果(topic选为/camera/depth/points)
2.ROS下使用Qt Creator作为IDE来提高开发效率
为了在ROS下提高开发效率,推荐读者选用IDE来进行开发,此处选择Qt Creator 来说明。读者可以选择插件ros_qtc_plugins来提高效率,但该插件在安装时会遇到需要对标准C++ 库进行升级的问题。
安装Qt Creator
Qt Creator 是全新的跨平台 Qt IDE(集成开发环境),可单独使用,也可与 Qt 库和开发工具组成一套完整的 SDK(软件开发工具包)。其中包括:高级 C++代码编辑器,项目和生成管理工具,集成的上下文相关的帮助系统,图形化调试器,代码管理和浏览工具。
请注意,我们只需使用命令安装Qt Creator软件包。
在安装过程中可能遇到Reading package lists...Error!问题,可以通过运行sudo rm/var/lib/apt/lists/*-vf命令来解决。
然后在终端运行如下代码。
启动的Qt Creator如图2-28所示。
注意:Qt Creator应该在终端中启动,而不是双击软件图标。这是因为终端会提供.bashrc,其中包含ROS的环境设置。
图2-28 命令行启动Qt Creator
用Qt Creator来管理catkin_make的项目
catkin_make是ROS项目管理的一个新的推荐的内置工具。正如我们所知,单个包文件被放在工作区目录的/src目录中。使用Qt Creator配置catkin工作区的关键步骤是打开/src根目录下的CMakeLists.txt文件。这里棘手的是,初始化的工作空间包含一个名为CMakeLists.txt的链接,它链接到ROS安装目录中的文件。为了避免Qt Creator打开该文件时出问题,我们必须将catkin_ws/src中的符号链接的 CMakeLists.txt 替换为实际文件,使用下面的命令,如图2-29所示。
图2-29 工作空间下的CMakeLists链接文件
下面就可以直接将一个catkin工作空间下的所有项目打开,使用Qt Creator的打开文件或项目命令,并选择 catkin 工作区的顶层 CMakeLists.txt(例如“catkin_ws/src/CMakeLists.txt”)。打开CMakeLists文件后,将工程build 目录配置为catkin_ws/build/,如图2-30所示。
图2-30 配置工程build目录
在building settings中,将CMake参数声明如下,如图2-31所示。
图2-31 CMake声明
右击项目目录并运行CMake,然后可以看到正在解析并列在项目管理面板中的所有源文件如图2-32所示。Qt Creator 无论以哪种方式创建工程文件,都会在工程文件所在目录自动生成后缀为.user 的用户配置文件,该文件主要保存此工程的配置信息(如:工程所在路径,编译代码时的一些错误信息)。单击Qt Creator侧边栏中的Build Project图标,编译程序。然后单击Qt Creator侧边栏中的绿色三角形图标,即可运行程序。
图2-32 成功用Qt Creator进行工程开发
至此,大家就可以使用IDE在ROS下面进行快速开发了。