ROS与QT学习(二):qt_ros的初步使用

        对于在QT下进行ROS的开发也是一个不错的选择,兼容性很好,开发很方便。这篇博客总结一下ROS经典入门程序:节点的发布和订阅。

(1)新建一个工作空间:

$ mkdir qtros_ws

(2)打开qt_ros,方式有多种,最直接的方式如下:

$ qtcreator-ros

打开后的界面如下:

ROS与QT学习(二):qt_ros的初步使用_第1张图片

(3)File->New File or Project...->Other Project->ROS Workspace,点击choose,如下图所示:

ROS与QT学习(二):qt_ros的初步使用_第2张图片

(4) Name处填写工程名,这里取qtros;Distribution和Build System默认不变;Workspace Path选择Browse,选中刚才新建的qtros_ws,点击choose,如下图:

ROS与QT学习(二):qt_ros的初步使用_第3张图片

 (5)点击Next和Finish,界面如下:

ROS与QT学习(二):qt_ros的初步使用_第4张图片

        另外该工程下的文件如下:

ROS与QT学习(二):qt_ros的初步使用_第5张图片

        在后面的使用过程中会发现.workspace为后缀的文件很重要,它是在QT下打开工程的关键文件。此时src文件夹内没有什么文件,接下来就要新建ROS包。

(6)选中src文件夹右键点击Add New...,在弹出的框中选择ROS->Package,点击choose,如下图:

ROS与QT学习(二):qt_ros的初步使用_第6张图片

(7) Package Details中填写包名Name,如beginner_tutorials,在Catkin一栏填写需要用到的依赖,如roscpp;其他的选项可以不填,保持默认不动;

ROS与QT学习(二):qt_ros的初步使用_第7张图片

 (8)点击Next和Finish,完成在qt下ROS包的创建,如下图所示:

ROS与QT学习(二):qt_ros的初步使用_第8张图片

       如果看不见include和src文件夹,可以点击工程上面的漏斗形的图标,取消勾选Hide Empty Directories即可。这种方法还是不行的话可能重启一下$ qtcreator-ros就OK了!(滑稽~~~)

(9)开始添加文件(即开始编写ros中最基本的节点node),选中beginner_tutorials包下面的src文件,右键点击点击Add New...,在弹出的框中选择ROS->Basic Node,点击choose,如下图:

ROS与QT学习(二):qt_ros的初步使用_第9张图片

(10) Name处填写talker,Path保持不变,然后点击Next和Finish:

ROS与QT学习(二):qt_ros的初步使用_第10张图片

(11)可以看到在beginner_tutorials/src下新建了一个talker.cpp的文件,如下图:

ROS与QT学习(二):qt_ros的初步使用_第11张图片

        可以看到talker.cpp文件中有一段默认的代码,现将talker.cpp的代码修改如下:

#include 
#include 
#include 

int main(int argc, char *argv[])
{
    ros::init(argc, argv, "talker");
    ros::NodeHandle nh;
    ros::Publisher pub_ = nh.advertise("chatter", 1000);
    ros::Rate loop_rate(10);

    int count = 0;
    while (ros::ok())
    {
        std_msgs::String msg;
        std::stringstream ss;
        ss << "Hello ros!" << count;
        msg.data = ss.str();
        ROS_INFO("%s", msg.data.c_str());
        pub_.publish(msg);

        ros::spinOnce();

        loop_rate.sleep();
        ++count;
    }

    return 0;
}

        这段代码就是完成节点的发布。

(12) 和添加talker.cpp节点相同的步骤,添加listener.cpp节点,listener.cpp的代码如下:

#include 
#include 

void chatter_Callback(const std_msgs::StringConstPtr& msg)
{
    ROS_INFO("Listener has receive the message: %s", msg->data.c_str());
}

int main(int argc, char *argv[])
{
    ros::init(argc, argv, "listener");
    ros::NodeHandle nh;
    ros::Subscriber sub_ = nh.subscribe("chatter", 1000, &chatter_Callback);
    ros::spin();

    return 0;
}

         这段代码就是完成节点的订阅。

 (13)代码添加完成之后,需要修改CMakeLists.txt文件,主要代码如下(其余代码为注释部分,略过):

cmake_minimum_required(VERSION 2.8.3)
project(beginner_tutorials)

find_package(catkin REQUIRED COMPONENTS
  roscpp
)

include_directories(
# include
  ${catkin_INCLUDE_DIRS}
)

include_directories(include ${catkin_INCLUDE_DIRS})

add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
add_dependencies(talker beginner_tutorials_generate_messages_cpp)

add_executable(listener src/listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
add_dependencies(listener beginner_tutorials_generate_messages_cpp)

(14)选中qtros,右键点击Build进行编译,也可以选择左下角的小锤子进行编译(如果有多个ROS包,那么需要将要编译的工程设为Active Project,在Projects中进行设置);

(15)切换到Projects界面下,选中Build & Run下面的Desktop/Run,即Run Settings,如下图所示:

ROS与QT学习(二):qt_ros的初步使用_第12张图片

 (16)选择Add Run Step下面的ROS Run Step,在Arguments一栏填写beginner_tutorials talker,前面为包名,后面为节点名;或者直接在Package和Target下分别找到包名和节点,如下图所示:

ROS与QT学习(二):qt_ros的初步使用_第13张图片

        按照同样的方式添加listener节点,完成后如下图所示:

(17) 开启$ roscore;

(18)选中qtros,右键点击Run运行(或者左下角的绿色三角),便可以在ROS Terminals下看到两个节点运行的结果,如下图所示:

ROS与QT学习(二):qt_ros的初步使用_第14张图片

参考网址:

ubuntu16.04版本中QT的ros_qtc_plugin插件的例子

你可能感兴趣的:(ROS学习)