HelloWorld 实现概述

ROS 编程主要使用 C++ 和 Python。大多数程序都可以用这两种语言实现。每篇教程都会同时演示 C++ 和 Python 的示例,方便用户选择最适合自己的实现方式。

ROS 中的整体实现流程在不同语言间是相似的。以 HelloWorld 程序为例,步骤如下:

  1. 创建工作空间。
  2. 创建功能包。
  3. 编辑源文件。
  4. 编辑配置文件。
  5. 编译并执行。

C++ 与 Python 之间的主要差异体现在第 3 步和第 4 步。下面分别介绍两种实现的通用步骤,并附有针对 C++ 和 Python 的具体说明。

HelloWorld(C++ 版)

  1. 创建并初始化工作空间

    bash
    mkdir -p <workspace_name>/src
    cd <workspace_name>
    catkin_make

    例如:

    bash
    mkdir -p seeed_ws/src
    cd seeed_ws
    catkin_make
  2. 创建 ROS 功能包并添加依赖

    bash
    cd src
    catkin_create_pkg <package_name> roscpp rospy std_msgs

    例如:

    bash
    cd src
    catkin_create_pkg hello_world roscpp rospy std_msgs
  3. 编辑源文件

    进入您功能包的 src 目录并创建一个新的 C++ 源文件(例如 hello.cpp):

    bash
    cd ~/<workspace_name>/src/<package_name>/src
    touch hello.cpp

    例如:

    bash
    cd ~/seeed_ws/src/hello_world/src
    touch hello.cpp

    将以下代码复制到 hello.cpp:

    cpp
    #include "ros/ros.h"
    
    int main(int argc, char *argv[])
    {
        ros::init(argc, argv, "hello");
        ros::NodeHandle n;
        ROS_INFO("Hello World!");
    
        return 0;
    }

    J3010

  4. 编辑 CMakeLists.txt

    在功能包的 CMakeLists.txt 末尾添加如下内容:

    cmake
    add_executable(<node_name> src/hello.cpp)
    target_link_libraries(<node_name> ${catkin_LIBRARIES})

    例如:

    cmake
    add_executable(hello src/hello.cpp)
    target_link_libraries(hello ${catkin_LIBRARIES})

    J3010

    J3010

    注意:这里所说的 CMakeLists.txt 文件位于已创建的功能包目录下,不是工作空间目录。

  5. 编译工作空间

    bash
    cd <workspace_name>
    catkin_make

    例如:

    bash
      cd ~/seeed_ws
      catkin_make
  6. 运行程序

    打开一个终端并启动 ROS core:

    bash
    roscore

    打开另一个终端,source 工作空间并运行节点:

    bash
    cd <workspace_name>
    source devel/setup.bash
    rosrun <package_name> hello

    例如:

    bash
    cd ~/seeed_ws
    source devel/setup.bash
    rosrun hello_world hello

    J3010

您应该会看到输出:Hello World!

HelloWorld(Python 版)

  1. 创建并初始化工作空间

    bash
    mkdir -p <workspace_name>/src
    cd <workspace_name>
    catkin_make

    例如:

    bash
    mkdir -p seeed_ws/src
    cd seeed_ws
    catkin_make
  2. 创建 ROS 功能包并添加依赖

    bash
    cd src
    catkin_create_pkg <package_name> roscpp rospy std_msgs

    例如:

    bash
    cd src
    catkin_create_pkg hello_world roscpp rospy std_msgs
  3. 添加 scripts 目录并创建 Python 文件

    进入您的功能包目录,创建一个 scripts 目录,以及一个新的 Python 文件(例如 hello.py):

    例如:

    bash
    mkdir ~/seeed_ws/src/hello_world/scripts
    cd ~/seeed_ws/src/hello_world/scripts
    touch hello.py
    python
    #!/usr/bin/env python
    
    import rospy
    
    if __name__ == "__main__":
        rospy.init_node("hello")
        rospy.loginfo("Hello World!")
  4. 添加可执行权限

    bash
    sudo chmod +x hello.py
  5. 编辑 CMakeLists.txt

    在功能包的 CMakeLists.txt 末尾添加如下内容:

    cmake
    catkin_install_python(PROGRAMS scripts/hello.py
      DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
    )

    J3010

  6. 编译工作空间

    bash
    cd <workspace_name>
    catkin_make

    例如:

    bash
    cd ~/seeed_ws
    catkin_make
  7. 运行程序 打开一个终端并启动 ROS core:

    bash
    roscore

    打开另一个终端,source 工作空间并运行节点:

    bash
    cd <workspace_name>
    source devel/setup.bash
    rosrun <package_name> hello.py

    例如:

    bash
    cd ~/seeed_ws
    source devel/setup.bash
    rosrun hello_world hello.py

    您应该会看到输出:Hello World!

注意

为了更方便地 source 工作空间的 setup 文件,可将其添加到 .bashrc:

bash
echo "source ~/<workspace_name>/devel/setup.bash" >> ~/.bashrc

这样每次打开新终端时都会自动 source 工作空间。