今天学习订阅这个话题的实现。我们要订阅这个话题是关于小海龟的位置信息。依旧是先运行roscore 。然后启动小海龟节点。输入rostopic list,查看当前小海龟启动后的对应的话题。 我们要订阅的话题就是/turtle1/pose。具体查看某个话题,比如查看改话题的发布者(Publishers)和订阅者(Subscribers)以及话题的类型(Type),用命令:rostopic info +某个话题。这里我们输入指令 :rostopic info /turtle1/pose
这个话题所包含是海龟的位置信息,我们可以输入指令查看里面的包含的数据类型。:
rosmsg show turtlesim/Pose
接下俩我们编写c++和python对应的程序。这里仍旧用的是古月居老师的例程。 具体c++代码:
#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();
}
python代码如下:
import rospy
from turtleim.msg import Pose
def poseCallback(msg):
rospy.loginfo("Turtle pose: x:%0.6f,y:%0.6f")
def pose_subcriber():
rospy.init_node('pose_subcriber',anonymous=True)
rospy.Subscriber("/turtle1/pose",Pose,poseCallback)
rospy.spin()
if __name__ == '__main__':
pose_subcriber()
运行c++程序时候我们仍然需要先往CMakelists.txt添加俩句指令:
add_executable(pose_subscriber src/pose_subscriber.cpp)
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})
所在路径如下图所示: 接下来切换回根文件夹,输入指令:catkin_make. 等待编译成功。接下来仍旧要是环境变量生效,但每次输入过于麻烦,所以可以让环境变量生效可以往/home/bathwind你的文件夹下的隐藏文件.bashrc文件。如下图所示。 在保存完之后重启终端窗口。输入指令rosrun learning_topic pose_subsiber 运行编译好的c++程序。 发现程序能够返回坐标,证明订阅话题的数据能够实现。
|