还是通过海龟仿真器去发布数据,要实现一个订阅者来订阅海龟的位置信息等,publisher是海龟仿真器,subcriber即为这次我们要实现的程序
数据传输为从publisher传向subscriber
一.创建订阅者代码(C++)
在learning_topic里src里创建cpp文件,即c++代码文件
如何实现一个订阅者
1.初始化ROS节点;
2.订阅需要的话题;
3.循环等待话题消息,接收到消息后进入回调函数(*);
(注意:回调函数处理需要高效,不可以嵌套,不可以太长,防止卡住一个消息,而另一个消息进来仍然无法处理)
4.在回调函数中完成消息处理
#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::init(argc, argv, "pose_subscriber");
ros::NodeHandle n;
ros::Subscriber pose_sub = n.subscribe("/turtle1/pose", 10, poseCallback);
ros::spin();
return 0;
}
第二步.配置订阅者代码编译规则
主目录/工作区间catkin_ws/src/learning_topic/ CMakeLists.txt
打开CMakeLists.txt,在build内,install前内容,在上次添加两句话后继续添加下两句话
add_executable(pose_subscriber src/pose_subscriber.cpp)
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})
第三步.编译并运行订阅者
cd ~/catkin_ws //回到工作空间根目录下
catkin_make //用该指令去做编译
source devel/setup.bash //设置环境变量,可通过下面方法减去该步骤,跳过
roscore
rosrun turtlesim turtlesim_node
rosrun learning_topic pose_subscriber //运行learning_topic里的一个节点,节点名为pose_subscriber,作用是实时显示海龟位置
回到工作空间, catkin_make编译
依次打开三个终端输入
roscore
rosrun turtlesim turtlesim_node
rosrun learning_topic pose_subscriber
可见不断在刷显示海龟的位置
启动键盘控制节点,让海归动起来,再次查看
对于python代码实现,首先将代码放与
主目录/catkin_ws/src/learning_topic/scripts/
同样查看权限✔
右击python文件/属性/权限/√允许作为程序执行文件点成
python文件代码
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():
rospy.init_node('pose_subscriber', anonymous=True)
rospy.Subscriber("/turtle1/pose", Pose, poseCallback)
rospy.spin()
if __name__ == '__main__':
pose_subscriber()
运行程序rosrun learning_topic pose_subscriber.py
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)