ROS学习笔记(1)

1.安装ROS(ubuntu14.04+ROS indigo)

参考官网页面:http://wiki.ros.org/cn/jade/Installation/Ubuntu

2.ROS常用操作汇总  参考http://wiki.ros.org/cn/ROS/Tutorials/NavigatingTheFilesystem

(1) 使用快捷键ctrl+Alt+t进入终端,在终端输入roscore即可启动ROS master。

(2) 使用ls  opt/ros来查看ros系统版本

(3)     返回软件包的路径信息:   rospack  find +  包名称

(4) roscd是rosbash命令集中的一部分,它允许你直接切换(cd)工作目录到某个软件包或者软件包集当中

(5)     命令pwd来输出当前工作目录。

(6)     查看ROS_PACKAGE_PATH中包含的路径可以输入:$ echo$ROS_PACKAGE_PATH

(7)     使用roscd  log可以切换到ROS保存日记文件的目录下。需要注意的是,如果你没有执行过任何ROS程序,系统会报错说该目录不存在

(8)     返回根目录:cd /;返回上一级目录:cd ..(注意空格)

(9)     Linux下删除非空文件夹:rm -rf dirname;Linux下删除空文件夹:rmdir -p dirname

(10)   source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。

(11) 编辑配置文件:gedit ~/.bashrc

(12) cat 是一个文本文件查看和连接工具。查看一个文件的内容,用cat比较简单,就是cat 后面直接接文件名

(13) Terminator工具用于将多个终端窗口叠放在一起,同时也可将一个窗口进行切分,使用命令sudo apt-get install Terminator来安装

  

正式操作ROS可能用到的命令:

1.        roscore:启动ros

2.        rosnode list:显示当前正在运行的节点信息

3.        rosnode info /rosout:返回特定节点rosout的信息

4.        rosrun:直接使用包名运行包里面的节点,不需要知道具体路径

5.        Ctrl+c--关闭某个节点的运行,还是可以看见;要清理节点使其看不见使用rosnode cleanup

6.        Rqt_graph---展示当前运行的节点和话题

7.        Rostopic--获取话题的相关信息

8.        ROS的服务:rosservice type spawn| rossrv show--->显示服务spawn的输入参数和输出参数

9.         rosparamget /--->获得ROS参数服务器的所有内容

10.    将所有参数写到一个.yaml文件中-->rosparam dumpxx.yaml

11.    重新从.yaml文件获取参数:$ rosparam loadparams.yaml copy      $ rosparam get copy



ROS系统有三级级概念:文件系统级、计算图级、社区级。

ROS也有两种类型的命名:功能包源名称和计算图源名称。

 ROS Package组成:

catkin Package:1、包含一个package.xml文件,提供包的元信息

               2、包含一个CMakeLists.txt

               3、一个文件夹中只能有一个包

ROS文件系统:

Manifest.xml必须包含在功能包中;stack.xml必须包含在一个功能包集中。

ROS提供了很多预定义消息类型,如果你自己想创建一种新的消息类型,就要把消息类型的定义放到功能包的msg/文件夹下,在该文件夹中,有用于定义 各种消息的文件,这些文件都以.msg为扩展名。

 

节点:各自独立运行的可执行文件,能够通过主题、服务或参数服务器与其他进程(节点)通信,通过使用节点将代码和功能解耦,提高了系统容错能力和可维护性,是系统简化。同时,ROS的节点能够布置在不同的机器上同时运行。节点必须使用不同的名称,可以使用不同的库进行编写(C++或python)。(rosnode工具)

主题:节点间用来传输数据的总线,通过主题进行消息路由不需要节点之间直接连接。意味着发布者和订阅者不需要知道彼此是否存在,同一个主题可以有多个订阅者。每个主题都是强类型的,也就是一个节点想要订阅一个主题,他们就必须具有相同的消息类型。ROS的主题可以使用TCP/IP和UDP传输,基于TCP传输称为TCPROS,它使用TCP/IP长连接,这是ROS默认的传输方式。基于UDP传输的称为UDPROS,他是一种低延迟高效率的传输方式,但可能产生数据丢失,适合于远程操控任务。(rostopic工具)

服务:当你需要直接与节点通信并获得应答时,将无法通过主题实现,而需要服务。服务由用户开发,节点并不提供标准服务,包含消息源代码的文件存储在srv文件夹中。服务关联一个以功能包.srv文件名称来命名的服务类型,服务类型是功能包名称和.srv文件名称的组合。(rossrv和rosservice工具)

消息:一个节点向特定主题发布消息,从而将数据发送到另一个节点。消息具有一定的类型和数据结构,包括ROS提供的标准类型和用户自定义类型。

消息记录包:消息记录包是由ROS创建的一组文件,它使用.bag格式保存消息、主题、服务和其他ROS数据信息。你可以在事件发生后使用可视化工具调用和回放数据,检查在系统中到底发生了什么;你可以播放、停止、后退及执行其他操作。

节点管理器:向ROS中其他节点提供命名和注册服务,他像服务一样跟踪和记录主题的发布者和订阅者。作用是使ROS节点之间能够进行相互查找,一旦这些节点找到了彼此,就能建立一种点对点的通信方式。节点管理器使用roscore命令运行,他会加载ROS节点管理器及其他ROS核心组件。

参数服务器:可通过网络访问的共享的多变量字典。节点使用此服务器来存储和检索运行时参数。参数服务器使用XML-RPC实现并在ROS节点管理器下运行。这意味着它的API可通过通用的XMLRPC

 

*******************************ROS的使用**************************************

一、配置ROS环境

1、  创建ROS工作空间

$ mkdir -p~/catkin_ws/src

$ cd~/catkin_ws/src

$catkin_init_workspace

2、  构建工作区

$cd ~/catkin_ws/

$ catkin_make

3、  source your new setup.*sh file

$source devel/setup.bash

4、  查看ROS路径

echo $ROS_PACKAGE_PATH

二、ROS文件系统http://wiki.ros.org/ROS/Tutorials/NavigatingTheFilesystem

1、安装ros-tutorials:sudoapt-get install ros--ros-tutorials

1.1文件系统的概念

包(Packages):ROS代码的软件组织单元,一个包包括库、可执行文件、脚本或者其他组件。

(清单)Manifests(package.xml):一个包的描述,定义了包之间的依赖关系并且可以获得像包的版本、维护者、许可证等等一些包的元信息。

1.2   文件系统工具

rospack---得到包的一些信息

roscd---是rosbash组件的一部分,允许你直接把路径切换至一个包或者一个堆栈

rosls---直接显示出一个包的内容而不需要进入这个包的绝对路径

三、创建一个ROS包http://wiki.ros.org/ROS/Tutorials/CreatingPackage

        1、catkin包的组成:一个与catkin兼容的package.xml文件,提供包的元信息;一个使用catkin的文件CMakeLists.txt;如果这是一个catkin元包,则必须有相关的样板文件CMakeLists.txt;同一个文件夹下不能有多个包或者嵌套的包,一个包下的结构应该是:

                       My_package/

                             CmakeLists.txt

                              Package.xml

         2、catkin工作空间下的包

使用catkin包工作的推荐方法是直接使用系统的catkin workspace,你也可以单独建立一个catkin package,此处省略,详见页面:http://wiki.ros.org/catkin/Tutorials/create_a_workspace

 

(先验知识:给catkin创建一个工作空间

创建一个catkin工作空间:source/opt/ros/indigo/setup.bash

Mkdir –p ~/catkin_ws/src

Cd ~/catkin_ws/src

Catkin_init_workspace

Cd ~/catkin_ws/

Catkin_make)

        3、创建一个catkinpackage

Cd ~/catkin_ws/src

创建一个名为beginner_tutorials的包  依赖于std_msgs,roscpp,rospy

Catkin_create_pkg   beginner_tutorials   std_msgs rospy  roscpp

4、  building a catkin workspace and sourcing thesetup file

cd ~/catkin_ws

catkin_make

退回根目录执行  .        ~/catkin_ws/devel/setup.bash

5、  包的依赖性

一级依赖:之前使用Catkin_create_pkg命令时提供了几个 程序包作为依赖包,可以使用rospack工具来查看一级依赖包rospack depends beginner_tutorials;

Cat package.xml----查看包的描述;

间接依赖:rospackdepends1 rospy

四、编译ROS程序包

Cd ~/catkin_ws/

Catkin_make

五、理解ROS节点

Nodes:节点,一个节点即为一个可执行文件,它可以通过ROS与其他节点通信

Messages:消息,消息是ROS的一种数据类型,用于订阅或者发布话题

Topics:话题,节点可以发送消息到话题,也可以订阅话题以接收消息

Master:节点管理器,ROS名称服务器(比如帮助节点找到彼此)

Rosout:ROS中相当于stdout或stderr

Roscore:主机+rosout+参数服务器(运行所有ROS程序前首先要运行的命令)

1.      使用rosnode:显示当前运行的节点信息。rosnode list指令列出了活跃的节点;(rosout用于收集和记录节点的调试输出信息,所以它总是运行的)

2.      使用rosrun运行包内的节点:rosrun+包名+节点名

如:rosrun turtlesim turtlesim_node

也可以给运行的节点重命名:rosrun turtlesim turtlesim_node

注:当你使用ctrl+c关闭节点,而不是关闭窗口或者你没有$ROS_HOSTNAME环境变量,你仍看得到节点在列表中显示,这时可以使用rosnode cleanup来清除列表

Rosnode ping+节点名也可以测试节点是否活跃

六、理解ROS话题

     运行:rosrunturtlesim turtlesim_node

                  Rosrun turtlesimturtle_teleop_key

现在可以在turtle_teleop_key窗口中使用键盘来控制乌龟运动了。

1.      ROS话题

turtlesim_node 与 turtle_teleop_key节点间通过话题来互相通信。

rqt_graph能够创建一个显示当前系统运行情况的动态图形,可以用来显示当前运行的节点和话题。rosrun  rqt_graph  rqt_graph

2.      rostopic介绍

部分介绍:rostopic echo [topic]可以显示某个话题上发布的数据

                     Rostopic list能够列出所有当前订阅和发布的话题

 

3.      ROS Message: 话题之间的通信是通过在节点之间发送ROS消息实现的。对于发布器(turtle_teleop_key)和订阅器(turtlesim_node)之间的通信,发布器和订阅器之间必须发送和接收相同类型的消息。这意味着话题的类型是由发布在它上面的消息类型决定的。使用rostopic type命令可以查看发布在某个话题上的消息类型。

使用rostopic type /turtle1/cmd_velà显示消息类型geometry_msgs/Twist

使用rosmsg show geometry_msgs/Twist查看消息类型的详细信息

 

rostopic pub可以把数据发布到当前某个正在广播的话题上

rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- ‘[2.0,0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’会发送一条消息给turtlesim,告诉他以2.0大小的线速度和1.8大小的角速度开始移动。

命令分解解释:

rostopic pub发布消息给某一话题;

-1(单个破折号)这个参数选项使rostopic发布一条消息后马上退出;/turtle1/cmd_vel这是消息所发布到的话题名称;

geometry_msgs/Twist这是所发布的消息类型;

--(双破折号)这会告诉命令选项解析器接下来的参数部分都不是命令选项。这在参数里面包含有破折号(比如负号)时是必须要添加的

           

           rostopic  pub  -r  1发布一个频率为1Hz的稳定命令流

rostopic pub -1 /turtle1/cmd_velgeometry_msgs/Twist –r  1 --  ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’这条命令以1Hz的频率发布速度命令到速度话题上

 

           rostopic hz [topic]命令可以用来查看数据发布的频率。

4.      使用rqt_plot命令可以实时显示一个发布到某个话题上的数据变化图形。

 

七、理解ROS的服务与参数

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

rosservice list  输出可用服务的信息

rosservice call 调用服务

rosservice type 输出服务类型

rosservice find 依据类型寻找服务findservices by service type

rosservice uri 输出服务的ROSRPCuri

 

带参服务例子:

再生(spawn)  查看服务信息:rosservicetype spawn | rossrv show

这个服务可以让我们在给定的位置和角度生成一只新的乌龟。名字参数是可选的。

Rosservice call spawn 2 2 0.2 “ ”

 

rosparam使得我们能够存储并操作ROS参数服务器(parameterserver)上的数据。参数服务器能够存储整型、浮点、布尔、字符串、字典和列表等数据类型。rosparam使用YAML标记语言的语法。一般而言,YAML的表述很自然:1是整形,1.0是浮点,one是字符串,true是布尔,[1,2,3]是整型列表。。。

rosparam set   设置参数

rosparam get   获取参数

 

rosparam load   从文件读取参数

rosparam dump   向文件中写入参数

rosparam delete   删除参数

roaparam list 列出参数名

 

如:修改背景颜色  rosparam set background_r150  然后调用清楚服务使得修改后的参数生效:rosservicecall  clear

 

将显示出来的参数信息存储在文件当中以备今后读取:

rosparam dump [file_name]

rosparam dump [file_name] [namespace]

将所有参数写入params.yaml文件:

rosparam  dump  params.yaml

rosparam  load  params.yamlcopy

roaparam  get  copy/background_b

 

八、使用rqt_console调试工具和roslaunch运行多个节点

1.rqt_console属于ROS日志框架(loggingframework)的一部分,用来显示节点的输出信息。rqt_logger_level允许我们修改节点运行时输出信息的日志等级(logger levels)(包括DEBUG、WARN、INFO、ERROR)

2.通过设置日志等级你可以获取该等级及其以上优先等级的所有日志信息。比如将日志等级设置为warn时,将会得到warn、Error、Fatal这三个等级的所有日志消息

3.roslaunch可以用来启动定义在launch文件中的多个节点

 

4.在beginner_tutorials文件下面创建一个launch文件夹,在launch文件夹中创建一个名为turtlemimic.launch的文件,输入geditturtlemimic.launch 

  使用roslaunch命令启动launch文件

 

九、使用rosed编辑ROS中的文件

1.使用rosed,rosed是rosbash的一部分,利用它可以直接通过包名来获取待编辑的文件而无需指定该文件的存储路径了

2.要学习vim的使用方法

 

十、创建ROS消息和ROS服务

消息(msg):msg文件就是一个描述ROS中所使用消息类型的简单文本。它们会被用来生成不同语言的源代码。

服务(srv):一个srv文件描述一项服务。它包括两个部分:请求和响应

Msg文件存放在package的msg目录下,srv文件则存放在srv目录下。Msg文件实际上就是每行声明一个数据类型和变量名。可以使用的数据类型如下:

Int8,int16,int32,int64(plus uint*)

Float32,float64

String

Time,duration

Other msg files

未完待续......

你可能感兴趣的:(ROS)