古月居 ROS入门21讲 第十一讲 订阅者Subscriber的编程实现
- C++
pose_subscriber.cpp
#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;
}
vim src/learning_topic/CMakeLists.txt
在CMakelists.txt中添加
add_executable(pose_subscriber src/pose_subscriber.cpp)
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})
编译
cd ~/catkin_ws/
source devel/setup.bash
catkin_make
运行
roscore
rosrun turtlesim turtlesim_node
rosrun learning_topic pose_subscriber
- Python
#!/usr/bin/env 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()
运行
roscore
rosrun turtlesim turtlesim_node
rosrun learning_topic pose_subscriber.py