ROS学习之路之发布订阅通信(一)

学习目标:

①改写CMakeLists.txt文件

②实现ROS发布订阅通信

③了解Qt IDE使用

④ROS程序运行

总目标:

选择一款机械臂集成 ROS2通讯

预计2024年2月10日前完成

首先ROS是有官网教程的:http://wiki.ros.org/cn/ROS/Tutorials

写该系列文章一是记录学习过程,二是希望对自学ROS的初学者有一点儿帮助。

使用ROS1作为学习起点,最终的课程作业是使用ROS2集成auboi5功能。

需要对linux有一定的基础知识。

系统虚拟机搭建参见遨博学院:遨博学院

对Qt使用几乎无要求,之所以选择Qt加载CMakeLists.txt,是因为之前使用Qt比较多,而且Qt还可以对ros函数跳转。

环境平台:ubuntu 18.04

ROS版本:melodic (rosversion -d查看)

Qt版本:qt-opensource-linux-x64-5.12.9

cmake version 3.10.2

1、创建ros包

新建一个工作文件夹,在文件夹内再创建一个src文件夹,之后

catkin_create_pkg talker std_msgs roscpp

253d16d9e2ca194ae270140f37854139.jpeg

2、Copy发布订阅程序

将listener.cpp和talker.cpp复制到talker/src下

talker.cpp:

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


//This tutorial demonstrates simple sending of messages over the ROS system.
int main(int argc, char **argv)
{
    ros::init(argc, argv, "talker");
    ros::NodeHandle n;
    ros::Publisher chatter_pub = n.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 world " << count;
        msg.data = ss.str();


        ROS_INFO("%s", msg.data.c_str());


        chatter_pub.publish(msg);


        ros::spinOnce();


        loop_rate.sleep();
        ++count;
    }


    return 0;
}

listener.cpp:

#include "ros/ros.h"
   #include "std_msgs/String.h"


   /**
    * This tutorial demonstrates simple receipt of messages over the ROS system.
    */
   void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
     ROS_INFO("I heard: [%s]", msg->data.c_str());
   }


   int main(int argc, char **argv)
{
     ros::init(argc, argv, "listener");


     ros::NodeHandle n;


     ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);


     ros::spin();


     return 0;
   }

3、修改CMakeLists.txt文件

在src/talker下的CMakeLists.txt project(talker)后添加:

#设置find_package的.cmake搜索路径
set(CMAKE_PREFIX_PATH /opt/ros/melodic/)
#编译后文件识别为可执行程序而不是库
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -no-pie")


在CMakeLists.txt最后添加:
add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})


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

4、使用Qt 打开CMakeLists.txt

90335c4bd9f1847757f3219cce6d89d5.jpeg

配置完成后的效果:

613613969e030939ca7b632c700edd8a.jpeg

美中不足的是,还没找到Qt打开CMakeLists.txt的多核编译设置。

5、运行listener和talker

①可执行程序位置:

/home/auboros/my_workspace/test/article/first/src/build-talker-Desktop_Qt_5_12_9_GCC_64bit-Release/devel/lib/talker

②打开一个终端设置ros环境并运行roscore

13394b88703862dfddd800e81a595494.jpeg

③再打开一个终端运行可执行程序listener

2ca2c695c7b30b83ac0e37ced0f3f8c1.jpeg

④再打开一个终端运行talker

4b400e30ed3ecdabb842209921326de6.jpeg

代码含义不进行解释,可以自行百度。

可能是全网最简洁的ros发布订阅程序。

欢迎关注公众号,后续追更不迷路~

1cdc06b358e7c237a187f9e8fdeaaa9f.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值