功能介绍
完成一个节点发布消息,另一个节点接收前一个节点发布的消息
1、工作空间
1.1 创建工作空间lee_ws
mkdir -p ~/lee_ws/src
cd ~/lee_ws/src/
catkin_init_workspace
cd ~/lee_ws/
catkin_make
echo "source ~/lee_ws/devel/setup.bash" >> ~/.bashrc
source devel/setup.bash
1.2 创建功能包lee
cd ~/lee_ws/src
catkin_create_pkg lee std_msgs rospy roscpp
cd ~/lee_ws/
catkin_make
source ~/lee_ws/devel/setup.bash
1.3 VScode编辑ros参数配置
快捷键 ctrl + shift + B 调用编译,选择:catkin_make:build这一行,点击小齿轮配置设置,修改.vscode/tasks.json 文件,将下面复制进去即可
这么配置的原因:下一次快捷键 ctrl + shift + B直接进行代码编译
路径:.vscode/tasks.json
{
"version": "2.0.0",
"tasks": [
{
//代表提示的描述性信息
"label": "catkin_make:debug",
//可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
"type": "shell",
//这个是我们需要运行的命令
"command": "catkin_make",
"args": [],
"group": {"kind":"build","isDefault":true},
//可选always或者silence,代表是否输出信息
"presentation": {"reveal": "always"},
"problemMatcher": "$msCompile"
}
]
}
2、发布者代码 Python
路径: /home/lee/lee_ws/src/lee/scripts/lee_sub.py
2.1 代码部分
#! /usr/bin/env python
# coding=utf-8
import rospy
from std_msgs.msg import String
if __name__ == "__main__":
#初始化 ROS 节点:命名(唯一)
rospy.init_node("lee_pub")
#创建一个Publisher,发布名为chatter的topic,消息类型为String
pub = rospy.Publisher("chatter",String,queue_size=10)
#等待3秒钟,让publisher有足够的时间完成roscore注册,不然还未注册成功就开始发送消息了
rospy.sleep(3)
#组织发布的数据
msg = String() #创建 msg 对象
msg_Basics = "数字:"
count = 0 #计数器
#设置循环频率,1秒3次
rate = rospy.Rate(3)
#节点存在,is_shutdown()为1
while not rospy.is_shutdown():
#拼接字符串
msg.data = msg_Basics + str(count)
#发布消息
pub.publish(msg)
#终端打印发布的消息
rospy.loginfo("发布的数据为:%s",msg.data)
#延时
rate.sleep()
count += 1
2.2 CMakeLists.txt部分
在install下面直接添加如下代码即可
catkin_install_python(PROGRAMS scripts/lee_pub.py DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
3、订阅者代码 Python
路径: /home/lee/lee_ws/src/lee/scripts/lee_sub.py
3.1 代码部分
#! /usr/bin/env python
# coding=utf-8
import rospy
from std_msgs.msg import String
#接收到订阅的消息后,进入回调函数
def chatterCallback(msg):
rospy.loginfo("接收到了:%s",msg.data)
if __name__ == "__main__":
#初始化 ROS 节点:命名(唯一)
rospy.init_node("lee_sub")
#创建一个Subscriber,订阅名为chatter的topic,注册回调函数为chatterCallback
sub = rospy.Subscriber("chatter",String,chatterCallback,queue_size=10)
#设置循环调用回调函数
rospy.spin()
3.2 CMakeLists.txt部分
在install上面直接添加如下代码即可
catkin_install_python(PROGRAMS scripts/lee_sub.py DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
4、代码测试
4.1 启动rosmaster
roscore
4.2 启动 lee_pub 节点
rosrun lee lee_pub.py
4.3 启动 lee_sub 节点
rosrun lee lee_sub.py