可以做动图的视频网站,成都住建局官网登录入口查询,视频拍摄手法,广州白云住房和建设局网站目录
说明#xff1a;
1. 话题模型
图示
说明
2. 实现过程#xff08;C#xff09;
创建订阅者代码#xff08;C#xff09;
配置发布者代码编译规则
编译并运行
编译
运行
3. 实现过程#xff08;Python#xff09;
创建订阅者代码#xff08;Python…目录
说明
1. 话题模型
图示
说明
2. 实现过程C
创建订阅者代码C
配置发布者代码编译规则
编译并运行
编译
运行
3. 实现过程Python
创建订阅者代码Python
运行效果 说明
1. 本系列学习笔记基于B站古月居《ROS入门21讲》课程且使用的Ubuntu与ROS系统版本与课程完全一致
虚拟机版本Linux系统版本ROS系统版本VMware WorkStation Pro 16Ubuntu18.04Melodic
2. 课程中的所有示例代码均已跑通且对Pyhon版本的代码也都做了运行验证并附带验证过程错误均已修正
3. 本节是整个笔记的第9节对应视频课程的第11节请自行对应学习
4. 整个系列笔记基本已经完结但部分章节仍需润色修改 后面会陆续发布请大家持续关注 创作不易感谢支持 1. 话题模型
图示 说明
ROS Master管理所有节点
主要节点
Publisherturtlesim 消息的发布者后面会通过程序cpy实现发布者发布一个位置消息数据 Messageturtlesim::Pose 发布者发布的消息数据Pose为位置消息数据 Topic/turtle1/pose 消息传输管道将发布者发布的消息数据传输给订阅者
让SubscriberPose Listener订阅者得到这个消息数据 SubscriberPose Listener 消息的订阅者SubscriberPose Listener接收到通过
Topic/turtle1/pose传输来的消息数据Messageturtlesim::Pose。 2. 实现过程C
创建订阅者代码C
cd ~/catkin_ws/src/learning_topic/src
touch pose_subscriber.cpp 初始化ROS节点
订阅需要的话题
循环等待话题消息接收到消息后进入回调函数
在回调函数中完成消息处理。
/*** 该例程将订阅/turtle1/pose话题消息类型turtlesim::Pose*/#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节点ros::init(argc, argv, pose_subscriber);
// 创建节点句柄ros::NodeHandle n;
// 定义一个名为turtle_vel_pub的Subscriber订阅名为/turtle1/pose的topic注册回调函数poseCallbackros::Subscriber pose_sub n.subscribe(/turtle1/pose, 10, poseCallback);
// 循环等待回调函数ros::spin();
return 0;
} 第1步切换工作路径到~/catkin_ws/srclearning_topic/src目录下
第2步创建代码文件pose_subscriber.cpp
第3步复制代码到文件中并保存 配置发布者代码编译规则
将下面两行代码复制到CMakeLists.txt文件中
add_executable(pose_subscriber src/pose_subscriber.cpp)
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})
上面两行代码的作用
add_executable将pose_subscriber.cpp代码文件编译成(pose_subscriber可执行文件
target_link_libraries把编译生成的可执行文件pose_subscriber跟ROS相关的一些库做连接的比如调用的C的接口。
复制到CMakeLists.txt文件中的位置如下 编译并运行
编译
cd ~/catkin_ws
catkin_make 第一步先把工作路径切换到catkin_ws工作空间目录下
第二步在catkin_ws工作空间目录下catkin_make编译代码文件 运行
roscore
rosrun turtlesim turtlesim_node
rosrun learning_topic pose_subscriber 第一步打开ROS Master打开一个新终端输入roscore
第二步运行海龟仿真器再打开一个新终端输入rosrun turtlesim turtlesim_node
第三步运行我们编译好的可执行文件再打开一个新终端输入rosrun learning_topic pose_subscriber
这个程序会不断的发布海龟的当前位置xy坐标。 如果我们让海龟动起来就可以看到海龟当前位置的变化效果我们可以通过程序或者海龟的键盘控制节点让海龟动起来
下面为海龟的键盘控制节点方式
打开一个新终端输入rosrun turtlesim turtle_teleop_key 我们上面运行的可执行文件的位置在 home/catkin_ws/devel/lib/learning_topic 目录下 3. 实现过程Python
创建订阅者代码Python
cd ~/catkin_ws/src/learning_topic/scripts
touch pose_subscriber.py 第一步先把工作路径切换到~/catkin_ws/src/learning_topic/scripts目录下
第二步在scripts文件夹下创建pose_subscriber.py文件
第三步双击打开pose_subscriber.py文件复制代码到里面并保存
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 该例程将订阅/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, anonymousTrue)
# 创建一个Subscriber订阅名为/turtle1/pose的topic注册回调函数poseCallbackrospy.Subscriber(/turtle1/pose, Pose, poseCallback)
# 循环等待回调函数rospy.spin()
if __name__ __main__:pose_subscriber()
注意给pose_subscriber.py文件赋予作为程序文件执行的权限
点击pose_subscriber.py文件右键属性权限勾选允许作为程序文件执行
python文件不需要编译直接运行即可。 运行效果
运行pose_subscriber.py文件流程和上面一样
roscore
rosrun turtlesim turtlesim_node
rosrun learning_topic pose_subscriber.py