Ros官网基础教程总结


创建package功能包

$roscore(任何程序都要先运行的一步)

$mkdir -p ~/catkin_ws/src(创建一个名叫catkin_ws的工作空间)

$cd ~/catkin_ws/src(转到catkin_ws/src目录下)

$catkin_init_workspace

$cd ~/catkin_ws    (转到catkin_ws目录下)

$catkin_make(建成工作空间)

$source devel/setup.bash(source一下)

$cd src(转到catkin_ws/src目录下)

$roscreate_pkg beginner_tutorials dependsstd_msgs rospy roscpp(创建一个名叫beginner_tutorials的功能包,且依靠std_msgs,rospy,roscpp)

 

                         Ros节点

我们将使用到一个轻量级的模拟器,请使用以下命令来安装:

$ sudo apt-getinstall ros--ros-tutorials

下面通过一些操作来理解ros节点

$ roscoreroscore 是你在运行所有ROS程序前首先要运行的命令。

 

$ rosnode listrosnode 显示当前运行的ROS节点信息。rosnode list 指令列出活跃的节点

/rosout(此时的输出,这表示当前只有一个节点在运行rosout。因为这个节点用于收集和记录节点调试输出信息,所以它总是在运行的。

使用rosrun

$ rosrun [package_name] [node_name](用法)

下面打开一个新的标签页

$ rosrun turtlesim turtlesim_node

运行后会出现一个小乌龟窗口,名字叫TurtleSim

再打开一个新的标签页

$ rosnode list

输出:

     /rosout

     /turtlesim

至此,此节内容就结束了。可以关闭所有终端窗口了。

                        

              Ros话题

$ roscore(首先确保运行roscore

打开一个新的标签页

$ rosrun turtlesim turtlesim_node(确保在上节下载配置了那个轻量级的模拟器,此时那个小乌龟窗口又会出现)

再在上个标签页的基础上打开一个新的标签页

$ rosrun turtlesim turtle_teleop_key(此时你可以用键盘上的方向键来控制小乌龟的运动)

在上一个标签页的基础上打开一个新的标签页

$ rosservice call clear(清楚小乌龟运动过的痕迹)

还可以再生一个小乌龟

$ rosservice type spawn| rossrv show

输出位

float32 x
float32 y
float32 theta
string name
---
string name

下面让我们在给定的位置生成一个新的小乌龟

$ rosservice call spawn 2 2 0.2 ""2 2 0.2为我们给新的小乌龟的位置)

此时在原来基础上再生成一只小乌龟。

$ rosparam list

输出为

/background_b
/background_g
/background_r
/roslaunch/uris/aqy:51932
/run_id

blue,green,red,三原色)

rosparam set [param_name]
rosparam get [param_name]

(用法)

现在让我们来改变小乌龟窗口背景颜色的红色通道

$ rosparam set background_r 150150为程度值,自己更改)

上述指令修改了参数的值,现在我们调用清除服务使得修改后的参数生效

$ rosservice call clear

现在可以看到背景颜色改变了。

现在我们来查看参数服务器上的参数值——获取背景的绿色通道的值

$ rosparam get background_g 

输出为

86

我们可以使用rosparam get /来显示参数服务器上的所有内容:

$ rosparam get /

输出为

background_b: 255
background_g: 86
background_r: 150
roslaunch:
  uris: {'aqy:51932': 'http://aqy:51932/'}
run_id: e07ea71e-98df-11de-8875-001b21201aa8

                        Ros服务和参数

本教程假设从前一教程启动的turtlesim_node仍在运行,现在我们来看看turtlesim提供了什么服务。

1 ros services

服务(services)是节点之间通讯的另一种方式。服务允许节点发送请求(request 并获得一个响应(response

rosservice提供了很多可以在topic上使用的命令,如下所示:

使用方法:

rosservicelist         输出可用服务的信息

rosservicecall         调用带参数的服务

rosservicetype         输出服务类型

rosservicefind         依据类型寻找服务find services by service type

rosservice uri          输出服务的ROSRPC uri

例如

$ rosservice list

输出为

/clear

/kill

/reset

/rosout/get_loggers

/rosout/set_logger_level

/spawn

/teleop_turtle/get_loggers

/teleop_turtle/set_logger_level

/turtle1/set_pen

/turtle1/teleport_absolute

/turtle1/teleport_relative

/turtlesim/get_loggers

/turtlesim/set_logger_level

list 命令显示turtlesim节点提供了9个服务:重置(reset清除(clear再生(spawn终止(kill,turtle1/set_pen/turtle1/teleport_absolute/turtle1/teleport_relativeturtlesim/get_loggers, andturtlesim/set_logger_level.同时还有另外两个rosout节点提供的服务/rosout/get_loggers and/rosout/set_logger_level.

2 rosservice type

使用方法:

rosservice type[service]

我们来看看clear服务的类型:

$ rosservice typeclear

输出为

std_srvs/Empty

服务的类型为空(empty),这表明在调用这个服务是不需要参数(比如,请求不需要发送数据,响应也没有数据)。下面我们使用rosservice call命令调用服务:

3rosservice call

使用方法:

rosservice call[service] [args]

例如

$ rosservice callclear

该服务清除了turtlesim_node的背景上的轨迹。上节已经使用过。

通过查看再生(spawn)服务的信息,我们来了解带参数的服务:

$ rosservice typespawn| rossrv show

输出为

float32 x

float32 y

float32 theta

string name

---

string name

这个服务使得我们可以在给定的位置和角度生成一只新的乌龟。名字参数是可选的,这里我们不设具体的名字,让turtlesim自动创建一个。

$ rosservice callspawn 2 2 0.2 ""2 2 0.2为我们给新的小乌龟的位置,可以更改

服务返回了新产生的乌龟的名字:

name: turtle2

此时在原来基础上再生成一只小乌龟。

3 Usingrosparam

使用方法:

rosparam set            设置参数

rosparam get            获取参数

rosparam load           从文件读取参数

rosparam dump           向文件中写入参数

rosparamdelete         删除参数

rosparam list           列出参数名

4rosparam list

$ rosparam list

我们可以看到turtlesim节点在参数服务器上有3个参数用于设定背景颜色:

/background_b

/background_g

/background_r

/roslaunch/uris/aqy:51932

/run_id

5 rosparam set and rosparam get

用法

rosparam set[param_name]

rosparam get [param_name]

现在我们修改背景颜色的红色通道:

$ rosparam setbackground_r 150150为程度值,自己更改)

现在我们调用清除服务使得修改后的参数生效:

$ rosservice callclear

现在可以看到背景颜色已经改变,上节已经演示过。

现在我们来查看参数服务器上的参数值——获取背景的绿色通道的值:

$ rosparam getbackground_g

输出为

86

我们可以使用rosparam get /来显示参数服务器上的所有内容:

$ rosparam get /

输出为

background_b: 255

background_g: 86

background_r: 150

roslaunch:

  uris: {'aqy:51932': 'http://aqy:51932/'}

run_id: e07ea71e-98df-11de-8875-001b21201aa8      

              使用rqt_consoleroslaunch

详见官网教程(过于繁琐,不好直接解释,官网很详细)。

              使用rosed编辑Ros中的文件

使用方法:

$ rosed[package_name] [filename]

例如

$ rosed roscpp Logger.msg

这个实例展示了如何编辑roscpp package里的Logger.msg文件。

如果该实例没有运行成功,那么很有可能是你没有安装vim编辑器。请参考编辑器部分进行设置。

如果文件名在package里不是唯一的,那么会呈现出一个列表,让你选择编辑哪一个文件

 

              创建Ros消息和Ros服务

见官网教程(官网教程很详细)。

              编写简单的消息发布器和订阅器(c++

1 编写发布器节点

切换到之前创建的 beginner_tutorials package路径下:

cd~/catkin_ws/src/beginner_tutorials

beginner_tutorials package路径下创建一个src文件夹:

mkdir -p~/catkin_ws/src/beginner_tutorials/src

这个文件夹将会用来放置 beginner_tutorials package的所有源代码。

beginner_tutorials package里创建 src/talker.cpp文件

创建方法具体如下:

$ cd~/catkin_ws/src/beginner_tutorials/src

$gedit ~/catkin_ws/src/beginner_tutorialss/src/talker.cpp

后面的复制粘贴文件见官网教程,编译节点时要求添加的命令一定要添加,最后保存。

最后在终端记得运行  $ catkin_make

 

              测试消息发布器和订阅器

确保在上一节已经在 beginner_tutorials package里创建 src/talker.cpp文件和src/listener.cpp文件。

运行

$ roscore

roscore标签页基础上打开一个新的标签页。

 如果使用catkin,确保你在调用catkin_make后,在运行你自己的程序前,已经sourcecatkin工作空间下的setup.sh文件:

# In your catkinworkspace

$ cd ~/catkin_ws

$ catkin_make

$ source./devel/setup.bash

接着运行

$ rosrunbeginner_tutorials talker      (C++)

$ rosrunbeginner_tutorials talker.py   (Python)

你将看到如下的输出信息:

·        [INFO] [WallTime: 1314931831.774057] hello world 1314931831.77
·        [INFO] [WallTime: 1314931832.775497] hello world 1314931832.77
·        [INFO] [WallTime: 1314931833.778937] hello world 1314931833.78
·        [INFO] [WallTime: 1314931834.782059] hello world 1314931834.78
·        [INFO] [WallTime: 1314931835.784853] hello world 1314931835.78
·        [INFO] [WallTime: 1314931836.788106] hello world 1314931836.79

发布器节点已经启动运行。现在需要一个订阅器节点来接受发布的消息。

上一节,我们编写了一个名为"listener"的订阅器节点。现在运行它:

打开一个新的标签页

$ cd~/catkin_ws

$catkin_make

$source ./devel/setup.bash

$ rosrun beginner_tutorials listener     (C++)
$ rosrun beginner_tutorials listener.py  (Python) 

你将会看到如下的输出信息:

·        [INFO] [WallTime: 1314931969.258941] /listener_17657_1314931968795I heard hello world 1314931969.26
·        [INFO] [WallTime: 1314931970.262246] /listener_17657_1314931968795I heard hello world 1314931970.26
·        [INFO] [WallTime: 1314931971.266348] /listener_17657_1314931968795I heard hello world 1314931971.26
·        [INFO] [WallTime: 1314931972.270429] /listener_17657_1314931968795I heard hello world 1314931972.27
·        [INFO] [WallTime: 1314931973.274382] /listener_17657_1314931968795I heard hello world 1314931973.27
·        [INFO] [WallTime: 1314931974.277694] /listener_17657_1314931968795I heard hello world 1314931974.28
·        [INFO] [WallTime: 1314931975.283708] /listener_17657_1314931968795I heard hello world 1314931975.28

此节就结束了。


你可能感兴趣的:(ros)