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

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

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

$ mkdir qtros_ws

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

$ qtcreator-ros

打开后的界面如下:

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

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

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

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

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

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

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

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

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

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

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

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

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

#include <ros/ros.h>
#include <std_msgs/String.h>
#include <sstream>

int main(int argc, char *argv[])
{
    ros::init(argc, argv, "talker");
    ros::NodeHandle nh;
    ros::Publisher pub_ = nh.advertise<std_msgs::String>("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 <ros/ros.h>
#include <std_msgs/String.h>

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
)

catkin_package()

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)

         经@Ricardo.h提醒,之前的代码少添加了catkin_package()这一句。没有这句,无法生成可执行文件。(感谢大佬指正。)

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

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

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

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

(17) 开启$ roscore;

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

参考网址:

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

  • 3
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值