ROS文件系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

关于一个软件包的新建,源程序的编译安装好ROS后,要配置环境变量#source/opt/ros/distro/setup.bash直接添加到.bashrc文件最好第一步:首先,建立一个工作空间:$mkdir-p~/test_ws/src跳至src空文件夹$cd~/test_ws/src注:src是源文件source的缩写然后初始化工作空间$catkin_init_workspace这个时候src文件目录下有个CMakeLists.txt文件然后跳到工作空间top层,因为只有这一层这样才能build$cd~/test_ws$catkin_make配置环境变量到该工作空间exportROS_PACKAGE_PATH=~/test_ws:$ROS_PACKAGE_PATH或直接加入.bashrc//这里只配置到test_ws一级这个时候test_ws下就有文件夹:builddevelsrc在'devel'文件夹里面你可以看到几个setup.*sh文件。source这些文件中的任何一个都可以将当前工作空间设置在ROS工作环境的最顶层所以需要:$sourcedevel/setup.bash或者加入.bashrc文件//这里配置到test_ws/src一级检查是否设置成功:$echo$ROS_PACKAGE_PATH/home/exbot/test_ws/src:/opt/ros/groovy/share:/opt/ros/groovy/stacks以上一个完整的工作空间就设置好了,以后要编写程序包都在这个工作空间之下新建。注:ROS命令行工具,比如roscdroscpprospack等等都只能切换到那些路径已经包含在ROS_PACKAGE_PATH环境变量中的软件包,要查看ROS_PACKAGE_PATH中包含的路径可以输入:$echo$ROS_PACKAGE_PATH这就是配置环境变量的作用、、、第二步:创建ROS程序包首先了解一个程序包的组成:1、该程序包必须包含catkincompliantpackage.xml文件这个package.xml文件提供有关程序包的元信息,也就是基本说明信息,同时还包括重要的依赖包文件声明。2、程序包必须包含一个catkin版本的CMakeLists.txt文件,而Catkinmetapackages中必须包含一个对CMakeList.txt文件的引用。3、每个目录下只能有一个程序包。这意味着在同一个目录下不能有嵌套的或者多个程序包存在一个包含程序包的简单工作空间看起来就像这样:命令:catkin_creat_pkg切换到工作空间下的src文件夹:$cd~/test_ws/src创建一个test_pack的程序包:catkin_create_pkgtest_packstd_msgsrospyroscpp这个程序包依赖于std_msgs、roscpp和rospy;关于依赖介绍请☞这个时候test_pack文件夹下将有CMakeLists.txtpackage.xml和includesrc文件夹其中CMakeLists.txt,package.xml是可以也需要自定义的。第三步:编译程序包命令:catkin_make只能在顶层的工作空间(本例子是test_ws)工作空间运行catkin_make,如果在其它文件夹下运行catkin_make,会出现Thespecifiedbasepath/home/exbot/test_ws/srccontainsaCMakeLists.txtbutcatkin_makemustbeinvokedintherootofworkspace的提示。该命令会编译src文件夹下的所有catkin工程。直接运行catkin_make只会编译test_pack/src这个默认路径下面的源程序,如果你的源代码不在默认工作空间中(~/catkin_ws/src),比如说存放在了my_src中,那么你可以这样来使用catkin_make:$catkin_make--sourcemy_src$catkin_makeinstall--sourcemy_src#(optionally)catkin_make首先输出它所使用到的每个空间所在的路径Basepath:/home/exbot/test_wsSourcespace:/home/exbot/test_ws/srcBuildspace:/home/exbot/test_ws/buildDevelspace:/home/exbot/test_ws/develInstallspace:/home/exbot/test_ws/install这时候在工作空间下面有几个文件夹:builddevel(developmentspace)src没有installspace是因为还没有安装这个文件包具体作用及各个文件介绍详见目录是buildspace的默认所在位置,同时cmake和make也是在这里被调用来配置并编译你的程序包。devel目录是develspace的默认所在位置,同时也是在你安装程序包之前存放可执行文件和库文件的地方。运行节点在运行任何节点之前,必须要先运行roscore指令;运行一个节点:rosrun[package_name][node_name]查看节点的详细信息rosnode[ping/list/info/kill/machine/cleanup]node_name关于话题Rqt:$rosrunrqt_graphrqt_graph可以查看节点与节点之间的通信和话题信息图$rostopicrostopicbw[topic_name]displaybandwidthusedbytopicrostopicecho[topic_name]printmessagestoscreenrostopichz[topic_name]displaypublishingrateoftopicrostopiclist[topic_name]printinformationaboutactivetopics(显示所有话题的发布者和订阅者)rostopicpub[topic_name]publishdatatotopicrostopictype[topic_name]printtopictype关于服务服务(services)是节点之间通讯的另一种方式。服务允许节点发送请求(request)并获得一个响应(response)。rossrvshowturtlesim/Spawnfloat32xfloat32y//海龟的x,y坐标float32theta//海龟的头部的弧度角stringname---stringname创建消息和服务消息:msg文件就是一个描述ROS中所使用消息类型的简单文本文件,它们会被用来生成不同语言的源代码。服务(srv):一个srv文件描述一项服务。它包含两个部分:请求和响应。msg文件存放在package的msg目录下,srv文件则存放在srv目录下。这些文件夹是需要自己新建的。msg文件实际上就是每行声明一个数据类型和变量名。比如:Headerheaderstringchild_frame_idgeometry_msgs/PoseWithCovarianceposegeometry_msgs/TwistWithCovariancetwistsrv文件分为请求和响应两部分,由'---'分隔。下面是srv的一个样例:int64Aint64B---int64Sum其中A和B是请求,而Sum是响应。创建一个消息msg文件$cd~/test_ws/src/test_pack//切换到程序包文件夹$mkdirmsg//在程序包文件夹下面建立一个msg文件夹$echoint64nummsg/Num.msg//定义一个名为num的int64型数据。然后很重要的一步,要将msg文件编译称为C++,python语言的源程序,必须要借助一些依赖文件,所以需要在程序包中的package.xml中写入build_dependmessage_generation/build_dependrun_dependmessage_runtime/run_depend这两句,没有run_dependmessage_generation/run_depend和build_dependmessage_runtime/build_depend,是因为我们用不到注:package.xml只是提供了一些说明信息,并不会对实际编译造成影响;真正起到实际作用的是在CMakeLists.txt文件中的findpackage()中加入依赖项,比如此处使之成为如下形式:find_package(catkinREQUIREDCOMPONENTSroscpprospystd_msgsmessage_generation)有时候你会发现,即使你没有调用find_package,你也可以编译通过。这是因为catkin把你所有的package都整合在一起,因此,如果其他的package调用了find_package,你的package的依赖就会是同样的配置。但是,在你单独编译时,忘记调用find_package会很容易出错。同样,你需要确保你设置了运行依赖:catkin_package(...CATKIN_DEPENDSmessage_runtime......)另外找到如下代码:#add_message_files(#FILES#Message1.msg#Message2.msg#)使之变成这样:add_message_files(FILESNum.msg)另外必须确定函数generate_messages()被调用了#generate_messages(#DEPENDENCIES#std_msgs#)使之变成这样:generate_messages(DEPENDENCIESstd_msgs)关于CMakeLists.txt文件,详情编写发布器和订阅器所谓的发布器和订阅器,也即是通过消息进行信息传递的节点。下面将首先介绍编写一个名为“talker”的发布器节点和一个“listener”订阅器节点。记住:编写一个程序包的程序,都是在程序包内部的src文件里,而不是在外层的工作空间。cd~/test_ws/src/test_pack/src,这个目录下将会储存所有test_pack的源代码。编写talker.cpp程序文件:gedittalker.cpp写好程序,保存。在相同的目录下写好listener.cpp文件配置好相应的依赖和目标文件路径详情:编写一个服务和客户节点所谓的服务(service)和客户(client),也就是节点,这组节点是通过服务(srv)来进行通信的,srv它是一个文件,我们之前编写过,通过对srv里面的内容进行读写来达到服务节点和客户节点通信的目的。首先编写一个简单的service节点(add_two_ints_server),同样源代码在src文件夹下,命名为add_two_ints_server.cpp,复制例程代码:#includeros/ros.h#includebeginner_tutorials/AddTwoInts.hbooladd(beginner_tutorials::AddTwoInts::Request&req,beginner_tutorials::AddTwoIn

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功