接上节,下面用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即可:
同样可以用键盘来控制小海龟的位置来测试小海龟的位置是否订阅成功:

&spm=1001.2101.3001.5002&articleId=148352559&d=1&t=3&u=a4bfce22fe7b44fa8cb0b99692f2a949)
7522

被折叠的 条评论
为什么被折叠?



