ROS学习笔记八:基于Qt搭建ROS开发环境

时间:2024-10-18 08:33:38

1 前言

本文介绍一种Qt下进行ROS开发的完美方案,使用的是ros-industrial的Levi-Armstrong在2015年12月开发的一个Qt插件ros_qtc_plugin,这个插件使得Qt“新建项目”和“新建文件”选项中出现ROS的相关选项,让我们可以直接在Qt下创建、编译、调试ROS项目,也可以直接在Qt项目中添加ROS的package、urdf、launch,感谢Levi-Armstrong。目前这个插件还在不断完善,有问题或者其他功能建议可以在ros_qtc_plugin的项目主页的讨论区提出。

本文是用的操作系统是ubuntu 14.04 LTS,ROS版本是indigo,Qt版本是Qt5.9。

2 安装Qt和插件ros_qtc_plugin

插件要求Qt 5.5.0以上的版本,下载Qt 5.7.0可以使用apt-get方式安装,Ubuntu14.04 安装指令如下:

$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$ sudo add-apt-repository ppa:levi-armstrong/qt-libraries-trusty
$ sudo add-apt-repository ppa:levi-armstrong/ppa
$ sudo apt-get update
$ sudo apt-get install qt57creator-plugin-ros libqtermwidget57-0-dev

出现错误

下列软件包有未满足的依赖关系: qt57creator-plugin-ros : 依赖: libqtermwidget59-0 (>=0.6.1) 但是它将不会被安装 E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

解决办法

$ sudo apt-get update
$ sudo apt install qt59creator
$ sudo apt-get install qt57creator-plugin-ro

然后可以通过win键搜素安装的qt。

ROS学习笔记八:基于Qt搭建ROS开发环境

之后可以使用qt进行ROS的程序编写与编译。

ROS学习笔记八:基于Qt搭建ROS开发环境

3 使用ros_qtc_plugin插件新建项目

使用插件的"新建项目"中的"Import ROS Workspace"选项不仅可以新建工作空间还可以导入现有的工作空间,而"新建文件"中的"ROS"下面的"Package"、"Basic Node"等选项可以创建package和和节点、launch文件、urdf文件等。现在创建一个新的catkin工作空间,并且在里面创建一个package。

(1) 新建项目

1) "File"—"New File or Project",选择"Import Project"—"Import ROS Workspace"—"choose"

ROS学习笔记八:基于Qt搭建ROS开发环境

ROS学习笔记八:基于Qt搭建ROS开发环境

2) Name和catkin工作空间文件夹名字相同(也可以不同)名为catkin_new,然后选择"Browse"——"创建文件夹"(点击右上角带"+"文件夹),创建一个名为catkin_new的文件夹,如下图,按回车,再选择"Choose"。

ROS学习笔记八:基于Qt搭建ROS开发环境

ROS学习笔记八:基于Qt搭建ROS开发环境

3)出现一个对话框,询问新建的工作空间未被初始化,是否执行初始化,选择"yes"

这里相当于执行一次catkin_init_workspace命令,使工作空间初始化。

ROS学习笔记八:基于Qt搭建ROS开发环境

4) 点击下方的"Generate Project File",再点击"Next" 。

ROS学习笔记八:基于Qt搭建ROS开发环境

5) 在"Project Management"步骤可以配置版本控制系统,将"Add to version control"中的"Git"修改为"",然后执行"Finish"。

ROS学习笔记八:基于Qt搭建ROS开发环境

6) 建好的工作空间catkin_new是空的,如下图所示:

ROS学习笔记八:基于Qt搭建ROS开发环境

(2) 创建package

1) 在catkin_new下面的src上右键单击,选择"Add New...",如下图所示:

ROS学习笔记八:基于Qt搭建ROS开发环境

2) 然后选择"ROS"——"package"——"choose"

ROS学习笔记八:基于Qt搭建ROS开发环境

3) 填写package的名字,如test1

填写作者(Authors)和维护者(Maintainers),如果你的Qt环境部没有配置中文支持请不要用中文,否则无法新建package,或者新建的package里面的package.xml会是空文件。

在"Dependencies"下的"Catkin"一栏填写依赖,通常用C++写节点需要添加对roscpp的依赖。

ROS学习笔记八:基于Qt搭建ROS开发环境

4) 在"Project Management"步骤可以配置版本控制系统,将"Add to version control"中的"Git"修改为"",然后执行"Finish"。

ROS学习笔记八:基于Qt搭建ROS开发环境

(3) 添加新的节点

1)目前这个package还是空的,没有任何节点。在test1的src文件夹上右键单击,选择"Add New..."。

ROS学习笔记八:基于Qt搭建ROS开发环境

2) 选择"ROS"——"Basic Node"——"choose",创建一个节点,也就是新建一个.cpp文件。

ROS学习笔记八:基于Qt搭建ROS开发环境

3) 节点名称写为"node1",则生成一个名为node1.cpp的源文件。

ROS学习笔记八:基于Qt搭建ROS开发环境

4) 在"Project Management"步骤可以配置版本控制系统,将"Add to version control"中的"Git"修改为"<None>",然后执行"Finish"。

ROS学习笔记八:基于Qt搭建ROS开发环境

5) 用ROS模板新建的node1.cpp的源文件如下图,是自动生成的一个Hello World程序。

ROS学习笔记八:基于Qt搭建ROS开发环境

4 编译节点

1) 修改CMakeLists.txt

为了编译成可执行文件,还需要编辑test1的makefile。为test1的CMakeLists.txt加上下面几行,意思是把node1.cpp编译成名为node1的节点。

add_executable(node1 src/node1.cpp)

target_link_libraries(node1

${catkin_LIBRARIES}

)

注意:

上面几行需要放在include_directories后面,在构建项目的时候才会在catkin_new/devel/lib/test1里面生成可执行文件node1.exe,这样后面进行"运行配置"的时候test1包下面才会出现node1节点;如果把上面几行放在include_directories前面会使得构建过程直接在catkin_new/build/test1下面生成可执行文件node1.exe,而devel文件夹下找不到可执行文件,导致后面选择运行节点的时候不会出现这个节点。

ROS学习笔记八:基于Qt搭建ROS开发环境

2) 编译

修改完CMakeLists.txt之后点击Qt左下角的锤子图标"构建项目catkin_new",点击底边栏的"4 编译输出"可以看到编译结果,如下图:

ROS学习笔记八:基于Qt搭建ROS开发环境

5 运行节点

1) 运行节点需要修改运行配置,点击左侧栏的"Projects",在"Build Settings"页的"Edit build configuration"一栏选择"Default"。

2) 在下图所示光标处 点击切换到"Run"页,可以看到一个"Add Run Step"的选项,点击出现一个"ROS Step"配置项,可以通过下拉菜单选择package和target(就是该package下的节点),下拉菜单可以通过键入首字母初步定位到你要找的 package位置 。"Add Run Step"的选项其实也是一个下拉菜单,可以选择"Add Launch Step"的选项运行launch文件。

3)点击Qt左下角的小电脑图标,选择"Default"的构建配置,再点击Qt左下角的绿色三角形即可运行"运行设置"页下面配置好的所有Step。

ROS学习笔记八:基于Qt搭建ROS开发环境

4) 运行结果可以点开底边栏的"ROS Terminals"查看,如下图, 打印了一句 [ INFO] [1470932511.713873863]: Hello world! 如果没有"ROS Terminals",可以在下图鼠标所在位置底边栏有两个上下三角形的地方打开"ROS Terminals"窗口。

ROS学习笔记八:基于Qt搭建ROS开发环境

6 头文件包含

用插件创建或导入ROS package之后还需要修改.workspace文件,如下图所示:

在<IncludePaths>标签下加入下面这行:

<Directory>/opt/ros/indigo/include</Directory>

这样就可以使得Qt找到ros头文件,比如<ros/ros.h> ,头文件包含语句不再提示找不到文件,输入ros相关函数可以自动补全。

ROS学习笔记八:基于Qt搭建ROS开发环境

7 修改Qt Creator快捷方式

使从快捷方式启动Qt Creator的同时加载ROS环境变量,否则通过Cmakelists.txt导入的ROS工程运行时出现CMAKE_PREFIT_PATH找不到的错误,如下:

/home/ubuntu/catkin_new/src/ros_tutorials/roscpp_tutorials/CMakeLists.txt:5: error: By not providing "Findcatkin.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "catkin", but CMake did not find one.

打开terminal,输入下面的命令:

$ gedit /home/leon/.local/share/applications/Qt-Creator-ros.desktop

修改 Exec 变量一行,在中间添加 bash -i -c 即改为 Exec=bash -i -c /home/leon/qtc_plugins/qt-creator-build/bin/qtcreator ,注意修改路径,保存并退出。添加 bash -i -c 是为了在通过快捷方式启动Qt Creator的同时加载ROS环境变量(ROS环境变量加载脚本配置在 ~/.bashrc 文件内)。

参考:

SLAM学习笔记-知乎

LeonHuo

张京林要加油

Setup Qt Creator for ROS

github ros-industrial/ros_qtc_plugin项目主页

插件使用问题