版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章 ROS通信机制目录contentsROS通信机制介绍ROS项目开发流程话题通信机制服务通信机制参数服务器ROS通信机制介绍01CATALOGUEROS通信机制介绍话题(Topic)——异步通信机制节点间用来传输数据的重要总线;使用发布/订阅模型,数据由发布者传输到订阅者,同一个话题的订阅者或发布者可以不唯一。消息(Message)——话题数据具有一定的类型和数据结构,包括ROS提供的标准类型和用户自定义类型;使用编程语言无关的.msg文件定义,编译过程中生成对应的代码文件。ROS通信机制介绍服务(Service)——同步通信机制使用客户端/服务器(C/S)模型,客户端发送请求数据,服务器完成处理后返回应答数据;使用编程语言无关的.srv文件定义请求和应答数据结构,编译过程中生成对应的代码文件。ROS通信机制介绍话题与服务的区别ROS通信机制介绍参数(Parameter)——全局共享字典可通过网络访问的共享、多变量字典;节点使用此服务器来存储和检索运行时的参数;适合存储静态、非二进制的配置参数,不适合存储动态配置的数据。ROS项目开发流程02CATALOGUEROS项目开发流程ROS项目开发过程,采用如下步骤:ROS项目开发流程工作空间(workspace)是一个存放工程开发相关文件的文件夹。src:代码空间(SourceSpace)build:编译空间(BuildSpace)devel:开发空间(DevelopmentSpace)install:安装空间(InstallSpace)ROS项目开发流程创建工作空间编译工作空间设置环境变量$mkdir-p~/catkin_ws/src$cd~/catkin_ws/src$catkin_init_workspace$cd~/catkin_ws/$catkin_make$sourcedevel/setup.bashROS项目开发流程创建功能包编译功能包$cd~/catkin_ws/src$catkin_create_pkglearning_communicationrospyroscppstd_msgsstd_srvs$cd~/catkin_ws$catkin_make$source~/catkin_ws/devel/setup.bash$catkin_create_pkg<package_name>[depend1][depend2][depend3]同一个工作空间下,不允许存在同名功能包
不同工作空间下,允许存在同名功能包话题通信机制03CATALOGUEROSTopic通信编程话题模型(发布者/订阅者)ROSTopic通信编程分别编写发布者和订阅者,实现发布方以10HZ(每秒10次)的频率发布文本消息(“HelloWorld!”),订阅方订阅消息并将该消息内容输出至终端。1.编写发布者程序首先在前面章节创建的catkin_ws工作空间下,使用如下命令创建功能包和新建文件:cd~/catkin_ws/srccatkin_create_pkglearning_communicationroscpprospystd_msgsstd_srvscdlearning_communication/srcgeditstring_publisher.cppROSTopic通信编程如何实现一个发布者:1)初始化ROS节点;2)向ROSMaster注册节点信息,包括发布的话题名和话题中的消息类型;3)创建消息数据;4)按照一定频率循环发布消息。ROSTopic通信编程如何实现一个订阅者:1)初始化ROS节点;2)订阅需要的话题;3)循环等待话题消息,接收到消息后进入回调函数;4)在回调函数中完成消息处理。ROSTopic通信编程add_executable(string_publishersrc/string_publisher.cpp)target_link_libraries(string_publisher${catkin_LIBRARIES})add_executable(string_subscribersrc/string_subscriber.cpp)target_link_libraries(string_subscriber${catkin_LIBRARIES)ROSTopic通信编程cd~/catkin_wscatkin_makesourcedevel/setup.bashroscorerosrunlearning_communicationstring_publisherrosrunlearning_communicationstring_subscriber自定义msg话题通信示例下面通过创建自定义消息,要求该消息包含人的信息:姓名、身高、年龄等。自定义msg话题通信示例下面通过创建自定义消息,要求该消息包含人的信息:姓名、身高、年龄等。1.按照固定格式创建msg文件在功能包下新建msg文件夹,新建文件PersonMsg.msg,并在该文件中写入如下信息:stringnameuint16agefloat64height注:这里使用的基础数据类型string、uint16、float64都是与编程语言无关的,编译阶段会变成各种语言对应的数据类型。自定义msg话题通信示例下面通过创建自定义消息,要求该消息包含人的信息:姓名、身高、年龄等。2.修改package.xml和CMakeLists.txt文件内容在package.xml中添加功能包依赖<build_depend>message_generation</build_depend><exec_depend>message_runtime</exec_depend>在CMakeLists.txt添加编译选项find_package(……message_generation)add_message_files(FILESPersonMsg.msg)generate_messages(DEPENDENCIESstd_msgs)catkin_package(……message_runtime)自定义msg话题通信示例下面通过创建自定义消息,要求该消息包含人的信息:姓名、身高、年龄等。如何实现一个发布者:1)初始化ROS节点;2)向ROSMaster注册节点信息,包括发布的话题名和话题中的消息类型;3)创建消息数据;4)按照一定频率循环发布消息。自定义msg话题通信示例下面通过创建自定义消息,要求该消息包含人的信息:姓名、身高、年龄等。如何实现一个订阅者:1)初始化ROS节点;2)订阅需要的话题;3)循环等待话题消息,接收到消息后进入回调函数;4)在回调函数中完成消息处理。ROSTopic通信编程add_executable(person_publishersrc/person_publisher.cpp)target_link_libraries(person_publisher${catkin_LIBRARIES})add_dependencies(person_publisher${PROJECT_NAME}_gencpp)add_executable(person_subscribersrc/person_subscriber.cpp)target_link_libraries(person_subscriber${catkin_LIBRARIES})add_dependencies(person_subscriber${PROJECT_NAME}_gencpp)ROSTopic通信编程cd~/catkin_wscatkin_makesourcedevel/setup.bashroscorerosrunlearning_communicationperson_publisherrosrunlearning_communicationperson_subscriberROS中自定义msg时,字符串用哪个(
)定义。uint32stringfloat64uint16ABCD提交单选题1分服务通信机制04CATALOGUEROS服务通信编程服务模型(服务端/客户端)ROS服务通信编程分别编写服务端和客户端,实现文本消息(“HelloROS!”)服务通信的过程。1.编写服务端程序首先在前面章节创建的catkin_ws工作空间下,使用如下命令创建功能包和新建文件:cd~/catkin_ws/srccatkin_create_pkglearning_communicationroscpprospystd_msgsstd_srvscdlearning_communication/srcgeditstring_server.cppROS服务通信编程如何实现一个服务器:1)初始化ROS节点;2)创建Server实例;3)循环等待服务请求,进入回调函数;4)在回调函数中完成服务功能的处理,并反馈应答数据。ROS服务通信编程如何实现一个客户端:1)初始化ROS节点;2)创建一个Client实例;3)发布服务请求数据;4)等待Server处理之后的应答结果。ROS服务通信编程add_executable(string_serversrc/string_server.cpp)target_link_libraries(string_server${catkin_LIBRARIES})add_executable(string_clientsrc/string_client.cpp)target_link_libraries(string_client${catkin_LIBRARIES})ROS服务通信编程cd~/catkin_wscatkin_makesourcedevel/setup.bashroscorerosrunlearning_communicationstring_serverrosrunlearning_communicationstring_client1.按照固定格式创建srv文件在功能包下新建srv文件夹,新建文件AddTwoInts.srv,并在该文件中写入如下信息:#客户端请求时发送的两个数字int32num1int32num2---#服务器响应发送的数据int32sum自定义srv服务通信示例自定义srv服务通信示例本例中,客户端提交两个整数至服务端,服务端接收请求后完成求和运算,并返回结果到客户端。自定义srv服务通信示例自定义srv服务通信示例2.修改package.xml和CMakeLists.txt文件内容在package.xml中添加功能包依赖<build_depend>message_generation</build_depend><exec_depend>message_runtime</exec_depend>在CMakeLists.txt添加编译选项find_package(catkinREQUIREDCOMPONENTSroscpprospystd_msgsstd_srvsmessage_generation)#需要加入message_generation,必须有std_msgsadd_service_files(FILESAddTwoInts.srv)generate_messages(DEPENDENCIESstd_msgs)3.编译生成中间文件自定义srv服务通信示例自定义srv服务通信示例如何实现一个服务器(AddTwoInts_Server.cpp):1)初始化ROS节点;2)创建Server实例;3)循环等待服务请求,进入回调函数;4)在回调函数中完成服务功能的处理,并反馈应答数据。自定义srv服务通信示例自定义srv服务通信示例如何实现一个客户端(AddTwoInts_Client.cpp):1)初始化ROS节点;2)创建一个Client实例;3)发布服务请求数据;4)等待Server处理之后的应答结果。自定义srv服务通信示例add_executable(AddTwoInts_Serversrc/AddTwoInts_Server.cpp)target_link_libraries(AddTwoInts_Server${catkin_LIBRARIES})add_dependencies(AddTwoInts_Server${PROJECT_NAME}_gencpp)add_executable(AddTwoInts_Clientsrc/AddTwoInts_Client.cpp)target_link_libraries(AddTwoInts_Client${catkin_LIBRARIES})add_dependencies(AddTwoInts_Client${PROJECT_NAME}_gencpp)CMakeLists.txt配置文件自定义srv服务通信示例cd~/catkin_wscatkin_makesourcedevel/setup.bashroscorerosrunlearning_communicationAddTwoInts_Serverrosrunlearning_communicationAddTwoInts_Client12ROS中自定义服务的文件夹名称为(
)msgsrvlaunchrossrvABCD提交单选题1分参数服务器05CATALOGUE参数服务器也可以说是特殊的“通信方式”。参数服务器在ROS中主要用于实现不同节点之间的数据共享。参数服务器的维护方式非常的简单灵活,总的来讲有三种方式:命令行参数设置、launch文件内读写和node源码。参数服务器参数服务器机制1.命令行参数设置使用命令行来设置参数服务,主要通过rosparam命令来进行各种操作设置。rosparam能够存储并操作ROS参数服务器(ParameterServer)上的数据。参数服务器能够存储整型、浮点、布尔、字符串、字典和列表等数据类型。参数服务器rosparam命令rosparam命令作用rosparamsetparam_keyparam_value设置参数rosparamgetparam_key显示参数rosparamloadfile_name从文件加载参数rosparamdumpfile_name保存参数到文件rosparamdelete删除参数rosparamlist列出参数名称2.launch文件内读写参数launch文件中有很多标签,而与参数服务器相关的标签只有两个,一个是<param>,另一个是<rosparam>。示例如下:参数服务器<!--直接定义参数并赋值--><paramname="velodyne_frame_id"type="string"value="velodyne"/><!--定义参数并通过arg给参数赋值--><argname="velodyne_frame_id"default="velodyne"/><paramname="velodyne_frame_id"type="string"value="$(argvelodyne_frame_id)"/>3.节点源码内进行读写参数除了上述最常用的两种读写参数服务器的方法,还有一种就是修改ROS的源码,也就是利用API来对参数服务器进行操作。C++节点中实现参数服务器的读写有两套API系统。参数服务器(1)ros::NodeHandle,该方式的示例如下:
//创建ros节点句柄ros::NodeHandlenh;stringnode_param;std::vector<std::string>param_names;
//新增参数到参数服务器中nh.setParam("param_1",1.0);nh.param<std::string>("param_2",node_param,"hahaha");参数服务器(2)ros::param,相关示例如下:
stringnode_param;std::vector<std::string>param_names;ros::param::set("param_1",1.0);node_param=ros::param::param("param_2","hahaha");//其他功能ros::param::getParamNames(param_names);ros::param::has("param_2");ros::param::search("param_2",node_param);课程作业使用海龟仿真器,完成以下编程作业:1.创建一个节点,在其中实现一个订阅者和一个发布者,完成以下功能:
发布者:发布海龟速度指令,让海龟圆周运动
订阅者:订阅海龟的位置信息,并在终端中周期打印输出2.创建另外一个节点,在其中实现一个客户端,完成以下功能:
客户端:请求海龟诞生的服务,在仿真器中产生一只新的海龟THANKS感谢观看第4章 ROS运行管理目录contentsROS节点运行管理ROS工作空间覆盖ROS节点重名ROS话题名称设置ROS参数名称设置Launch文件综合案例ROS节点运行管理01CATALOGUEROS节点运行管理ROS使用多进程(节点)的分布式框架,一个完整的ROS系统可能出现如下情形:
可能包含多台主机;每台主机上有多个工作空间;每个工作空间中又包含多个功能包;每个功能包包含多个节点,不同的节点都有自己的节点名称;每个节点可能还会设置一个或多个话题。ROS节点运行管理—launch文件launch文件是一个XML格式的文件,可以启动本地和远程的多个节点,还可以在参数服务器中设置参数。其作用是简化节点的配置与启动,提高ROS程序的启动效率。
<launch><nodepkg="learning_communication"type="person_subscriber"name="talker"/><nodepkg="learning_communication"type="person_publisher"name="listener"/></launch>调用launch文件新建launch文件roslaunchlearning_launchdemo.launch注意:roslaunch命令执行launch文件时,首先会判断是否启动了roscore。如果已经启动,则不再启动,否则,会自动调用roscore。launch文件标签<launch>标签是所有launch文件的根标签,充当其他标签的容器,文件中的其他内容都必须放在这个标签中。<node>标签用于指定ROS节点,是最常见的标签,需要注意的是roslaunch命令不能保证按照node的声明顺序来启动节点(节点的启动是多进程的)。1.属性pkg=“包名”:节点所在的功能包名称type="nodeType":节点的可执行文件名称name="nodeName":节点运行时的名称(在ROS网络拓扑中节点的名称)args="xxxxxxxxx"(可选):将参数传递给节点2.子级标签env环境变量设置remap重映射节点名称rosparam参数设置param参数设置launch文件标签<include>标签用于将另一个xml格式的launch文件导入到当前文件中,类似C语言中的头文件包含。1.属性file="$(find功能包名)/xxx/xxx.launch":要包含的文件路径ns="xxx"(可选):在指定命名空间导入文件2.子级标签env环境变量设置arg将参数传递给被包含的文件launch文件标签<remap>标签用于重映射ROS计算图资源的命名。用户不需要修改已有功能包的接口,只需要将接口名称重映射,取一个别名,这样系统就能识别该接口。属性from="xxx":原命名to="yyy":映射之后的命名比如turtlebot的键盘控制节点发布速度指令话题是/turtlebot/cmd_vel,但是如果当前机器人订阅的速度控制话题是/cmd_vel,这时使用<remap>就可以轻松解决问题,实现代码如下:<remapfrom="/turtelbot/cmd_vel"to="/cmd_vel"/>launch文件标签<param>标签主要用来在参数服务器上设置参数,参数源可以在标签中通过value指定,也可以通过外部文件加载,在<node>标签中时,相当于私有命名空间。launch文件执行后,参数值就加载到ROS的参数服务器上。属性name="命名空间/参数名":参数名称,可以包含命名空间value="xxx"(可选):定义参数值,如果此处省略,必须指定外部文件作为参数源type="str|int|double|bool|yaml"(可选):指定参数类型,如果未指定,roslaunch会尝试确定参数类型launch文件标签<rosparam>标签可以将YAML格式文件中的参数全部导入到ROS参数服务器中,或将参数导出到YAML文件,也可以用来删除参数,<rosparam>标签在<node>标签中时被视为私有标签。属性command="load|dump|delete"(可选,默认load):加载、导出或删除参数file="$(findxxxxx)/xxx/yyy....":加载或导出到的yaml文件param="参数名称"ns="命名空间"(可选)launch文件标签<arg>标签是用于动态传参,类似于函数的参数,仅限于launch文件使用,便于launch文件的重构,与ROS节点内部的实现没有关系。1.属性name="参数名称":default="默认值"(可选)value="数值"(可选):不可以与default并存doc="描述":参数说明2.示例设置argument使用<arg>标签元素,语法如下:<argname="arg-name"default="arg-value"/>launch文件中需要使用argument时,可以使用如下方式调用:<paramname="foo"value="$(argarg-name)"/><nodename="node"pkg="package"type="type"args="$(argarg-name)"/>ROS工作空间覆盖02CATALOGUEROS工作空间覆盖所谓工作空间覆盖,是指在不同工作空间中,存在同名功能包的情形。(1)新建工作空间A与工作空间B,两个工作空间中都创建turtlesim功能包。(2)在~/.bashrc文件下追加当前工作空间的bash格式如下:source/home/用户/路径/工作空间A/devel/setup.bashsource/home/用户/路径/工作空间B/devel/setup.bash(3)在终端中输入命令source.bashrc,加载环境变量。(4)查看ROS环境环境变量echo$ROS_PACKAGE_PATH。结果:自定义工作空间B:自定义空间A:系统内置空间(5)使用命令roscdturtlesim,则此时会进入自定义工作空间B。出现上述结果的原因如下:设置时需要遵循一定的原则:ROS_PACKAGE_PATH中的值和.bashrc的配置顺序相反--->后配置的优先级更高。ROS节点重名03CATALOGUEROS节点重名场景:ROS中创建的节点是有名称的,C++初始化节点时通过API:ros::init(argc,argv,"xxxx")来定义节点名称,在Python中初始化节点则通过rospy.init_node("yyyy")来定义节点名称。在ROS的网络拓扑中,是不可以出现重名的节点的,在ROS中如果启动重名节点的话,之前已经存在的节点会被直接关闭。[WARN][1578812836.351049332]:Shutdownrequestreceived.[WARN][1578812836.351207362]:Reasongivenforshutdown:[newnoderegisteredwithsamename]rosrun设置命名空间与重映射1.rosrun设置命名空间语法:rosrun功能包名
节点名__ns:=新名称rosrunturtlesimturtlesim_node__ns:=/xxxrosrunturtlesimturtlesim_node__ns:=/yyy这时会发现两个节点都可以正常运行。再通过运行rosnodelist查看节点信息,显示结果为:/xxx/turtlesim/yyy/turtlesimrosrun设置命名空间与重映射3.rosrun命名空间与名称重映射叠加语法:rosrun功能包名
节点名__ns:=新名称__name:=新名称具体案例如下:rosrunturtlesimturtlesim_node__ns:=/xxx__name:=tn运行rosnodelist查看节点信息,其显示结果为:/xxx/tn2.rosrun名称重映射名称重映射即为节点起别名,其语法格式为:rosrun功能包名
节点名__name:=新名称具体案例:rosrunturtlesimturtlesim_node__name:=turtle1或rosrunturtlesimturtlesim_node/turtlesim:=turtle1rosrunturtlesimturtlesim_node__name:=turtle2或rosrunturtlesimturtlesim_node/turtlesim:=turtle2同样两个节点都可以运行,使用rosnodelist查看节点信息,结果如下:/turtle1/turtle2launch文件设置命名空间与重映射前面章节介绍launch文件的使用语法时,在<node>标签中有两个属性:name和ns,二者分别是用于实现名称重映射与命名空间设置的。使用launch文件方式来设置命名空间与名称重映射相对来说比较简单。下面是launch文件设置命名空间与名称重映射的示例。<launch><nodepkg="turtlesim"type="turtlesim_node"name="turtle1"/><nodepkg="turtlesim"type="turtlesim_node"name="turtle2"/><nodepkg="turtlesim"type="turtlesim_node"name="turtle1"ns="hello"/></launch>在<node>标签中,name属性是必须要的,而ns可选。运行上述launch文件后,使用rosnodelist命令查看节点信息,则显示结果为:/turtle1/turtle2/turtle1/hello编码设置命名空间与重映射如果使用自定义节点实现方式,那么可以更灵活地设置命名空间与重映射。1.C++实现重映射核心代码为:ros::init(argc,argv,"zhangsan",ros::init_options::AnonymousName);2.C++实现命名空间核心代码如下:std::map<std::string,std::string>map;map["__ns"]="xxxx";ros::init(map,"wangqiang");3.Python实现重映射核心代码:rospy.init_node("lisi",anonymous=True)ros话题名称设置04CATALOGUEros话题名称设置在ROS中节点名称可能出现相同名字的情况,同理,话题名称也可能重名。
解决策略与节点名称重名类似,也是使用名称重映射或为名称添加前缀。根据前缀不同,话题名称可以分为全局、相对、和私有三种类型。全局(参数名称直接参考ROS系统,与节点命名空间平级)相对(参数名称参考的是节点的命名空间,与节点名称平级)私有(参数名称参考节点名称,是节点名称的子级)名称重映射是为名称起别名,为名称添加前缀,实现起来比节点重名更复杂一点,不单是使用命名空间作为前缀、还可以使用节点名称做为前缀。两种策略的实现有以下三种途径:1)rosrun命令;2)launch文件;3)编码实现。rosrun设置话题重映射rosrun名称重映射语法:rorun功能包名
节点名
话题名:=新话题名称实现teleop_twist_keyboard命令与小海龟显示节点通信方案有以下两种。1.方案一将teleop_twist_keyboard节点的话题设置为/turtle1/cmd_vel启动键盘控制节点:rosrunteleop_twist_keyboardteleop_twist_keyboard.py/cmd_vel:=/turtle1/cmd_vel启动小海龟显示节点:rosrunturtlesimturtlesim_node则二者可以实现正常通信。2.方案二将小海龟显示节点的话题设置为/cmd_vel启动键盘控制节点:rosrunteleop_twist_keyboardteleop_twist_keyboard.py启动小海龟显示节点:rosrunturtlesimturtlesim_node/turtle1/cmd_vel:=/cmd_vel则二者同样可以实现正常通信。launch文件设置话题重映射launch文件设置话题重映射语法如下:<nodepkg="xxx"type="xxx"name="xxx"><remapfrom="原话题"to="新话题"/></node>实现teleop_twist_keyboard节点与小海龟显示节点通信方案有以下两种。1.方案一将teleop_twist_keyboard节点的话题设置为/turtle1/cmd_vel<launch><nodepkg="turtlesim"type="turtlesim_node"name="t1"/><nodepkg="teleop_twist_keyboard"type="teleop_twist_keyboard.py"name="key"><remapfrom="/cmd_vel"to="/turtle1/cmd_vel"/></node></launch>这样可以实现二者的正常通信。launch文件设置话题重映射2.方案二将小海龟显示节点的话题设置为/cmd_vel<launch><nodepkg="turtlesim"type="turtlesim_node"name="t1"><remapfrom="/turtle1/cmd_vel"to="/cmd_vel"/></node><nodepkg="teleop_twist_keyboard"type="teleop_twist_keyboard.py"name="key"/></launch>同样可以实现二者的正常通信。编码设置话题重映射演示准备:(1)初始化节点,设置一个节点名称;ros::init(argc,argv,"hello")(2)设置不同类型的话题。(3)启动节点时,传递一个__ns:=xxx。(4)节点启动后,使用rostopic查看话题信息。1)全局名称格式:以“/”开头的名称,和节点名称无关比如:/xxx/yyy/zzz示例1:ros::Publisherpub=nh.advertise<std_msgs::String>("/chatter",1000);结果1:/chatter示例2:ros::Publisherpub=nh.advertise<std_msgs::String>("/chatter/money",1000);结果2:/chatter/money编码设置话题重映射2)相对名称格式:非“/”开头的名称,参考命名空间(与节点名称平级)来确定话题名称示例1:ros::Publisherpub=nh.advertise<std_msgs::String>("chatter",1000);结果1:xxx/chatter示例2:ros::Publisherpub=nh.advertise<std_msgs::String>("chatter/money",1000);结果2:xxx/chatter/money编码设置话题重映射3)私有名称格式:以“~”开头的名称示例1:ros::NodeHandlenh("~");ros::Publisherpub=nh.advertise<std_msgs::String>("chatter",1000);结果1:/xxx/hello/chatter示例2:ros::NodeHandlenh("~");ros::Publisherpub=nh.advertise<std_msgs::String>("chatter/money",1000);结果2:/xxx/hello/chatter/money注:当使用“~”,而话题名称又以“/”开头时,那么话题名称是绝对的ros参数名称设置05CATALOGUEros参数名称设置
在ROS中的节点名称、话题名称可能出现同名的情况,同理,参数名称也可能重名。
为了避免参数重名,通常都是采用为参数名添加前缀的方式,其实现方式类似于话题名称,有全局、相对和私有三种类型。
全局(参数名称直接参考ROS系统,与节点命名空间平级);
相对(参数名称参考的是节点的命名空间,与节点名称平级);
私有(参数名称参考节点名称,是节点名称的子级)。
设置参数的方式同样有三种方式:rosrun命令、launch文件、编码实现。rosrun设置参数rosrun在启动节点时,也可以设置参数。语法:rosrun功能包名
节点名称_参数名:=参数值启动小海龟显示节点,并设置参数A=100,语句为:rosrunturtlesimturtlesim_node_A:=100通过运行rosparamlist查看节点信息,结果显示为:/turtlesim/A/turtlesim/background_b/turtlesim/background_g/turtlesim/background_r结果显示参数A前缀节点名称,也就是说rosrun执行设置参数,参数名使用的是
私有模式。launch文件设置参数
通过launch文件设置参数时,可以在<node>标签外,或<node>标签中通过<param>或<rosparam>来设置参数。在<node>标签外设置的参数是全局性质的,参考的是“/”,在<node>标签中设置的参数是私有性质的,参考的是/命名空间/节点名称。以<param>标签为例设置参数如下:<launch><paramname="p1"value="100"/><nodepkg="turtlesim"type="turtlesim_node"name="turtle1"><paramname="p2"value="100"/></node></launch>通过运行rosparamlist命令查看节点信息,其结果为:/p1/turtle1/p2编码设置参数使用C++方式时,可以使用ros::param或者ros::NodeHandle来设置参数。1)ros::param设置参数设置参数调用的API是ros::param::set,该函数中,参数1传入参数名称,参数2是传入参数值,参数1中设置参数名称时,如果以“/”开头,那么就是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 未来五年采矿专用设备修理企业县域市场拓展与下沉战略分析研究报告
- 2026年江门职业技术学院单招职业技能笔试模拟试题带答案解析
- 养老院老人健康饮食营养师培训制度
- 2025-2030农业市场供需现状分析及投资价值规划分析报告
- 2025-2030农业科技行业市场竞争分析及投资评估发展前景规划研究
- 2025-2030农业科技行业市场供需调研投资潜力评估规划报告
- 2025-2030农业科技现代化转型路径研究及生态农业与品牌价值提升报告
- 2025-2030农业现代化进程与特色农产品投资开发规划
- 2025-2030农业机械市场开发现状与投资机会发展规划评估报告
- 2025-2030再生医学行业风险投资发展分析及投资融资策略研究报告
- 完整版老旧小区改造工程施工组织设计方案
- 全球隐球菌病指南(2024版):诊断与管理课件
- 市场营销策划实践实习报告范例
- 2026年中央广播电视总台招聘124人备考笔试题库及答案解析
- 担保取消协议书
- 2025国家统计局滨海新区调查队辅助调查员招聘3人备考笔试试题及答案解析
- 星罗棋布的港口课件
- 2025天津市机电工艺技师学院招聘派遣制社会化21人(第二批)考试题库附答案
- 统一顶新食品成品仓库管理的手册
- 2025年洛阳市公安机关招聘辅警501名考试题库附答案
- 金刚网窗合同范本
评论
0/150
提交评论