ROS话题、服务、动作(自定义)

本文详细介绍了如何在ROS环境中使用话题(Topic)、服务(Service)和动作(Action)进行消息传递。首先展示了如何自定义话题消息并编写发布者和订阅者的C++代码,然后阐述了服务的定义及客户端和服务端的实现,最后提到了动作的自定义和服务器、客户端的编写,所有示例都包含了详细的代码实现和运行流程。

一.话题消息自定义和使用

以一个例题为例演示

使用 ROS 话题(Topic) 机制实现消息发布与订阅

要求:编写代码实现 ROS 中消息的发布与订阅: 创建一个发布者,每隔 100ms 依次发送斐波拉契数列的数字到话题/fibonacci 中;创建一个订阅者,订阅该话题,输出订阅结果。如,订阅者依次输出: 1 1 2 3 5 8 ··

1.如何自定义话题消息

·定义msg文件

#发送到话题内的数字
int32 number

在工作空间homeworkws/src内的homeworkpkg功能包内创建文件夹msg,并在msg内创建文件number.msg文件,在把上面的文件内容复制进文件。

·在package.xml中添加动态生成message的功能包依赖

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

·在CMakeLists.txt添加编译选项

1.在findpacksge(…..)结尾添加messagegeneration

2.在写有关于message内容下面添加

add_message_files(
  FILES
  number1.msg
)
generate_messages(
  DEPENDENCIES
  std_msgs
)

·在catkinpackage(….)结尾添加messageruntime

·回到工作空间的根目录下编译生成相应的头文件

cd homework_ws
catkin_make

2.创建发布者和订阅者代码实现(C++)

在工作空间homeworkws/src内的homeworkpkg功能包src内创建文件编写代码

发布者

cd homework_ws/src/homework_pkg/src
touch number_publisher.cpp
vim number_publisher.cpp
i(进入编辑模式)
写代码
esc键
:wq!(强制保存退出)

具体代码

#include<ros/ros.h>
#include"homework_pkg/number1.h"
int f(int count) {
    if (count == 1 || count == 2) {
        return 1;
    }
    else {
        return f(count - 2) + f(count - 1);
    }
}
int main(int argc, char** argv) {
     setlocale(LC_ALL,"");
    //ROS节点初始化
    ros::init(argc, argv, "number_publisher");
    //创建节点句柄
    ros::NodeHandle n;
    //创建一个publisher,发布名为/fibonacci的topic,消息类型为std_msgs::Int32,队>列长度为10
    ros::Publisher fibonacci_pub = n.advertise<homework_pkg::number1>("/fibonacci", 100);
    //设置循环频率
    ros::Rate loop_rate(10);
    int count = 1;
  while (ros::ok()) {
        //初始化geometry_sgs::Twist类型消息
        homework_pkg::number1 msg;
        msg.number = f(count);
        //发布消息
        fibonacci_pub.publish(msg);
        ROS_INFO("%d",msg.number);
        //按循环频率延时
        loop_rate.sleep();
        count++;
    }
    return 0;
}

订阅者

touch number_subscriber.cpp
vim number_subscriber.cpp
i(进入编辑模式)
写代码
esc键
:wq!(强制保存退出)

具体代码

#include<ros/ros.h>
#include"homework_pkg/number1.h"
void poseCallback(const homew
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值