ROS1.5 客户端Client的编程实现

1.5.1 服务模型(客户端/服务器)

 Client客户端发布产生海龟的请求

Server端收到请求后会产生一个新的海龟 并且给客户端一个反馈

spawn :产卵。。。。。。

turtle_spawn是turtlesim中定义的数据结构

1.5.2首先我们先创建一个新的功能包,取名为learning_service

cd ~/catkin_ws/src
catkin_create_pkg learning_service roscpp rospy std_msgs geometry_msgs turtlesim

1.5.3 编写C++源文件

 

/**
 * 该例程将请求/spawn服务,服务数据类型turtlesim::Spawn
 */

#include <ros/ros.h>
#include <turtlesim/Spawn.h>

int main(int argc, char** argv)
{
    // 初始化ROS节点  并命名节点名"turtle_spawn"
    ros::init(argc, argv, "turtle_spawn");

    // 创建节点句柄
    ros::NodeHandle node;


    //在等待“/spawn”服务在 ROS 网络中变得可用之前暂停程序执行。
    //waitForService 是一个函数,允许节点等待指定的服务变得可用。在这种情况下,等待的服务名为“/spawn“ 如果没有这个服务 那么系统就会处于等待阶段
    ros::service::waitForService("/spawn");
    //发现/spawn服务后,创建一个服务客户端,连接名为/spawn的service
    ros::ServiceClient add_turtle = node.serviceClient<turtlesim::Spawn>("/spawn");
    /**创建了一个名为 add_turtle 的 ROS 服务客户端,
     * 用于请求生成一个新的 turtlesim 海龟。
     * 在这个客户端中,服务请求的消息类型是 turtlesim::Spawn,服务的名称是 "/spawn"。
     */

    // 初始化turtlesim::Spawn的请求数据
    turtlesim::Spawn srv;
    srv.request.x = 2.0;
    srv.request.y = 2.0;
    srv.request.name = "turtle2";

    turtlesim::Spawn srv3;
    srv3.request.x = 3.0;
    srv3.request.y = 3.0;
    srv3.request.name = "turtle3";

    // 请求服务调用
    ROS_INFO("Call service to spwan turtle[x:%0.6f, y:%0.6f, name:%s]",
             srv.request.x, srv.request.y, srv.request.name.c_str());//表示保留小数点后6位
    ROS_INFO("Call service to spwan turtle[x:%0.6f, y:%0.6f, name:%s]",
             srv3.request.x, srv3.request.y, srv3.request.name.c_str());

    add_turtle.call(srv);//客户端请求发送给服务器,然后就等待服务器的反馈
    add_turtle.call(srv3);

    // 显示服务调用结果
    ROS_INFO("Spwan turtle successfully [name:%s]", srv.response.name.c_str());
    ROS_INFO("Spwan turtle successfully [name:%s]", srv3.response.name.c_str());

    return 0;
};

1.5.4配置客户端代码编译规则

在CMake中,add_executable是一个命令,用于创建一个可执行文件。它的第一个参数是可执行文件的名称,而后面的参数是与该可执行文件相关联的源代码文件。

1.5.5编译客户端

cd ~/catkin_ws
catkin_make
source devel/setup.bash
roscore
rosrun turtlesim turtlesim_node
rosrun learning_service turtle_spawn

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值