pdf文档 古月《ROS入门21讲》11.订阅者Subscriber的编程实现.pdf

1.00 MB 7 页 0 评论
语言 格式 评分
中文(简体)
.pdf
3
摘要
文档详细介绍了在ROS中实现订阅者的过程,包括初始化ROS节点、订阅话题、接收消息并在回调函数中处理。提供了C++和Python的代码示例,并说明了如何在CMakeLists.txt中配置编译规则。文档还展示了运行时的日志信息,用于验证订阅者的实现。
AI总结
《ROS入门21讲》第11讲主要介绍了ROS中订阅者(Subscriber)的编程实现,涵盖C++和Python两种语言的实现方式及相关配置。以下是核心内容的总结: ### 订阅者实现的基本步骤: 1. **初始化ROS节点**:创建ROS节点进入ROS网络。 2. **订阅话题**:指定要订阅的话题名称及消息类型。 3. **接收消息**:通过回调函数处理接收到的消息。 4. **循环等待**:保持节点运行,等待消息到达。 ### C++实现: #### 示例代码: ```cpp #include #include "turtlesim/Pose.h" void poseCallback(const turtlesim::Pose::ConstPtr& msg) { ROS_INFO("Turtle pose: x:%.6f,y:%.6f", msg->x, msg->y); } int main(int argc, char **argv) { // 初始化节点 ros::init(argc, argv, "pose_subscriber"); // 创建节点句柄 ros::NodeHandle nh; // 订阅/turtle1/pose话题,注册回调函数poseCallback ros::Subscriber pose_sub = nh.subscribe("/turtle1/pose", 10, poseCallback); // 循环等待回调函数 ros::spin(); return 0; } ``` #### 配置CMakeLists.txt: ```cmake add_executable(pose_subscriber src/pose_subscriber.cpp) target_link_libraries(pose_subscriber ${catkin_LIBRARIES}) ``` ### Python实现: #### 示例代码: ```python #!/usr/bin/env python # -*- coding: utf-8 -*- import rospy from turtlesim.msg import Pose def poseCallback(msg): rospy.loginfo("Turtle pose: x:%.6f,y:%.6f" % (msg.x, msg.y)) def pose_subscriber(): # 初始化节点 rospy.init_node('pose_subscriber', anonymous=True) # 订阅/turtle1/pose话题,注册回调函数poseCallback rospy.Subscriber("/turtle1/pose", Pose, poseCallback) # 循环等待回调函数 rospy.spin() if __name__ == '__main__': pose_subscriber() ``` ### 运行步骤: 1. 编译包:`cd ~/catkin_ws && catkin_make` 2. 启动ROS Master:`roscore` 3. 启动 turtlesim 节点:`rosrun turtlesim turtlesim_node` 4. 运行订阅者节点:`rosrun learning_topic pose_subscriber` ### 输出示例: ``` [INFO] [1562211557.465994963]: Turtle pose: x:0.326937,y:19.419487 [INFO] [1562211557.482173454]: Turtle pose: x:0.313333,y:16.421972 ``` ### 话题模型: - **话题名称**:`/turtle1/pose` - **消息类型**:`turtlesim::Pose` 通过以上步骤,可以实现一个基本的ROS订阅者节点,实时接收并处理发布者的消息。
P1
P2
P3
P4
P5
P6
P7
下载文档到本地,方便使用
文档评分
请文明评论,理性发言.