跳转至

Hello_ROS

本章节将使用Python编写简单的 ROS 程序,在控制台输出文本: Hello ROS

ROS程序的实现流程大致分为以下几个步骤:

  1. 创建工作空间并初始化
  2. 创建功能包
  3. 编写源文件
  4. 编辑配置文件(可选)
  5. 执行

创建工作空间并初始化

打开终端,输入一下内容:

1
2
3
mkdir -p <work-space>/src
cd <work-space>
catkin_make

上述命令,首先会创建一个工作空间以及一个 src 子目录,然后再进入工作空间调用 catkin_make命令编译。

image

创建功能包

进入 src 创建 ros 包并添加相关的依赖:

1
2
3
4
cd src
catkin_create_pkg <自定义ROS包名> <依赖包>

catkin_create_pkg test_ros roscpp rospy std_msgs

上述命令,会在工作空间下生成一个功能包,该功能包依赖于 roscpp、rospy 与 std_msgs,其中roscpp是使用C++实现的库,而rospy则是使用python实现的库,std_msgs是标准消息库,创建ROS功能包时,一般都会依赖这三个库实现。

image

编写源文件

进入 ros 包添加 scripts 目录

cd ros包
mkdir scripts

新建一个 python 文件,hello_ros.py​:

#! /usr/bin/env python
# -*- coding: utf-8 -*-  # 指定源码文件使用 UTF-8 编码(在 Python 3 中通常不是必须的)

# 导入 rospy 库,提供 ROS 节点初始化、日志输出、时间处理等功能
import rospy

# 主函数入口
if __name__ == "__main__":
    # 初始化一个 ROS 节点,节点名称为 "hello_ros_node"
    # 如果已有同名节点运行,默认会报错退出;可通过 anonymous=True 避免命名冲突
    rospy.init_node("hello_ros_node")

    # 输出日志信息,信息将显示在终端和 rqt_console 等日志工具中
    rospy.loginfo("Hello ROS")

为 python 文件添加可执行权限:

chmod +x hello_ros.py

以下是对代码的解释:

1️⃣ #!/usr/bin/env python

  • 作用:这是一行 Unix/Linux 下的环境声明(shebang)
  • 含义:告诉系统使用当前环境下的 Python 解释器来运行这个脚本。
  • ✅ 必须放在第一行,才能使该脚本被识别为一个“可执行”脚本。

2️⃣ import rospy

  • 作用:导入 ROS 的 Python 客户端库 rospy​。
  • 用途:它提供了编写 ROS 节点的全部 API,比如初始化节点、日志输出、发布/订阅话题等。

3️⃣ if __name__ == '__main__':

  • 作用:这是 Python 的一个惯用写法,表示“程序入口”。
  • 含义:只有当这个脚本被直接运行时(而不是作为模块被导入),才会执行后面的代码。
  • ✅ 保证你把这个脚本当作主程序运行时才初始化 ROS 节点。

4️⃣ rospy.init_node('hello_ros_node', anonymous=True)

  • 作用:初始化一个 ROS 节点,名字叫 hello_ros_node​。
  • 参数解释

  • 'hello_ros_node'​:这是节点的基础名称。

  • anonymous=True​:自动给节点名加一串随机后缀,防止命名冲突,适合调试用。
  • ✅ 初始化节点是编写任何 ROS 程序的第一步。

5️⃣ rospy.loginfo("Hello ROS")

  • 作用:使用 ROS 的日志系统在终端中输出一条“信息级别”的消息。
  • 输出方式:它不会直接用 print()​,而是通过 ROS 的日志管理系统输出,消息会显示节点名、时间戳等信息。
  • 终端效果示例:
[INFO] [1680000000.123456]: Hello ROS

执行

进入工作空间目录,先启动master节点:

cd test_ws
rosmaster

image

在打开另一个终端,输入:

1
2
3
source ./devel/setup.bash
rosrun test_ros hello_ros.py
# rosrun 包名 python源文件.py

image