ROS编程入门(C++ 及 思路)

使用Autolabor官方入门教程,笔记内容为注意事项

首页 – Autolabor开源ROS机器人底盘 – 官方网站


一. ROS通信机制的解释

例如在生活中,我们在家里有一个放零食的箱子,而操作服务器就是这个箱子,无论是使用者还是开发者都可以共同使用他。

  1. 话题通信是ROS中使用频率最高的一种通信模式,话题通信是基于 发布订阅模式的,也即:一个节点发布消息,另一个节点订阅该消息

雷达——->导航(计算)——–>底盘

在传递消息和传递运动控制指令时,就使用了话题通信,那么

雷达就是发布, 导航是订阅发布,底盘是订阅。

简单的三要素,发布 – 订阅 – 中间要素

ROS编程入门(C++ 及 思路)

角色—-> 流程 —-> 注意

(1)角色:

  1. master —–> 管理者(媒婆)

  2. talker ——>发布者 (男方)

  3. listner ——->订阅者 (女方)

(2)流程 :

master 可以根据话题 建立发布者和订阅者之间的连接

  1. 男方提交信息 (房,手机号) ——————发布者比订阅者信息多

  2. 女方提交信息 (房)

  3. 媒婆把男方电话发给女方

  4. 女方打电话给男方(房 连接)

  5. 男方响应(加微信/给微信)

  6. 女方加男方微信

(3)注意:

1.使用的协议由RPC和TCP;

2.步骤1和步骤0没有顺序关系

3.talker 和 listener可以存在多个

4.建立连接后,master就可以关闭了

5.上述流程已经封装,直接调用就好

—————————————————————————

我们要设置 发布 和 订阅方(分别进行)- (我们的实操部分只进行C++实现案例)

接下来 将从头开始一一介绍(VScode的配置请参照上面的链接进行修改,否则无法正常调试)

一 : 发布框架+发布逻辑

(2)添加包 (头文件)—第一次为文件名,第二次为我们添加的包(后面服务可作修改)

ROS编程入门(C++ 及 思路)

ROS编程入门(C++ 及 思路)

(4) 在 CmakeLists 里面修改参数 (映射名字和定义名字最好一样 )

修改下面两处

(1)

ROS编程入门(C++ 及 思路)

(2)

ROS编程入门(C++ 及 思路)

然后shift+ctrl+b调试看看有没出错

(2)修改 CmakeLists

与发布者相同,对比着上面修改一下名称即可

注意事项在所给的课件里面有提到

ROS编程入门(C++ 及 思路)

就可以查看了

(3)运行

roscore

ROS编程入门(C++ 及 思路)

ROS编程入门(C++ 及 思路)

ROS编程入门(C++ 及 思路)

接下来为详细操作:

(1)创建新的功能包

ROS编程入门(C++ 及 思路)

ROS编程入门(C++ 及 思路)

新建服务文件夹和文件( srv 与 Addints.srv

ROS编程入门(C++ 及 思路)

package 和 Cmakelist下更改配置

ROS编程入门(C++ 及 思路)

ROS编程入门(C++ 及 思路)

ROS编程入门(C++ 及 思路)

ROS编程入门(C++ 及 思路)

三 – 参数服务器

参数服务器实现是最为简单的,该模型如下图所示,该模型中涉及到三个角色:

  • ROS Master (管理者)
  • Talker (参数设置者)
  • Listener (参数调用者)

ROS Master 作为一个公共容器保存参数,Talker 可以向容器中设置参数,Listener 可以获取参数。

ROS编程入门(C++ 及 思路)

(直接再虚拟机上操作)

订阅乌龟位姿(话题订阅)

  1. 新建文件:test02_sub_pose

内容如下:

/*
    订阅小乌龟的位姿: 时时获取小乌龟在窗体中的坐标并打印
    准备工作:
        1.获取话题名称 /turtle1/pose
        2.获取消息类型 turtlesim/Pose
        3.运行前启动 turtlesim_node 与 turtle_teleop_key 节点

    实现流程:
        1.包含头文件
        2.初始化 ROS 节点
        3.创建 ROS 句柄
        4.创建订阅者对象
        5.回调函数处理订阅的数据
        6.spin
*/

#include "ros/ros.h"
#include "turtlesim/Pose.h"

void doPose(const turtlesim::Pose::ConstPtr& p){
    ROS_INFO("乌龟位姿信息:x=%.2f,y=%.2f,theta=%.2f,lv=%.2f,av=%.2f",
        p->x,p->y,p->theta,p->linear_velocity,p->angular_velocity
    );
}

int main(int argc, char *argv[])
{
    setlocale(LC_ALL,"");
    // 2.初始化 ROS 节点
    ros::init(argc,argv,"sub_pose");
    // 3.创建 ROS 句柄
    ros::NodeHandle nh;
    // 4.创建订阅者对象
    ros::Subscriber sub = nh.subscribe("/turtle1/pose",1000,doPose);
    // 5.回调函数处理订阅的数据
    // 6.spin
    ros::spin();
    return 0;
}

再次配置CMakeList

ROS编程入门(C++ 及 思路)

Original: https://blog.csdn.net/ArtoriaLili/article/details/125162278
Author: ArtoriaLili
Title: ROS编程入门(C++ 及 思路)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/813956/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球