瑞芯微Rockchip开发者社区
直播中

jackhui

13年用户 1166经验值
私信 关注
[问答]

如何利用Subscriber编程去实现一个ROS订阅者呢

如何利用Subscriber编程去实现一个ROS订阅者呢?

回帖(1)

李天氍

2022-2-14 10:39:44
C++
编写程序
nano ~/catkin_workspace/src/learning_topic/src/pose_subscriber.cpp
/***********************************************************************
Copyright 2020 GuYueHome (www.guyuehome.com).
***********************************************************************/
/**
* 该例程将订阅/turtle1/pose话题,消息类型turtlesim::Pose
*/
#include
#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;
}
配置CMakeLists.txt
nano ~/catkin_workspace/src/learning_topic/CMakeLists.txt
在Build内,Install前加入
add_executable(pose_subscriber src/pose_subscriber.cpp)
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})


编译并运行发布者
cd ~/catkin_workspace
catkin_make
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
roscore
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rosrun turtlesim turtlesim_node
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rosrun learning_topic velocity_publisher
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rosrun learning_topic pose_subscriber
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rqt_graph



python
创建并编写脚本
nano ~/catkin_workspace/src/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()
运行
sudo chmod +x ~/catkin_workspace/src/learning_topic/scripts/pose_subscriber.py
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
roscore
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rosrun turtlesim turtlesim_node
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rosrun learning_topic velocity_publisher.py
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rosrun learning_topic pose_subscriber.py
# 新建一个终端
source ~/catkin_workspace/devel/setup.bash
rqt_graph

举报

更多回帖

发帖
×
20
完善资料,
赚取积分