ROS入门第一个程序-Hello, World!

目录

  • 1、ROS安装
  • 2、创建工作区
  • 3. 编写代码
  • 4. 编译hello程序
  • 5. 编译工作区
  • 6.设置环境变量setup.bash
  • 7. 执行hello程序

1、ROS安装

(1)参考网站(点击此处)安装ros.

(2)测试ros是否成功安装的方法:成功运行小乌龟程序,成功即可!
Ctrl+Alt+T三次,打开三个终端,分别在三个终端命令行输入:

roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

其中:rosrun 后两个参数,第一个为包名,第二个为可执行文件名。

若出现小乌龟窗口,并能用方向键控制小乌龟的移动表示安装成功!

2、创建工作区

  • step1: 创建一个工作区
    全部创建的包,都应该放到这个工作区中。可以取一个你喜欢的名字作为你工作区的名称。例如,我所创建的工作区叫kfirst,那么你就在你的工作区中创建catkin的工作区,使用指令
mkdir test

然后进入这个工作区:

cd test

在你的工作区里创建一个名叫src的子目录:

mkdir src

这个叫src的子目录将用于存放功能包的源代码。

  • step2: 创建功能包
    进入第一步中创建的子目录src中:
cd src

在这个目录下运行:

# catkin_create_pkg package name
catkin_create_pkg hello_ros

这个包可以起任何名字(package name=hello_ros)。这个功能包创建命令创建了一个存放这个功能包的目录,并在那个目录下生成了两个配置文件:
一个叫package.xml
一个叫CMakeLists.txt, 它是一个CMake的脚本文件。这个文件包含了一系列的编译指令,包括生成可执行文件,需要哪些源文件,以及哪里可以找到所需头文件和链接库。
ROS入门第一个程序-Hello, World!_第1张图片

3. 编写代码

当做完了以上两步,现在就可以编写ROS程序了。
在src/hello_ros下创建一个名为hello.cpp的源文件,放到功能包文件夹中,挨着package.xml和CMakeLists.txt。
ROS入门第一个程序-Hello, World!_第2张图片

代码如下:
#include

 int main(int argc, char **argv) 
{ 
	ros::init(argc,argv,"hello"); 
	ros::NodeHandle n; 
	ROS_INFO("Hello ROS World!");
	ros::spinOnce(); 
}

其中,

  • ros::init函数:初始化ROS客户端库。需要在程序的起始处调用一次该函数。函数的最后一个参数是一个包含节点默认名的字符串。
  • ros::NodeHandle对象:是你的程序用于和ROS系统交互的主要机制,创建此对象将会把你的程序注册为节点管理器的节点。
  • ROS_INFO_STREAM宏: 将生成一条消息,且这条消息被发送的不同的位置,包括控制台。

4. 编译hello程序

  • step1: 声明依赖库.
    首先我们要声明程序所依赖的其他功能包,对于C++程序而言,此步骤是必须的,以确保catkin能够向C++编译器提供合适的标记来定位编译功能所需的头文件和链接库。
    为了给出依赖库,在功能包hello_ros下打开编辑目录下的CMakeLists.txt文件:
vim CMakeLists.txt

其中,
编辑内容先按键盘 i
退出编辑 esc
进入命令行 Shift + ; :wq保存编辑内容并退出关闭文件。
该文件默认版本有如下行:
find_package(catkin REQUIRED)
所依赖的其他catkin包可以添加到这一行的COMPONENTS关键词后面,如:
find_package(catkin REQUIRED COMPONENTS package-names)
对于这个例程,我们需要添加名为roscpp的依赖库,它提供了ROS的C++客户端,修改后的如下所示:
find_package(catkin REQUIRED COMPONENTS roscpp)

  • step2:声明可执行文件
    要在CMakeLists.txt文件中添加两行,声明我们需要创建的可执行文件,一般形式为:
add_executable(executable-name source-files)
target_link_libraries(executable-name ${catkin_LIBRARIES})

第一行声明了我们想要的可执行文件的文件名,以及所需的源列表。如果有多个源文件,把他们列在此处,并用空格将其分开。
第二行告诉CMake当链接此可执行文件时需要链接哪些库。如果你的包里需要多个可执行文件,为每个可执行问复制和修改上述两行。
本例程中,我们需要添加一下几行

add_executable(hello hello.cpp)
target_link_libraries(hello ${catkin_LIBRARIES})

其中,可执行文件名为hello, 源代码文件hello.cpp, CMake链接catkin_LIBRARIES库。

完整cmake代码:

cmake_minimum_required(VERSION 2.8.3)
project(hello_ros)
find_package(catkin REQUIRED COMPONENTS  roscpp)
include_directories( include ${catkin_INCLUDE_DIRS})
add_executable(hello hello.cpp)
target_link_libraries(hello ${catkin_LIBRARIES})

5. 编译工作区

一旦CMakeLists.txt文件设置好了,就可以编译工作区,在工作区根目录下使用以下指令:

catkin_make

注意:这个指令要在你创建的工作区的路径下执行。将会完成一些配置步骤,并且在工作区中创建devel和build两个子目录,这两个新生成的子目录用于存放和编译相关的文件,如自动生成的编译脚本、目标代码和可执行文件。

6.设置环境变量setup.bash

最后步骤是执行名为setup.bash的脚本,它是catkin_make在工作区devel目录下生成的

source devel/setup.bash

这个自动生成的脚本设置了若干环境变量,从而使ROS能找到你创建的功能包和新生成可执行文件

7. 执行hello程序

在执行hello程序前, Ctrl + Alt+ T 打开终端启动

roscore

启动后, Ctrl + Alt+ T 打开另一个终端执行

rosrun hello_ros hello

其中hello_ros是之前创建的包的名字,见本文 2章
运行后这个程序就会终端打印类似下面的输出

【INFO】【1543652338.493910660】:hello,ROS World!

ps:这行输出的数字代表时间,从1970年1月1号开始以秒计时。

————————————————

你可能感兴趣的:(ROS)