ROS(1)编写第一个ROS程序(创建工作空间workspace和功能包package)

一、先从三个方面去理解ROS:(自己查,不详表)

ROS是什么,为什么使用ROS,如何使用ROS

ROS(Robot Operating System)    地址链接:http://www.ros.org/

侧重点:a 首先,ROS是一个操作系统os;

              b 是一种跨平台模块化软件通讯机制,ROS用节点(Node)的概念表示一个应用程序,不同node之间通过事先定义好格式的消息(Topic),服务(Service),动作(Action)来实现连接;

              c  是一系列开源工具,ROS为开发者提供了一系列非常有用的工具,可以大大提高我们开发的效率,

        rqt_plot:可以实时绘制当前任意Topic的数值曲线;

        rqt_graph:可以绘制出各节点之间的连接状态,和正在使用的Topic等;

       TF:TF是Transform的简写,利用它,我们可以实时知道各连杆坐标系的位姿,也可以求出两个坐标系的相对位置;

        Rviz:超强大的3D可视化工具,可以显示机器人模型、3D电影、各种文字图标、也可以很方便二次开发;

             d 具有很多先进算法:

           OROCOS:这个开源项目主要侧重于机器人底层控制器的设计,包括用于计算串联机械臂运动学数值解的KDL、贝叶斯滤波、实时控制等功能。

  OpenRave:这是在ROS之前最多人用来做运动规划的平台,ROS已经将其中的ikfast(计算串联机械臂运动学解析解)等功能吸收。

  Player:一款优秀的二维仿真平台,可以用于平面移动机器人的仿真,现在在ROS里可以直接使用。

  OpenCV:大名鼎鼎的机器视觉开源项目,ROS提供了cv_bridge,可以将OpenCV的图片与ROS的图片格式相互转换。

  OMPL:现在最著名的运动规划开源项目,已经成了MoveIt的一部分。

  Visp:一个开源视觉伺服项目,已经跟ROS完美整合。

  Gazebo:一款优秀的开源仿真平台,可以实现动力学仿真、传感器仿真等,也已被ROS吸收。

二、创建工作空间(workspace)

我们所创建的功能包,都全部放在一个叫工作空间(workspace)的目录中。先创造一个工作空间test,并在此文件夹下创建一个SRC的子目录,用于存放功能包的源代码。而 代码中的 “-p” ,这时mkdir命令会自动创建所有不存在的目录。

在终端命令中键入(打开终端的快捷键为“Ctrl+Alt+T”)

mkdir -p ~/test/src

三、创建功能包(package)

创建一个新ROS功能包的命令应该在你工作空间中的src目录下运行:catkin_create_pkg package-name,package-name指的是你功能包的名字,我所创建的功能包名为first,注意是在你工作空间中的src目录下运行(cd命令可以进入你要进入的目录)继续在终端中键入 

cd ~/test/src

进入src目录下运行 

catkin_create_pkg first

其实,这个功能包创建命令没有做太多工作,它只不过创建了一个存放这个功能包的目录(也就是我所创建的功能包first),并在first那个目录下生成了两个配置文件。
第一个配置文件,叫做 package.xml,称为清单文件。

第二个文件,叫做 CMakeLists.txt,是一个 Cmake 的脚本文件,Cmake 是一个符合工业标准的跨平台编译系统。这个文件包含了一系列的编译指令,包括应该生成哪种可执行文件,需要哪些源文件,以及在哪里可以找到所需的头文件和链接库。当然,这个文件表明 catkin 在内部使用了 Cmake。
 

注意:ROS 包的命名遵循一个命名规范,只允许使用小写字母、数字和下划线,而且首字符必须是一个小写字母。一些 ROS工具,包括 catkin,不支持那些不遵循此命名规范的包。

四、编写ROS程序

我编写一个简单的 hello,ros!的程序,命名为hello.cpp。这个名为 hello.cpp 的源文件 也 存 放 在 你 的 功 能 包 first文 件 夹 中 , 挨 着 package.xml 和CMakeLists.txt。

注意:一些在线教程建议在你的功能包目录中创建 src 目录来存放 C ++源文件。这个附加的组织结构可能是有益的,特别是对于那些含有多种类型文件的较大的功能包,但它不是严格必要的。

#include <ros/ros.h>

int main ( int argc , char ** argv ) 
{
  ros::init ( argc , argv , "hello" ) ;
  ros::NodeHandle nh ;
  ROS_INFO_STREAM( " Hello , ROS! " ) ;
}

五、编译 Hello 程序

我们该如何编译和运行这个程序呢?这些交给ROS的catkin编译系统来处理。

第一步: 编辑包目录下的 CMakeLists.txt 文件

sudo gedit CMakeLists.txt

内容如下: 

cmake_minimum_required(VERSION 2.8.3)
project(first)
#添加需要的依赖库 roscpp
find_package(catkin REQUIRED COMPONENTS roscpp)
include_directories(
${catkin_INCLUDE_DIRS}
)
#声明想要的可执行文件的文件名,以及所需要的源列表,如果有多个源列表,空格列在此处
add_executable(hello src/hello.cpp)
#告诉Cmake当链接此可执行文件时需要链接哪些库
target_link_libraries(hello ${catkin_LIBRARIES})

 

我们同样需要在包的清单文件package.xml 中列出依赖库,通过使用build_depend (编译依赖)和 run_depend(运行依赖)两个关键字实现:格式如下:
<build_depend>package-name</build_depend>
<run_depend>package-name</run_depend>
在hello 程序在编译时和运行时都需要 roscpp 库,因此清单文件package.xml加入:

<build_depend>roscpp</build_depend>
<exec_depend>roscpp</exec_depend>

第二步:声明可执行文件

接下来,我们需要在 CMakeLists.txt 中添加两行,来声明我们需要创建的可执行文件。

其一般形式是:add_executable(executable-name source-files)                           此处executable-name为执行文件的名字(hello),source-files为源文件的名字(hello.cpp)

                      target_link_libraries(executable-name ${catkin_LIBRARIES})


第一行声明了我们想要的可执行文件的文件名,以及生成此可执行文件所需的源文件列表。如果你有多个源文件,把它们列在此处,并用空格将其区分开。

第二行告诉 Cmake 当链接此可执行文件时需要链接哪些库(在上面的 find_package 中定义)。如果你的包中包括多个可执行文件,为每一个可执行文件复制和修改上述两行代码。

在我的例程中,我们需要一个名为 hello 的可执行文件,它通过名为 hello.cpp 的源文件编译而来。所以我们需要添加如下几行代码到 CMakeLists.txt 中:

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

第三步:编译工作区

利用catkin_make这个命令进行编译,注意必须从你的工作空间目录运行,此命令时是进入你的工作空间目录。

cd ~/test
catkin_make

六、执行hello程序

roscore

source devel/setup.bash

rosrun first hello

通过上面的操作,我们就完成了一个简单的ROS程序。 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值