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的脚本文件。这个文件包含了一系列的编译指令,包括生成可执行文件,需要哪些源文件,以及哪里可以找到所需头文件和链接库。
3. 编写代码
当做完了以上两步,现在就可以编写ROS程序了。
在src/hello_ros下创建一个名为hello.cpp的源文件,放到功能包文件夹中,挨着package.xml和CMakeLists.txt。
代码如下:
#include <ros/ros.h>
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号开始以秒计时。
————————————————