2021.7.24~7.30---2.5/9---通信机制实操、通信机制比较

实操01_话题发布

在这里插入图片描述

在这里插入图片描述

1.话题与消息获取

在这里插入图片描述

1.1话题获取

在这里插入图片描述

1.2消息获取

在这里插入图片描述

代码:

#include "ros/ros.h"
#include "geometry_msgs/Twist.h"
/*
需求:发布速度消息
话题:/turtle1/cmd_vel
消息:geometry_msgs/Twist

1.包含头文件
2.初始化ROS节点
3.创建节点句柄
4.创建发布者对象
5.发布逻辑
6.spinOnce();
*/
int main(int argc, char *argv[])
{
    //2.初始化ROS节点
    ros::init(argc,argv,"my_control");
    //3.创建节点句柄
    ros::NodeHandle nh;
    //4.创建发布者对象
    ros::Publisher pub  = nh.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",10);
    //5.发布逻辑
    ros::Rate rate(9);//设置发布频率
    //组织被发布的消息
    geometry_msgs::Twist twist;
    twist.linear.x = 1.0;
    twist.linear.y = 0.0;
    twist.linear.z = 0.0;
    twist.angular.x = 0.0;
    twist.angular.y = 0.0;
    twist.angular.z = 0.5;
    //循环发布
    while(ros::ok())
    {
        pub.publish(twist);
        //休眠
        rate.sleep();
        //回头
        //6.spinOnce();
        ros::spinOnce();
        
    }
    return 0;
}

实操02_话题订阅

在这里插入图片描述
在这里插入图片描述

1.话题与消息获取

在这里插入图片描述
在这里插入图片描述

2.实现订阅节点

在这里插入图片描述

代码:

#include "ros/ros.h"
#include "turtlesim/Pose.h"
/*
需求:订阅乌龟的位姿信息,并输出到控制台
1.包含头文件
2.初始化ROS节点
3.创建节点句柄
4.创建订阅对象
5.处理订阅到的数据(回调函数)
6.spin()
*/
void doPose(const turtlesim::Pose::ConstPtr &pose)
{
    ROS_INFO("乌龟的位姿信息:坐标(%.2f,%.2f),朝向(%.2f),线速度:%.2f,角速度:%.2f",
                            pose->x,pose->y,pose->theta,pose->linear_velocity,pose->angular_velocity);
}

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

实操03_服务调用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.服务名称与服务消息获取

在这里插入图片描述
在这里插入图片描述

2.服务客户端实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.运行

在这里插入图片描述

代码:

# include "ros/ros.h"
# include "turtlesim/Spawn.h"
/*
需求:发布速度消息
话题:/turtle1/cmd_vel
消息:geometry_msgs/Twist

1.包含头文件
2.初始化ROS节点
3.创建节点句柄
4.创建客户端对象
5.组织数据并发送
6.处理响应
*/
int main(int argc, char *argv[])
{
    setlocale(LC_ALL,"");
    // 2.初始化ROS节点
    ros::init(argc,argv,"service_call");
    // 3.创建节点句柄
    ros::NodeHandle nh;
    // 4.创建客户端对象
    ros::ServiceClient client=nh.serviceClient<turtlesim::Spawn>("/spawn");
    // 5.组织数据并发送
    //  5_1.组织数据并发送
    turtlesim::Spawn spawn;
    spawn.request.x=1.0;
    spawn.request.y=4.0;
    spawn.request.theta=1.57;
    spawn.request.name="turtle2";
    //  5_2.发送请求
    //判断服务器状态
    //ros::service::waitForService("/spawn");
    client.waitForExistence();
    bool flag = client.call(spawn);//flag接收响应状态,响应结果也会被设置进apwan对象
    // 6.处理响应    
    if(flag)
    {
        ROS_INFO("乌龟生成成功,新乌龟叫:%s",spawn.response.name.c_str());
    }
    else
    {
        ROS_INFO("请求失败!!!");
    }
    return 0;
}

实操04_参数设置

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1.参数名获取

在这里插入图片描述

2.参数修改

在这里插入图片描述
在这里插入图片描述

3.运行

在这里插入图片描述

4.其他设置方式

在这里插入图片描述
在这里插入图片描述

通信机制比较

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值