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


    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。

    之后可以使用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"

    img

    img


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

    img

    img


    3)出现一个对话框,询问新建的工作空间未被初始化,是否执行初始化,选择"yes"
    这里相当于执行一次catkin_init_workspace命令,使工作空间初始化。

    img


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

    img


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

    img


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

    img


    (2) 创建package

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

    img


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

    img


    3) 填写package的名字,如test1

    填写作者(Authors)和维护者(Maintainers),如果你的Qt环境部没有配置中文支持请不要用中文,否则无法新建package,或者新建的package里面的package.xml会是空文件。
    在"Dependencies"下的"Catkin"一栏填写依赖,通常用C++写节点需要添加对roscpp的依赖。

    img


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

    img


    (3) 添加新的节点

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

    img


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

    img


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

    img


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

    img


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

    img


    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文件夹下找不到可执行文件,导致后面选择运行节点的时候不会出现这个节点。

    img


    2) 编译

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

    img


    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。

    img


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

    img


    6 头文件包含

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

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

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

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

    img


    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项目主页

    插件使用问题


  • 相关阅读:
    产品设计理应遵循哪些原则?
    产品经理必读的九步法
    exec
    Class convert
    Connecting method
    ASP.NET读写操作
    Encrypt Decrypt
    EventHandler, EventArgs
    Convert using code
    Dictionary List
  • 原文地址:https://www.cnblogs.com/linuxAndMcu/p/10649440.html
Copyright © 2020-2023  润新知