ROS Learning
  • 简介
  • Related Links
  • ROS Overview
  • ROS Env Configuration
    • Kinetic Installation
    • Noetic Installation
    • IDE & Tools Configuration
  • My Notes
    • Getting Start
    • ROS Concepts
      • ROS Topic 理论模型
      • ROS Service 理论模型
    • ROS Tutorials
      • ROS 文件系统 & 命令行工具
      • ROS Topic 通信简单示例
      • ROS Service 通信简单示例
      • ROS 参数服务器
      • ROS 分布式通信
    • Rotors Simulator
      • RotorS Simulator Installation
      • RotorS with virtual joystick
      • Rotors Simulator Usage
      • RotorS 分布式通信综合案例
  • ROS Official Docs
    • ROS Official Tutorials
      • Beginner Level
        • Installing and Configuring Your ROS Environment
        • Navigating the ROS Filesystem
        • Creating a ROS Package
        • Building a ROS Package
        • Understanding ROS Nodes
        • Understanding ROS Topics
        • Understanding ROS Services and Parameters
    • ROS Concepts
    • ROS Command Line Tools
  • ROS 2
    • Action
Powered by GitBook
On this page
  • 1 创建工作空间并初始化
  • 2 创建功能包并添加依赖
  • 3 编写源文件
  • 4 编辑功能包下的CMakelist.txt文件
  • 5 编译并执行
  • Reference
  1. My Notes

Getting Start

编写ROS的第一个程序,实现流程大致如下:

  1. 创建工作空间;

  2. 创建功能包;

  3. 编写源文件;

  4. 编辑配置文件;

  5. 编译、执行;

1 创建工作空间并初始化

创建含有src目录的工作空间,切换到工作空间下,catkin_make编译完成初始化:

# create workspace folder
mkdir -p WORKSPACE_NAME/src
# 切换到工作空间下
cd WORKSPACE_NAME/
# 编译 可以视为初始化工作空间
catkin_make

2 创建功能包并添加依赖

切换到工作空间的src目录下,使用catkin_create_pkg创建功能包并添加依赖:

# 切换到工作空间下的src
cd WORKSPACE_NAME/src
# 创建功能包
catkin_create_pkg PKG_NAME roscpp rospy std_msgs

该功能包添加的依赖为roscpp、rospy和std_msgs,roscpp表示使用C++实现的库,rospy表示使用Python实现的库,std_msgs为标准消息库。功能包通常都会依赖这三个库实现。

3 编写源文件

在ROS中,虽然实现同一功能时,C++和Python可以互换,但是具体选择哪种语言,需要视需求而定,因为两种语言相较而言:C++运行效率高但是编码效率低,而Python则反之,基于二者互补的特点,ROS设计者分别设计了roscpp与rospy库,前者旨在成为ROS的高性能库,而后者则一般用于对性能无要求的场景,旨在提高开发效率。

C++实现

使用vim创建并打开cpp文件:

# 在功能包的src目录下创建C++文件并打开
vim WORKSPACE_NAME/src/PKG_NAME/src/hello_world.cpp

编辑相关源代码:

#include <ros/ros.h>

int main(int argc, char *argv[]) {
	// ros node init
	// arg3 为 node 节点名
	ros::init(argc, argv, "hello_world_node");
	// print "hello world"
	ROS_INFO("hello world!");
	
	return 0;
}

Python实现

使用vim创建并打开python文件:

# 在功能包目录下创建scripts文件夹
mkdir WORKSPACE_NAME/src/PKG_NAME/scripts/
# 在功能包的scripts目录下创建C++文件并打开
vim WORKSPACE_NAME/src/PKG_NAME/scripts/hello_world.py

编辑相关源代码:

#! /usr/bin/env python

import rospy

if __name__ == "__main__":
    rospy.init_node("hello_world_node_py")
    rospy.loginfo("Hello World! --python")

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

chmod +x PYTHON_NAME.py

4 编辑功能包下的CMakelist.txt文件

C++

# hello_world 为可执行程序的名字,可随意命名,一般为源文件名去掉后缀
add_executable(hello_world_exe
	src/hello_world.cpp
)

# hello_world 为上面可执行程序的名字
target_link_libearies(hello_world_exe
	${catkin_LIBRARIES}
)

Python

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

5 编译并执行

切换进入工作空间,使用catkin_make编译

# 切换进入工作空间
cd WORKSPACE_NAME/
# 编译
catkin_make

执行,需要打开两个命令窗口:

第一个命令窗口,输入

# 启动 ROS Master 节点
roscore

再开一个窗口,输入

# 切换到工作空间下
cd WORKSPACE_NAME/
# 设置环境变量
source ./devel/setup.bash

# Cpp文件
# 启动 ROS 节点
# PKG_NAME 为功能包名
# CPP_NODE_NAME 为 ROS 节点名,即可执行程序的名字(hello_world)
rosrun PKG_NAME CPP_EXE_NAME

# 或 Python 文件
rosrun PKG_NAME PYTHON_NAME.py

输入完,回车就能在命令行看见输出:Hello World !

Tips :

source ~/工作空间/devel/setup.bash可以添加进.bashrc文件,使用上更方便

添加方式1 : 直接使用 gedit 或 vi 编辑 .bashrc 文件,最后添加该内容

添加方式2 : echo "source ~/工作空间/devel/setup.bash" >> ~/.bashrc

Reference

PreviousIDE & Tools ConfigurationNextROS Concepts

Last updated 2 years ago

1.3.1 HelloWorld实现简介 · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程