ROS笔记2——订阅者subscriber的编程实现(c++实现和python实现)

接上节,下面用c++和python分别来实现对于小海龟位置的订阅

1、c++实现

首先在上节所创建的功能包learning_topic的src文件夹中创建pose_subscriber.cpp文件如下:

/***********************************************************************
Copyright 2020 GuYueHome (www.guyuehome.com).
***********************************************************************/

/**
 * 该例程将订阅/turtle1/pose话题,消息类型turtlesim::Pose
 */
 
#include <ros/ros.h>
#include "turtlesim/Pose.h"

// 接收到订阅的消息后,会进入消息回调函数
void poseCallback(const turtlesim::Pose::ConstPtr& msg)
{
    // 将接收到的消息打印出来
    ROS_INFO("Turtle pose: x:%0.6f, y:%0.6f", msg->x, msg->y);
}

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

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

    // 创建一个Subscriber,订阅名为/turtle1/pose的topic,注册回调函数poseCallback
    ros::Subscriber pose_sub = n.subscribe("/turtle1/pose", 10, poseCallback);

    // 循环等待回调函数
    ros::spin();

    return 0;
}

然后配置Publisher代码编译规则,设置需要编译的代码和生成的可执行文件和链接库,具体操作如下:

修改learning_topic文件夹下的CMakeLists.txt,在如下位置添加

接着在工作空间catkin_ws文件夹下打开终端编译工作空间:

显示如下界面则为编译成功

经过上一节的设置在此不需要再激活环境变量,若未按照上一节进行设置需运行“source ./devel/setup.bash”来激活环境变量。

然后新建终端启动roscroe(在节点运行之前要先确保Ros Master已经成功启动)

新建终端启动小海龟:

接着启动subscriber即可:

因为此时小海龟不动所以位置信息不发生变化,可以新建终端运行以下命令来使用键盘控制小海龟运动:

此时通过键盘控制小海龟运动时,可以看到上一终端中小海龟的位置信息在同步发生变化:

此时消息订阅成功。

2、python实现

同样的,python代码文件是放在功能包文件夹下的scripts目录下的,故在learning_topic文件夹下的scripts文件夹中创建pose_subscriber.py文件:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

########################################################################
####          Copyright 2020 GuYueHome (www.guyuehome.com).          ###
########################################################################

# 该例程将订阅/turtle1/pose话题,消息类型turtlesim::Pose

import rospy
from turtlesim.msg import Pose

def poseCallback(msg):
    rospy.loginfo("Turtle pose: x:%0.6f, y:%0.6f", msg.x, msg.y)

def pose_subscriber():
	# ROS节点初始化
    rospy.init_node('pose_subscriber', anonymous=True)

	# 创建一个Subscriber,订阅名为/turtle1/pose的topic,注册回调函数poseCallback
    rospy.Subscriber("/turtle1/pose", Pose, poseCallback)

	# 循环等待回调函数
    rospy.spin()

if __name__ == '__main__':
    pose_subscriber()


然后配置Publisher代码编译规则,设置需要编译的代码和生成的可执行文件和链接库,具体操作如下:

修改learning_topic文件夹下的CMakeLists.txt,在如下位置添加:

然后返回工作空间目录下新建终端编译工作空间:

新建终端启动小海龟:

接着启动subscriber即可:

同样可以用键盘来控制小海龟的位置来测试小海龟的位置是否订阅成功:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值