目录

一,创建工作空间(略)

(1)创建功能包

(2)在功能包文件夹里创建msg文件夹,将消息定义存储在msg目录下

二,话题通信——实现消息的发布与订阅

 (1)配置cmake和package相关文件

1.package.xml

2.cmakelists.txt

(2)publisher

1.创建python文件

2.编辑python文件

3.运行代码

(3)subscriber

1.创建python文件

2.编辑python文件

三,完成消息的发布与订阅

把消息发布与订阅封装成launch


一,创建工作空间(略)

(1)创建功能包

在catkin_ws的src文件夹中打开终端并输入以下指令
创建功能包并且添加依赖

catkin_create_pkg task_topic roscpp rospy std_msgs geometry_msgs

(2)在功能包文件夹里创建msg文件夹,将消息定义存储在msg目录下

定义一个字段来存储斐波那契数列的值

int32 value

二,话题通信——实现消息的发布与订阅

 (1)配置cmake和package相关文件

ros python 自定义service消息_开发语言

1.package.xml

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

ros python 自定义service消息_学习_02

2.cmakelists.txt

message_generation

ros python 自定义service消息_学习_03

xxx处修改成自己的文件名

add_message_files(FILES xxx.msg)
generate_messages(DEPENDENCIES std_msgs)

ros python 自定义service消息_开发语言_04

删除CATKIN_DEPENDS的注释并且添加下面的依赖

message_runtime

ros python 自定义service消息_开发语言_05

(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 所执行的基本操作:

  1. 配置构建环境catkin_make 首先确定构建环境,并为构建准备 CMake 配置。
  2. 处理消息、服务和动作定义:如果你的 ROS 包中定义了消息 (msg 文件)、服务 (srv 文件) 或动作 (action 文件),catkin_make 会自动生成必要的源代码文件 (例如 Python、C++ 等) 以便你在 ROS 节点中使用这些消息、服务和动作。
  3. 构建源代码catkin_make 会编译工作区中的所有 C++ 源代码,并确保它们正确地链接了所有必要的库。如果你的工作区中有 Python 代码,它通常不需要“编译”,但 catkin_make 会确保它们在合适的位置,以便在 ROS 环境中运行。
  4. 更改CMakeLists.txtpackage.xml:如果你修改了任何包的CMakeLists.txtpackage.xml,你应该执行catkin_make来确保所有更改都被正确地应用。
  5. 添加新的依赖或包:当你在工作区中添加新的包或新的依赖时,应该执行catkin_make

总的来说,catkin_make 是一个自动化的构建工具,用于处理 ROS 包的构建和安装过程,确保所有的代码、消息、服务和依赖都被正确地处理和编译。

rosrun task_topic task_topic_publishier.py

ros python 自定义service消息_python_06

 预期结果

(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

ros python 自定义service消息_python_07

把消息发布与订阅封装成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

ros python 自定义service消息_笔记_08

ros python 自定义service消息_笔记_09