ROS1-基于python的简单实现过程记录

1. 前言

砚上三五笔,落墨鹧鸪啼

本文用于记录:ROS启动初级-中级-高级
如有不对,欢迎评论区指正!

2. 正文

2.1 创建环境+话题发布接收

摘要自博客

mkdir my_ws/src
cd my_ws
caikin_init_workspace
cd src
catkin_create_pkg topic_pkg rospy rosmsg roscpp # 创建功能包
cd topic_pkg
mkdir scripts # 存放脚本python文件
vim publisher.py
chmod +x publisher.py # 可执行文件的形式
vim subscriber.py
chmod +x subscriber.py # 可执行文件的形式
cd my_ws
catkin build topic_pkg -DPYTHON_EXECUTABLE/usr/bin/python3 # 编译
rosrun topic_pkg publisher.py # 包名 文件名

其中 publisher.py :

#! /sur/bin/env python
 
import rospy
from std_msgs.msg import String  #发布的消息类型
"""
    使用python实现消息发布:
    1.导包
    2.初始化ROS节点
    3.创建发布者对象
    4.编写发布逻辑并发布数据
"""
if __name__=="__main__":
 
    #2.初始化ROS节点
    rospy.init_node("publisher")
    #3.创建发布者对象
    pub = rospy.Publisher("topic-1",String,queue_size=10)
    #4.编写发布逻辑并发布数据
    msg = String()
    #指定发布频率
    rate = rospy.Rate(1)
    #设置计数器
    count = 0
    #使用循环发布数据
    while not rospy.is_shutdown():
        count += 1
        msg.data = "hello" + str(count)
        #发布数据
        pub.publish(msg)
        #日志输出
        rospy.loginfo("发布的数据是:%s",msg.data)
        #延迟一秒
        rate.sleep()

其中subscriber.py:

#! /sur/bin/env python
 
import rospy
from std_msgs.msg import String  #发布的消息类型
"""
    使用python实现消息订阅:
    1.导包
    2.初始化ROS节点
    3.创建订阅者对象
    4.编写回调函数处理数据
    5.spin()
"""
def doMsg(msg):
    rospy.loginfo("我订阅的数据:%s",msg.data)

if __name__=="__main__":

    #2.初始化ROS节点
    rospy.init_node("subscriber")
    #3.创建订阅者对象
    sub = rospy.Subscriber("topic-1",String,doMsg,queue_size=10)
    #4.编写回调函数处理数据
    #5.spin()
    rospy.spin()

2.2 创建launch文件

原因:launch文件相当于可以一次性启动包内的多个节点,或者不同包的节点

在pkg的下一级目录下新建launch文件夹,并新建topic_launch.launch文件,类型为xml

image

cd topic_pkg
mkdir launch
vim topic_launch.launch # 创建文件
chmod +x topic_launch.launch # 可执行文件
roslaunch topic_pkg topic_launch.launch # 运行代码

launch.launch文件的内容:

<launch>
    <node pkg="topic_pkg" name="Publisher" type="publisher.py" output="screen"/>
    <node pkg="topic_pkg" name="Subscriber" type="subscriber.py" output="screen"/>
</launch>

其中pkg为包名,name为随便名字,type为节点,output为控制条调试输出,不加即不进入调试状态,ns是命名空间,这里没写

3. 后记

To be continued.......

posted @ 2025-08-03 21:49  泪水下的笑靥  阅读(29)  评论(0)    收藏  举报