前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ROS学习之路之发布订阅通信(一)

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

作者头像
用户5908113
发布2023-11-17 16:54:35
1830
发布2023-11-17 16:54:35
举报
文章被收录于专栏:Pou光明Pou光明

学习目标:

①改写CMakeLists.txt文件

②实现ROS发布订阅通信

③了解Qt IDE使用

④ROS程序运行

总目标:

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

预计2024年2月10日前完成

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

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

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

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

系统虚拟机搭建参见遨博学院:https://blog.csdn.net/aubo_academy/article/details/123181287

对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文件夹,之后

代码语言:javascript
复制
catkin_create_pkg talker std_msgs roscpp

2、Copy发布订阅程序

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

talker.cpp:

代码语言:javascript
复制
#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:

代码语言:javascript
复制
#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)后添加:

代码语言:javascript
复制
#设置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

配置完成后的效果:

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

5、运行listener和talker

①可执行程序位置:

代码语言:javascript
复制
/home/auboros/my_workspace/test/article/first/src/build-talker-Desktop_Qt_5_12_9_GCC_64bit-Release/devel/lib/talker

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

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

④再打开一个终端运行talker

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Pou光明 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档