第一课1、ROS

时间:2022-09-02 16:40:19

-

1、什么是ROS

ROS起源于2007年,斯坦福大学的人工智能实验室与机器人技术公司Willow Garage针对其个人机器人项目开发了ROS的雏形。

ROS大致每年发布一个版本,目前正在维护的ROS版本包括indigo,jade,kinetic,一些早期版本现在已经停止维护。ROS依赖于linux内核,因此每当ubuntu版本发生变化,ROS不同版本的依赖也会出现相应的变化。

使用ROS的机器人主要包括:

ROS的工业ABB机器人、宇航局机器人、turtlebot机器人、willow garrage's pr2机器人(从左到右)

第一课1、ROS

2、ROS概述

第一课1、ROS

3、ROS版本indigo的安装

ROS官网以及相应wiki地址:

http://www.ros.org

http://wiki.ros.org/cn

一、安装

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

二、配置账户

不管是安装ROS还是使用一台预装了ROS的电脑,要想在你的账户中使用ROS,就必须完成下面步骤:

a、为用户账户中设置rosdep,首先在账户中初始化rosdep系统,命令如下:

rosdep update

该命令将在你的根目录下保存一些文件,文件夹名为.ros,这条命令只需执行一次。

注意:

这里需要注意,不像上文的 rosdep init,rosdep update 命令是在你的普通账户下运行,而不使用超级用户前缀sudo。

b)设置环境变量

ROS要依据一些环境变量来定位文件。 设置这些环境变量,你需要使用以下命令7执行ROS提供的脚本setup.bash:

source /opt/ros/indigo/setup.bash

然后,用下行命令确认环境变量已经设置正确:
export | grep ROS

正确配置后,显示结果如下

第一课1、ROS

上面的方式只能在当前shell下运行,如果想在其他shell也能正确运行,那么要做到这一点,编辑账户根目录中的文件.bashrc,并在最下面添加前文的 source 命令。

source /opt/ros/indigo/setup.bash

除了设置环境变量外,setup.bash 命令还能定义了一些ROS系统的bash函数,包括roscd和rosls(下面将要介绍) ,这些函数在rosbash软件包中定义。

4、ROS的基本命令

第一课1、ROS

创建工作空间

第一课1、ROS

第一课1、ROS

第一课1、ROS

创建功能包

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

为了给出依赖库,编辑包目录下的 CMakeLists.txt 文件,该文件的默认版本含有如下行: 
        find_package(catkin REQUIRED)

所依赖的其他catkin包可以添加到这一行的COMPONENTS关键字后面,如下所示:

find_package(catkin REQUIRED COMPONENTS package-names)

对于 hello 例程,我们需要添加名为 roscpp 的依赖库,它提供了 ROS 的 C++客户端库。因此,修改后的 find_package 行如下所示:

find_package(catkin REQUIRED COMPONENTS roscpp)

声明可执行文件     接下来,需要在CMakeLists.txt中添加两行,来声明我们需要创建的可执行文件。其一般形式是:

add_executable(executable-name source-files) 
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})

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

先ROS文件系统的介绍

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

下面回到视频,

eclipse的环境配置

第一课1、ROS

第一课1、ROS

注意:java8要安装,不然不能用

第一课1、ROS

第一课1、ROS

第一课1、ROS

把catkin-y方法下面的两行红色部分拷贝到一个叫做make的文件里面(改文件位于~/catkin_ws/目录下),修改改文件的权限为777。

执行make之后,导入工程到eclipse中,然后进行debug部分的配置。

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

进入debug

第一课1、ROS

第一课1、ROS

在这里没有去做Python的兼容部分!!!!!!!!!!!!

下面要在eclipse中编译和运行

第一课1、ROS

为了能运行一个实际的例子,自己去创建一个ROS包,

回到wiki.ros.org

总结:

首先建立一个catkin工程,为后面的eclipse的使用做准备。

1、安装ROS indigo

第一课1、ROS

第一课1、ROS

在1.3步骤中,可以使用如下方式来代替

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

经过这几步之后,安装完成。

2、创建catkin空间以及新建一个包beginner,输出hello world的程序

第一课1、ROS

虽然在初始化工作空间之后,在src下只有一个CMakeLists.txt文件,但是还是可以编译的,如下

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

第一课1、ROS

要生成可执行文件,还需要修改ROS程序包里面的CMakeLists.txt和package.xml(目前不需要修改)文件,

第一课1、ROS

下面便可以编译了,

第一课1、ROS

第一课1、ROS

在命令行下面运行,先运行roscore,

第一课1、ROS

然后另外打开一个终端运行hello,如下

第一课1、ROS

3、下面把这个catkin工程放入到eclipse里面去,下面是整个配置过程

a、先把eclipse下载下来并解压到/opt/下面,如下

第一课1、ROS

b、然后自己新建一个桌面图标,并把该图标放到启动栏

第一课1、ROS

第一课1、ROS

然后从/usr/share/applications/eclipse.desktop拖住eclipse图标到Dash Bar。

第一课1、ROS

c、下面对eclipse进行相应配置

双击打开eclipse,然后按照下面方式进行配置,

1. Global settings in Eclipse IDE

  • [Window] -> [Preferences] -> [C/C++] -> [Build] -> [Settings]中, 选择Discovery标签, 选中CDT GCC Build Output Parser [Shared] 选项, 更改下面的Compiler command pattern为:(.*gcc)|(.*[gc]\+\+)|(.*clang), 更改Container to keep discovered entries为最后一个选项:Project(use when settings are the same for all files in the project). 设置过程如图所示:

第一课1、ROS

  • 还是在刚刚的标签页, 选中 CDT GCC Buillt-in Compiler Settings [Shared], 更改下面的选项Command to get compiler specs${COMMAND} -E -P -v -dD -std=c++11 "${INPUTS}"

第一课1、ROS

在解决使用Eclipse编译代码的问题之前, 首先要解决的就是source /opt/ros/indigo/setup.bash的问题. 在命令行中通过命令catkin_make可以完成编译, 是因为这个脚本已经写入到~/.bashrc中, 打开命令行时已经被source.

打开命令行, 输入: sudo vim /usr/local/bin/eclipsemake, 将下述内容复制到该文件中:

#!/bin/bash
source /opt/ros/indigo/setup.bash
make "$@" VERBOSE=1 -j8
第一课1、ROS

打开命令行, 输入: sudo vim /usr/local/bin/eclipsemake-tests, 将下述内容复制到该文件中:

#!/bin/bash
source /opt/ros/indigo/setup.bash
make "$@" VERBOSE=1 -j8 run_tests
第一课1、ROS

最后, 再更改两个文件的权限: sudo chmod +x /usr/local/bin/eclipsemake*

3. Importing the project into Eclipse(有另外一个分水岭)

完成上述过程, 下面需要将一个工程导入到Eclipse中, 下面的步骤将以上面建立的beginner包作为示例。

第一课1、ROS

第一课1、ROS

如上图所示, 点击Finish, 即可看到Eclipse左侧Project Explorer视图中出现了我们的beginner包的工程文件。当然, 我们还需要再配置一下该工程。 [Project] -> [Properties] -> [C/C++ Build],

第一课1、ROS

[C/C++ Build] -> [Environment] 中添加一个变量VERBOSE, value = 1. 如下图所示:

第一课1、ROS

[C/C++ General] -> [Paths and Symbols] -> [#Symbols]中 GNU C++添加一个Symbol__GXX_EXPERIMENTAL_CXX0X__, 不设定任何值。 如下图所示:

第一课1、ROS

[C/C++ General] -> [Preprocessor Includes Paths, Macros etc.] -> [Providers] 中选择 CDT GCC Build Output Parser [Shared] 和 CDT GCC Built-in Compiler Settings [Shared], 并且两种都将 Use global provider shared between projects选中。

第一课1、ROS

配置结束后, 就可以开开心心的编译了。* [Project]* ->* [Build Project]*. 你会在Eclipse中看到如下内容:

第一课1、ROS

4. Adding run configurations to run ROS nodes in Eclipse

在上面的基础上, 已经是可以开开心心的编写代码, 以及编译代码了。 但是还是不能在Eclipse中运行代码。 一般而言, 个人还是推荐直接在命令行中运行生成的节点, 而不是在Eclipse中运行。当然, 想在Eclipse中运行节点, 也是可以的, 主要也就是配置以下run configurations.

[Run As] -> [Run Configurations], 双击[C/C++ Application], 按下图配置运行的二进制文件。

第一课1、ROS

[Environment]中, 配置ROS_MASTER_URI 和 ROS_ROOT两个变量, 如下图所示:

第一课1、ROS

ROS_ROOT 和 ROS_MASTER_URI的值可以打开Terminal,输入下述命令,然后复制打印出的值到Value即可.

$ echo $ROS_ROOT # http://localhost:11311
$ echo $ROS_MASTER_URI # /opt/ros/indigo/share/ros

保存后, 点击右下角的[Run]按键即可运行了。当然, 你还需要运行roscore, 运行ur_modern_driver会出现如下输出, 至少证明, 该节点确实被运行起来了。

第一课1、ROS

结果如下:

第一课1、ROS

方法二:

新建一个make可执行程序,

第一课1、ROS

其内容如下:

第一课1、ROS

运行之:

第一课1、ROS

在这里还没有安装好python的插件,安装好之后执行4.

4  Python

~/catkin_ws$ awk -f $(rospack find mk)/eclipse.awk build/.project > build/.project_with_env && mv build/.project_with_env build/.project

下面去导入工程:

第一课1、ROS

第一课1、ROS

下面要选择相应的二进制文件,如下

第一课1、ROS

下面是环境变量的配置:

在eclipse中编译,运行 设置shell环境变量 右击project选择 Properties --> C/C++ Make Project --> Environment 添加以下编译环境变量

ROS_ROOT

ROS_PACKAGE_PATH

PYTHONPATH

PATH

查看环境变量的值,执行 echo $VARIABLES

第一课1、ROS

同理在Run --> Run configurations... --> C/C++ Application-->environment

添加以下运行环境变量

ROS_ROOT

ROS_MASTER_URI

查看环境变量的值,执行 echo $VARIABLES

7  在Eclipse中运行调试可执行文件

第一课1、ROS

8、unresolved includes问题

在project->properties->[C/C++ General] -> [Preprocessor Includes Paths, Macros etc.] -> [Providers] 中选择 CDT GCC Build Output Parser [Shared] 和 CDT GCC Built-in Compiler Settings [Shared], 并且两种都将 Use global provider shared between projects选中。

第一课1、ROS

直接运行,结果如下

第一课1、ROS

还是要另开一个终端运行roscore,最后结果如下:

第一课1、ROS

http://wiki.ros.org/IDEs

http://blog.csdn.net/sunbibei/article/details/53643243

第一课1、ROS的更多相关文章

  1. vue.js学习(第一课)

    学习资料 来自*小凡! vue.js是javascript的一个库,只专注于UI层面,核心价值永远是 API的简洁. 第一课: 不支持IE8. 1.声明式渲染: el元素的简称 element : ...

  2. Magento学习第一课——目录结构介绍

    Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...

  3. <-0基础学python.第一课->

    初衷:我电脑里面的歌曲很久没换了,我想听一下新的歌曲,把他们下载下来听,比如某个榜单的,但是一首一首的点击下载另存为真的很恶心 所以我想有没有办法通过程序的方式来实现,结果还真的有,而且网上已经有有人 ...

  4. 留念 C语言第一课简单的计算器制作

    留念 C语言第一课简单的计算器制作 学C语言这么久了.  /* 留念 C语言第一课简单的计算器制作 */   #include<stdio.h>  #include<stdlib.h ...

  5. MFC学习-第一课 MFC运行机制

    最近由于兴趣爱好,学习了孙鑫的MFC教程的第一课.看完视频了,自己便用visual studio 2010尝试了MFC编程,其中遇到了一些问题. 1.vs2010不像vs6.0那样可以新建一个空的MF ...

  6. OpenCV 第一课&lpar;安装与配置&rpar;

    OpenCV 第一课(安装与配置) win10,opencv-2.4.13, 安装, vs2013, 配置 下载安装软件 官网OpenCV下载地址下载最新版本,我下载的是opencv.2.4.13,然 ...

  7. 【第一课】神奇的Context

    初学Android的困惑 初学Android跳转页面的时候,往往教程里是这么写的: Intent intent = new Intent(); //MyActivity就是当前的Activity,It ...

  8. CodeIgniter框架入门教程——第一课 Hello World!

    本文转载自:http://www.softeng.cn/?p=45 今天开始,我将在这里连载由我自己编写的<CodeIgniter框架入门教程>,首先,这篇教程的读着应该是有PHP基础的编 ...

  9. ruby代码重构第一课

    (文章是从我的个人主页上粘贴过来的, 大家也可以访问我的主页 www.iwangzheng.com) 新手写代码的时候往往会出现很多重复的代码没有提取出来,大师高瞻远瞩总能提点很多有意义的改进,今天重 ...

  10. &lbrack;译&rsqb;Quartz 框架 教程(中文版)2&period;2&period;x 之第一课 开始使用Quartz框架

    第一课:开始使用Quartz框架 在你使用调度器之前,需要借助一些具体的例子去理解(谁愿意只是猜啊?).你可以使用SchedulerFactory类来达到程序调度的目的.有一些Quartz框架的用户可 ...

随机推荐

  1. linux下c程序的链接、装载和库&lpar;3&rpar;

    9. 目标文件放在一起-->静态库. 你的同事给出的目标文件太多了,从 one.o two.o …… …… 一直到 xxx.o. 好的,你如果真正想用,你的同事提供的这些现有的目标文件,你得做三 ...

  2. sqlserver 存储过程分页管理

    -- =============================================-- Author:  <Author:刘畅>-- Create date: <Cre ...

  3. DMA控制器

    DMA控制器依赖于平台硬件,这里只对i386的8237 DMA控制器做简单的说明,它有两个控制器,8个通道,具体说明如下: 控制器1: 通道0-3,字节操作, 端口为 00-1F 控制器2: 通道 4 ...

  4. 使用Depth Texture

    使用Depth Textures: 可以将depth信息渲染到一张texture,有些效果的制作会需要scene depth信息,此时depth texture就可以派上用场了. Depth Text ...

  5. GRIDVIEW多行多列合并单元格(合并列)

    GitHub项目地址:https://github.com/mingceng/merge-gridviewcell 去年的时候,我写了两篇文章:  GridView多行多列合并单元格(完整代码和例子) ...

  6. JavaScript测试工具

    大家都知道Javascript的测试比较麻烦,一般是开发使用一些浏览器的插件比如IE develop bar或是firebug来调试,而测试往往需要通过页面展示后的js错误提示来定位.那么还有其他比较 ...

  7. python使用urllib2抓取网页

    1.使用python的库urllib2,用到urlopen和Request方法. 2.方法urlopen原形 urllib2.urlopen(url[, data][, timeout]) 其中: u ...

  8. for循环删除集合陷阱

    首先看下面的代码: import java.util.LinkedList;import java.util.List; public class DeleteCollection {         ...

  9. A&period;归并排序

    归并排序 (求逆序数) 归并排序:递归+合并+排序 时间复杂度:O(n logn)    空间复杂度:O(n) 用途:1.排序  2.求逆序对数 Description In this problem ...

  10. DL动态载入框架技术文档

    DL动态载入框架技术文档 DL技术交流群:215680213 1. Android apk动态载入机制的研究 2. Android apk动态载入机制的研究(二):资源载入和activity生命周期管 ...