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

2023-11-17 16:54:35 浏览数 (2)

学习目标:

①改写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发布订阅程序。

0 人点赞