HelloWorld 实现概述
ROS 编程主要使用 C++ 和 Python。大多数程序都可以用这两种语言实现。每篇教程都会同时演示 C++ 和 Python 的示例,方便用户选择最适合自己的实现方式。
ROS 中的整体实现流程在不同语言间是相似的。以 HelloWorld 程序为例,步骤如下:
- 创建工作空间。
- 创建功能包。
- 编辑源文件。
- 编辑配置文件。
- 编译并执行。
C++ 与 Python 之间的主要差异体现在第 3 步和第 4 步。下面分别介绍两种实现的通用步骤,并附有针对 C++ 和 Python 的具体说明。
HelloWorld(C++ 版)
-
创建并初始化工作空间
bashmkdir -p <workspace_name>/src cd <workspace_name> catkin_make例如:
bashmkdir -p seeed_ws/src cd seeed_ws catkin_make -
创建 ROS 功能包并添加依赖
bashcd src catkin_create_pkg <package_name> roscpp rospy std_msgs例如:
bashcd src catkin_create_pkg hello_world roscpp rospy std_msgs -
编辑源文件
进入您功能包的
src目录并创建一个新的 C++ 源文件(例如hello.cpp):bashcd ~/<workspace_name>/src/<package_name>/src touch hello.cpp例如:
bashcd ~/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; } -
编辑
CMakeLists.txt在功能包的
CMakeLists.txt末尾添加如下内容:cmakeadd_executable(<node_name> src/hello.cpp) target_link_libraries(<node_name> ${catkin_LIBRARIES})例如:
cmakeadd_executable(hello src/hello.cpp) target_link_libraries(hello ${catkin_LIBRARIES})注意:这里所说的
CMakeLists.txt文件位于已创建的功能包目录下,不是工作空间目录。 -
编译工作空间
bashcd <workspace_name> catkin_make例如:
bashcd ~/seeed_ws catkin_make -
运行程序
打开一个终端并启动 ROS core:
bashroscore打开另一个终端,source 工作空间并运行节点:
bashcd <workspace_name> source devel/setup.bash rosrun <package_name> hello例如:
bashcd ~/seeed_ws source devel/setup.bash rosrun hello_world hello
您应该会看到输出:Hello World!
HelloWorld(Python 版)
-
创建并初始化工作空间
bashmkdir -p <workspace_name>/src cd <workspace_name> catkin_make例如:
bashmkdir -p seeed_ws/src cd seeed_ws catkin_make -
创建 ROS 功能包并添加依赖
bashcd src catkin_create_pkg <package_name> roscpp rospy std_msgs例如:
bashcd src catkin_create_pkg hello_world roscpp rospy std_msgs -
添加
scripts目录并创建 Python 文件进入您的功能包目录,创建一个
scripts目录,以及一个新的 Python 文件(例如hello.py):例如:
bashmkdir ~/seeed_ws/src/hello_world/scripts cd ~/seeed_ws/src/hello_world/scripts touch hello.pypython#!/usr/bin/env python import rospy if __name__ == "__main__": rospy.init_node("hello") rospy.loginfo("Hello World!") -
添加可执行权限
bashsudo chmod +x hello.py -
编辑
CMakeLists.txt在功能包的
CMakeLists.txt末尾添加如下内容:cmakecatkin_install_python(PROGRAMS scripts/hello.py DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} ) -
编译工作空间
bashcd <workspace_name> catkin_make例如:
bashcd ~/seeed_ws catkin_make -
运行程序 打开一个终端并启动 ROS core:
bashroscore打开另一个终端,source 工作空间并运行节点:
bashcd <workspace_name> source devel/setup.bash rosrun <package_name> hello.py例如:
bashcd ~/seeed_ws source devel/setup.bash rosrun hello_world hello.py您应该会看到输出:
Hello World!
注意
为了更方便地 source 工作空间的 setup 文件,可将其添加到 .bashrc:
echo "source ~/<workspace_name>/devel/setup.bash" >> ~/.bashrc这样每次打开新终端时都会自动 source 工作空间。