目录
(2)在功能包文件夹里创建msg文件夹,将消息定义存储在msg目录下
一,创建工作空间(略)
(1)创建功能包
在catkin_ws的src文件夹中打开终端并输入以下指令
创建功能包并且添加依赖
catkin_create_pkg task_topic roscpp rospy std_msgs geometry_msgs
(2)在功能包文件夹里创建msg文件夹,将消息定义存储在msg目录下
定义一个字段来存储斐波那契数列的值
int32 value
二,话题通信——实现消息的发布与订阅
(1)配置cmake和package相关文件
1.package.xml
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
2.cmakelists.txt
message_generation
xxx处修改成自己的文件名
add_message_files(FILES xxx.msg)
generate_messages(DEPENDENCIES std_msgs)
删除CATKIN_DEPENDS的注释并且添加下面的依赖
message_runtime
(2)publisher
1.创建python文件
touch task_topic_publisher.py
小陷阱:如果你的Python脚本与包名同名,并且位于该包的某个子目录中,Python可能会混淆脚本和包,导致出现导入问题。考虑将脚本重命名或将它移动到一个与包名不同的目录下。
2.编辑python文件
根据自己文件的命名更改对应地点的名称就好了,注意大小写,注意python也需要catkin_make一下
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 该例程将发布/fibonacci_info话题,自定义消息类型task_topic::Fibonacci
import rospy
from task_topic.msg import Fibonacci
def fibonacci_publisher():
# ROS节点初始化
rospy.init_node('fibonacci_publisher', anonymous=True)
# 创建一个Publisher,发布名为/fibonacci_info的topic,消息类型为task_topic::Fibonacci,队列长度10
fibonacci_info_pub = rospy.Publisher('/fibonacci_info', Fibonacci, queue_size=10)
# 设置循环的频率
rate = rospy.Rate(10)
# 初始化数列的前两项
a, b = 0, 1
while not rospy.is_shutdown():
# 初始化task_topic::fibonacci类型的消息
fibonacci_msg=Fibonacci()
fibonacci_msg.data=b
# 发布消息
fibonacci_info_pub.publish(fibonacci_msg)
rospy.loginfo("Published fibonacci number: %d", b)
# 更新斐波那契数列中的数字
a, b = b, a + b
# 按照循环频率延时
rate.sleep()
if __name__ == '__main__':
try:
fibonacci_publisher()
except rospy.ROSInterruptException:
pass
3.运行代码
记得一定要给予python文件可执行权限
catkin_make
catkin_make 简介(建议有事没事跑代码时候都运行一下)
catkin_make
是 ROS 构建系统 catkin 的命令行工具,用于构建 ROS 包。当你在 ROS 工作区中运行 catkin_make
时,它会处理工作区中所有包的构建过程。以下是 catkin_make
所执行的基本操作:
-
配置构建环境:
catkin_make
首先确定构建环境,并为构建准备 CMake 配置。 -
处理消息、服务和动作定义:如果你的 ROS 包中定义了消息 (
msg
文件)、服务 (srv
文件) 或动作 (action
文件),catkin_make
会自动生成必要的源代码文件 (例如 Python、C++ 等) 以便你在 ROS 节点中使用这些消息、服务和动作。 -
构建源代码:
catkin_make
会编译工作区中的所有 C++ 源代码,并确保它们正确地链接了所有必要的库。如果你的工作区中有 Python 代码,它通常不需要“编译”,但catkin_make
会确保它们在合适的位置,以便在 ROS 环境中运行。 -
更改
CMakeLists.txt
或package.xml
:如果你修改了任何包的CMakeLists.txt
或package.xml
,你应该执行catkin_make
来确保所有更改都被正确地应用。 -
添加新的依赖或包:当你在工作区中添加新的包或新的依赖时,应该执行
catkin_make
。
总的来说,catkin_make
是一个自动化的构建工具,用于处理 ROS 包的构建和安装过程,确保所有的代码、消息、服务和依赖都被正确地处理和编译。
rosrun task_topic task_topic_publishier.py
预期结果
(3)subscriber
1.创建python文件
touch task_topic_subscriber.py
2.编辑python文件
根据自己文件的命名更改对应地点的名称就好了,注意大小写,注意python也需要catkin_make一下
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 该例程将订阅/person_info话题,自定义消息类型learning_topic::Person
import rospy
from task_topic.msg import Fibonacci
def fibonacciInfoCallback(msg):
rospy.loginfo("Subcribe fibonacci Number: %d",msg.data)
def fibonacci_subscriber():
# ROS节点初始化
rospy.init_node('fibonacci_subscriber', anonymous=True)
# 创建一个Subscriber,订阅名为/fibonacci_info的topic,注册回调函数fibonacciInfoCallback
rospy.Subscriber("/fibonacci_info", Fibonacci, fibonacciInfoCallback)
# 循环等待回调函数
rospy.spin()
if __name__ == '__main__':
fibonacci_subscriber()
三,完成消息的发布与订阅
rosrun task_topic task_topic_publishier.py
rosrun task_topic task_topic_subscriber.py
把消息发布与订阅封装成launch
<launch>
<node pkg="task_topic" type="task_topic_subscriber.py" name="subscriber"output="screen" />
<node pkg="task_topic" type="task_topic_publisher.py" name="publisher" output="screen" />
</launch>
catkin_make
roscore
roslaunch task_topic task_topic_7.launch