ROS入门2总结:ROS-TOPIC的Publisher和Subscriber的实现
前言
感谢古月居大大的教程:https://www.bilibili.com/video/BV1zt411G7Vn?p=2&spm_id_from=pageDriver
强推古月大大:课件、源码下载方式:关注“古月居”微信公众号,回复“ROS入门21讲”获取;
线上提问/课程答疑:请移步古月居论坛,点击相关板块发帖提问即可。🔗:https://www.guyuehome.com/forums
关于ROS-topic
ros的topic是一种通信方式,类似于一种异步通信,发送者视为publisher(发布者),接受者视为subscriber(订阅者),中间存在topic,是连接两者的中间。偷图古月大大:
topic的Publisher和Subscriber的实现相当于使用中间节点截取双方的信息显示出来
准备
创建工作空间learning_topic,功能包的创建是在工作空间的src文件夹下:
进入catkin_wksp工作空间的srcwe文件夹
cd src/
创建一个名为learning_topic的功能包文件夹
catkin_creat_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim
运行之后会出现一个learning_topic功能包文件夹
pblisher的实现
publisher代码总结:
第一步:初始化ros节点;
第二步:向ROS master注册节点信息,包括发布的话题名和话题中的消息类型;
第三步:循环等待话题消息,如果收到消息就进入到回调函数
第四步:处理回调函数的相关功能
将程序文件放入新建的功能包的src文件夹里
课程代码来源为古月居大大,文件名是velocity_publisher.cpp,同样也有.py文件(大家可以关注一下古月居大大获取,强推)
这个文件主要是控制turtle运动的,设置的运动速度是0.5,角速度为0.2
对velocity_publisher文件进行编译
配置CMakeLists.txt文件
打开learning_topic路径下的CMakeLists.txt文件,在build功能代码底部添加
add executable(velocity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})
如图
编译velocity_publisher.cpp
编译还是在工程文件夹的路进行进行相关的编译,也就是catkin_wksp文件夹下,也就是放置功能包的src文件夹夹
cd catkin_wksp/
编译
catkin_make
每次进行发布者或者订阅者需要source一下路径
source devel/setup.bash
为了避免麻烦,可以将上面的命令添加到主目录文件夹下的.bashrc文件里,一定要注意改路径这是我的
比如添加进去后就是
source /home/linder/桌面/catkin_wksp/devel/setup.bash
重启终端才会生效
publisher实现的功能
首先运行roscore
roscore
如果运行不了大部分就是环境变量的问题,大家可以上网找找资料,看看具体使用什么样的环境变量配置。
运行小乌龟
需要重新打开一个终端
输入
rosrun turtlesim turtle_node
如果提示找不到文件就再source一下,输入:
source /opt/ros/noetic/setup.bash
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrcsource ~/.bashrc
rosrun turtlesim turtlesim_node
这儿我需要自己手动配置环境变量才能成功,,,,
运行src里面的发布者代码
rosrun learning_topic velocity_publisher
我的得进入到工作空间所在的文件夹catkin_wksp下再source一下才能运行publisher
cd catkin_wksp
source devel/setup.bash
rosrun learning_topic velocity_publisher
这儿没有调出控制小乌龟的键盘,是通过publisher发布velocity_publisher代码到topic进行相关的操控
点击回车以后,小乌龟会像代码中以X方向速度0.5角速度0.2进行画圆
点击 CTRL+C 停止
到这publisher的功能差不多结束了,就是实现发布者向话题发布一个发布者代码,话题接收后小乌龟会进行相应的运动
subscriber的实现
subscriber代码总结:
第一步:初始化ros节点;
第二步:订阅需要的话题;
第三步:循环等待话题消息,如果收到消息就进入到回调函数
第四步:处理回调函数的相关功能
将程序文件放入新建的功能包的src文件夹里
课程代码来源为古月居大大,文件名是pose_subscriber.cpp,同样也有.py文件(大家可以关注一下古月居大大获取,强推)
这个文件主要获取小乌龟运动时的位置信息,并输出
对pose_subscriber文件进行编译
配置CMakeLists.txt文件
打开learning_topic路径下的CMakeLists.txt文件,在build功能代码底部添加
add executable(pose_subscribersrc/pose_subscriber.cpp)
target_link_libraries(pose_subscriber${catkin_LIBRARIES})
如图
编译velocity_publisher.cpp
编译还是在工程文件夹的路进行进行相关的编译,也就是catkin_wksp文件夹下,也就是放置功能包的src文件夹夹
cd catkin_wksp/
编译
catkin_make
source一下路径我的不是自动的,我得source
source devel/setup.bash
publisher实现的功能
首先运行roscore
只能运行一个roscore,上一个roscore没关的话得关了,用 CTRL+C
roscore
如果运行不了大部分就是环境变量的问题,大家可以上网找找资料,看看具体使用什么样的环境变量配置。
运行小乌龟
需要重新打开一个终端
输入
rosrun turtlesim turtle_node
如果提示找不到文件就再source一下,输入:
source /opt/ros/noetic/setup.bash
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrcsource ~/.bashrc
rosrun turtlesim turtlesim_node
运行src里面的订阅者代码
rosrun learning_topic pose_subscriber
我的得进入到工作空间所在的文件夹catkin_wksp下再source一下才能运行publisher
cd catkin_wksp
source devel/setup.bash
rosrun learning_topic pose_subscriber
可以调出控制小乌龟的键盘(打开新终端),也可用publisher发布
程序原理是通过subscriber订阅pose_subscriber代码到topic进行相关的操控
点击回车以后,小乌龟的位置会显示出来
用键盘控制小乌龟运动,可以发现位置信息在变
点击 CTRL+C 停止