ros笔记

来源:互联网 发布:php程序员的工作常态 编辑:程序博客网 时间:2024/06/05 18:49

1> bashrc文件实际是一个启动脚本文件,只有将某些文件包正确的添加source在这个文件,当你查找或使用某些文件包的时候才能正确找到,不然,便会出现找不到包的现象发生。而如何确保已经设置了像ROS_PACKAGE_PATH这样的环境变量,可以通过命令 export | grep ROS 来查看。


2> 工作环境的搭建需要几步:首先mkdir一个文件,然后cd到此文件目录下(只有这样才能对此文件以及此文件里的各种文件进行相应操作),最后一步是利用catkin_make命令进行编译。要想保证这个工作空间已经配置正确,便要确保ROS_PACKAGE_PATH环境变量包含在此工作空间目录,可以采用echo $ROS_PACKAGE_PATH命令来查看。

补充:在创建一个文件后,此文件是没有什么内容的,一般创建文件的同时,在文件下要同时创建一个src文件,以后好多操作都会在这里面,然后退到所建文件,只有在进行catkin_make编译之后,伴随着src文件,在相同层级处才会出现builddevel文件,这两个文件作用再补充。

补充1build目录是build space的默认所在位置,同时cmakemake也是在这里北条用来配置并编译程序包。develdevelopment)目录是devel space的默认所在位置,同时也是你安装程序包(此程序包指的是下面要安装的beginner_tutorials)之前存放可执行文和库文件的地方。


3> 相对于ls cd 这样的指令,也可以利用rospack find [package name] 命令来快速找到文件的存储路径。同样roscd [package name] 可以迅速转到某包目录之下,此时可以采用pwd(print working directory)显示存储路径。


4> roscd log 命令是转到保存日志文件的目录下,前提是已经有ROS程序在执行,不然,系统会报错。


5> rosls ls 的功能类似。


6> TAB键的自动输入功能,很方便。


7> 一个程序包必须包括的两个文件,一个是package.xml,它提供有关程序包的元信息,包括各种标签元素。一个是CMakeLists.txt


8> 命令catkin_creat_pkg也可以用来创建程序包,后面也可以跟着几个依赖包,这些依赖包也可以同时被创建。用这个指令创建的包我们常称之为ROS包,上述依赖包一般有std_msgs,rospy,roscpp(rospy是用Python语言编写,roscpp是用c++语言编写

)如:catkin_create_pkg beginner_tutorials std_msgs rospy roscpp这个命令,意思就是在src文件下创建一个名为beginner_tutorials的文件,后面三个均为依赖包,在文件中不会显示出来,想要查看的话,可以使用命令rospack depends1 beginner_tutorials ,便会将这三个文件显示出来。而创建beginner_tutorials文件的同时会在此文件下自动生成四个文件,分别是include,src,CMkaeLists.txt,package.xml。想要查看文件内容,可以使用cat指令,但是此指令只针对文档文件。

beginner_tutorials有三个依赖包,这属于一级依赖,而针对这三个依赖包,它们也有它们的依赖包,这些依赖包便称为间接依赖包,比如想查看roscpp的依赖包,可键入:rospack depends1 roscpp。如果想看beginner_tutorials文件下所有依赖包,可以将depends1改为depends就好了。

package.xml文件中,删除掉注释和没有使用标签的部分会使package.xml看起来更加简洁。而CMkaeLists.txt文件中的很多内容需要用户自己在以后的使用过程中进行自主添加(比如编译ROS程序代码就需要在此文件中添加许多信息)。


9> 在建好beginner_tutorials文件后,切换到此文件目录下便可以利用catkin_make对其进行编译,编译会输出很多信息,首先是它所使用的每个空间所在的路径。然后是一个运行指令cmake的信息,然后是c编译器的信息,包括c++c#等等,对其信息进行check。最后配置,生成,建立,完毕,表示编译正确。


10> 节点(node)ROS程序包(即是beginner_tutorials)中的一个可执行文件。节点可以利用ROS客户库与其他节点进行通信,节点也可以发布或接收一个话题,也可以提供或使用某种服务。ROS客户端库允许使用不同编程语言的节点进行通信(比如pythonc++


11> 如果想运行ROS程序,首要的是输出命令roscore,而且一个时刻只能运行一个,不然会出错。此命令相当于将节点管理器master打开。

然后打开另一终端可以使用rosnode list查看当前正在运行着的节点,如果想看到运行节点的详细信息,可输入rosnode info /node_name命令。详细信息包括节点名,发布信息,订阅信息,服务信息等等。

可以使用rosrun [package_name] [node_name]命令打开另一节点,如rosrun turtlesim turtlesim_node,这样便会打开一个节点窗口,此时再查看当前运行着的节点,可以看到会有两个节点在运行,一个是roscore出来的,一个是rosrun出来的,在此过程,也可以对第二个打开的节点进行重新命名,如 rosrun turtlesim turtlesim_node __name:=my_turtle,此句意思即是将节点名字turtlesim_node改为my_turtle,同样可以利用rosnode list查看当前运行着的节点。


12> 而对于上面打开的静止节点turtlesim_node,怎么使其运动起来,最简单的莫过于利用键盘的上下左右键来进行控制,此时我们便需要运行turtlesim包中另外一个遥控节点turtle_teleop_key,使用命令rosrun turtlesim turtle_teleop_key,此时会输出很多信息,显示可以从键盘来读取信息,然后移动turtle


13> 像上述过程,节点与节点之间的通信如何实现的呢。下面来介绍话题topic

turtlesim_nodeturtle_teleop_key这两个节点是通过一个话题来交流的,而交流双方总有一个是发布消息者(publisher),一个是订阅消息者(subscriber)或者双方的交流是双向的,节点既是发布者,又是订阅者。发布或订阅的工具,或者平台就是话题topic,话题相当于一个市场,有来购买的,也有来销售的。此时可以利用rqt_graph图像的方式来查看节点关系图,比如rosrun rqt_graph rqt_graph命令,图像中,箭头代表消息的走向,中间的即是话题。

rostopic这个命令工具可以获得很多有关某某话题的信息

rostopic bw     display bandwidth used by topic

rostopic echo   print messages to screen

rostopic hz     display publishing rate of topic

rostopic list   print information about active topics

rostopic pub    publish data to topic

rostopic type   print topic type

比如rostopic echo /turtle1/cmd_vel命令,意思是将节点turtle_teleop_key(也就是键盘这个节点)在话题turtle1/cmd_vel上发布的信息输出出来,假如节点turtlesim_node移动着,那么此时终端界面将显示节点turtlesim_node的运动信息,比如此次命令是显示的是节点turtlesim_node的线性方向和角性方向上的速度,包括三个轴x,y,z。假如节点turtlesim_node不停运动,那么,信息会一直更新。

此时将rqt_graph出来的图像刷新一下,显示,话题/turtle1/cmd_vel也订阅了节点turtle_teleop_key发布的消息,正因为话题也订阅了此消息,节点turtlesim_node才能在话题上订阅相同的这个消息来使节点turtlesim_node移动。

利用rostopic list -v可以显示有关发布和订阅的话题及其类型的详细信息。

rostopic type [topic]命令可以显示话题的类型,上述话题/turtle1/cmd_vel的类型为geometry_msgs/Twist。可以进一步通过rosmsg show geometry_msgs/Twist命令来查看geometry_msgs/Twist的详细信息。这个详细信息显示的节点turtlesim_node想要得到怎样的消息来控制自己,知道了这个我们就可以发布一些此类型的消息来让节点turtlesim_node做其他运动。

大致格式:rostopic pub [topic_name] [topic_type] -- '[x,y,z]' '[x,y,z]'

比如命令rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

总体意思是让节点turtlesim_node2.0线速度和1.8角速度移动(但会停止,实际情况是持续了三秒)。

此命令详细解析:rostopic pub 就是发布消息到某个话题,-1(破折号,1)意思是发布完消息立即退出(将-1去掉,仍旧是运动完立即停止,但是没有输出持续了三秒)。--(双破折号)是必须的,后面的就是Linearangular分别具有的x,y,z参数。如同上面geometry_msgs/Twist的详细信息显示一样,是按照那个格式组织的。此命令并没有持续的原因是此消息的频率不稳定,因此可以使用一个稳定的频率来使turtlesim_node一直运动。

大致格式:rostopic pub [topic_name] [topic_type] -r 1 -- '[x,y,z]' '[x,y,z]'意思是以1HZ的频率来发布命令到话题上(也就是1秒一次,持续发布)。将1HZ换为0.5那么即2秒发布一次,这样,turtlesim_node会间断移动。


14> 使用rostopic hz [topic]来查看数据发布的频率,比如:rostopic hz /turtle1/pose,输出显示平均频率大约60HZ

同样可以查看话题类型,并查看详细类型详细信息,此命令rostopic type /turtle1/cmd_vel | rosmsg show相当于两次命令,一个是rostopic type /turtle1/cmd_vel,输出类型geometry_msgs/Twist;然后再使用rosmsg show geometry_msgs/Twist。等于是将两条命令写作一条,"|"的作用就是这个。


15> 此时可以使用rqt_plot命令来查看节点运动x-y-z位置坐标图(现实情况是不能查看z轴,原因以后再续)。


16> ROS Services

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

rosservice args print service arguments

rosservice call call the service with the provided args

rosservice find find services by service type

rosservice info print information about service

rosservice list list active services

rosservice type print service type

rosservice uri print service ROSRPC uri

rosservice list可以列出所有的服务信息,然后可以利用rosservice type [service_type]查看某种服务的类型。然后可以使用rossrv show [service_type]来查看服务的具体信息。然后可以根据这个信息来发布类型指令,开始某些操作。

比如:rosservice type spawn| rossrv show,此句和上述讲的"|"作用一样,意思是将两句指令合成一句(一个是rosservice type spawn,一个是rossrv show turtlesim/Spawn。第一个指令输出便是turtlesim/Spawn),一起输入。

Spawn意思是再生,那么我们可以在此前那个那个节点turtlesim_node窗口再生一个,如指令:rosservice call spawn 2 2 0.2 ""意思是在给定位置和角度生成一只新的乌龟。解释:0.2指角度,也就是朝向,从0开始往上,0代表朝x轴正方向,增加1逆时针大约转30度。两个2是位置点,第一个2x轴,在窗口显示左右位置变化,第二个2y轴,在窗口显示上下位置变化,窗口左下角代表原点位置。


17> rosparam

rosparam set set parameter(设置参数)

rosparam get get parameter(获取参数)

rosparam load load parameters from file(从文件读取参数)

rosparam dump dump parameters to file(将参数详细信息写入文件中)

rosparam delete delete parameter(删除参数)

rosparam list list parameter names(列出参数名)

rosparam(参数服务器)上的参数都有:

/background_b(调背景蓝色)

/background_g(调背景绿色)

/background_r(调背景红色)

/roslaunch/uris/aqy:51932

/run_id

(可以使用rosparam list指令输出)

改变背景颜色分为两步,第一步是设置:比如rosparam set background_r 150,第二步是调用清除服务使得修改生效,rosservice call clear。至此修改完毕。

rosparam dump params.yaml(将服务参数写入到文件中)

rosparam load params.yaml copy(params.yaml中的参数再写入到备份文件copy当中)

rosparam get copy/background_b(再次得到蓝背景颜色值)


18> rqt_consoleROS日志框架(logging framework)的一部分,用来显示节点的输出信息;rqt_logger_level允许我们修改节点运行时输出信息的日志等级(logger levels(包括debug,warn,info,error)


19> roslaunch可以启动定义在launch文件中的多个节点

首先我们要先创建launch文件,在编辑的时候我们采用vim编辑器,使用方法如下:

第一:切换到需要的文件目录下,输入指令vim file_name

其次:键入i或者a,可以进入编辑模式,此时可在终端中输入你想编辑的内容,编辑完毕完整。

第三:按下Esc键,退出编辑,然后输入冒号,接着输入wwrite)和qquit)或者是只输入x(即wq=x)然后回车,即退出并保存。


20> 在编辑完launch文件之后可以使用roslaunch beginner_tutorials turtlemimic.launch命令同时启动两个turtlesim窗口,再发布消息,可以让两个乌龟同时运动。


21> 使用rosed编辑ROS中的文件,其实vim更加方便快捷。


22> 创建ROS消息和ROS服务

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

服务(srv):一个srv文件描述一项服务。它包含两个部分:请求和响应。存放在srv目录下。

主要工作修改package.xmlCMakeLists.txt文件。

所有在msg路径下的.msg文件都将转换为ROS所支持语言的源代码。生成的C++头文件将会放置在~/catkin_ws/devel/include/beginner_tutorials/。 Python脚本语言会在 ~/catkin_ws/devel/lib/python2.7/dist-packages/beginner_tutorials/msg 目录下创建。 lisp文件会出现在 ~/catkin_ws/devel/share/common-lisp/ros/beginner_tutorials/msg/ 路径下。


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

首先是在类似于beginner_tutorials文件中建立文件夹src或者scripts,前者是为了放后缀为.cpp的文件,后者是为了放后缀为.py的文件,首先在相应文件夹下编写相应的发布者和订阅者程序,然后回到beginner_tutorials文件下的CmakeLists.txt文件下添加相应语句,如下发布helloworld的程序时添加的:

#编写简单消息发布器和订阅器(C++

include_directories(include ${catkin_INCLUDE_DIRS})


add_executable(talker src/talker.cpp)

target_link_libraries(talker ${catkin_LIBRARIES})


add_executable(listener src/listener.cpp)

target_link_libraries(listener ${catkin_LIBRARIES})


然后完毕,在catkin_ws目录下进行编译,之后依次开始测试发布者程序运行,订阅者程序运行,命令如下:

rosrun beginner_tutorials talker (c++)

rosrun beginner_tutorials listener

或者

rosrun beginner_tutorials talker.py (python)

rosrun beginner-tutorials listener.py

即可看到结果




原创粉丝点击