ROS的节点有很多中调用方式,包括rosrun,launch,直接运行等,向节点内传递参数的方式也有很多。

1. rosrun + 参数服务器传递

ros::init(argc, argv, "imu2txt");

ros::NodeHandle nh("~");

std::string file_name;

nh.param<std::string>("file_name", file_name, "./imu_data.txt");

首先在节点初始化之后获取参数服务器的参数,并设置初始值,如上面的程序就是在参数服务器的~空间(即节点本身)获取名字为"file_name"的参数放到std::string file_name中,默认参数为后面那个。

接着就可以rosrun了。下面是命令

rosrun package node _parameter:=value

在我们这里就是rosrun datatxt imu2txt _file_name:=~/Documents/test.txt就可以将节点内的参数改为想要的值了。

注意: string不需要加双引号,string第一个字符不能是数字

2. roslaunch + 参数服务器传递

同样是上面的例子,我们如果想通过roslaunch来调用的话,可以像下面这样,将参数放在node之间。

<launch>
     <node name="imu2txt" pkg="data2txt" type="imu2txt" respawn="false" output="screen" >
         <param name="file_name"         type="string" value="/home/night_fury/Documents/record_bags/calibration/imudata_to_wall.txt"/> 
     </node>

</launch>

3. rosrun + main参数传递


int main(int argc, char** argv)

main函数有两个参数argc, argv。argc = length(argv),argv[0]是程序的名字,argv[1]到argv[argc - 1]是传递给程序的参数,按空格分割参数后以char指针的形式存储。这是C、C++的特性,跟ros无关,你编写的C++程序也可以这么用。你编写的ros程序甚至可以直接运行,并通过这种方式传递参数,而不用rosrun或者roslaunch。

比如我们常用的map_server、rosbag就是用的这种参数传递方式。

rosrun map_server map_saver -f ~/Documents/test或者直接找到二进制文件后map_saver -f ~/Documents/test

像上面这样运行程序,那么

argc=3 

argv[0]="map_server" 

argv[1]="-f" 

argv[2]="test" 

你就可以在程序中使用这些参数了。

4. roslaunch + main参数传递

续上,如果使用main参数传递,那在roslaunch应该怎么样呢?如下,使用args:

<launch>
     <node name="map_server" pkg="map_server" type="map_server" args="$(find costmap_2d)/test/willow-full-0.025.pgm 0.025" />
     <node name="rosplay" pkg="rosbag" type="play"
         args="-s 5 -r 1 --clock --hz=10 $(find costmap_2d)/test/simple_driving_test_indexed.bag" />

</launch>

ROS向节点传递参数的更多相关文章

  1. React对比Vue(03 事件的对比,传递参数对比,事件对象,ref获取DOM节点,表单事件,键盘事件,约束非约束组件等)

    import React from 'react'; class Baby extends React.Component { constructor (props) { super(props) t ...

  2. 关于javaScript注册事件传递参数的浅析

    最近这半年作为一个java 程序员,我写的javaScript代码都快比java代码多了,前段时间是给某银行做一个柜员管控系统,在柜员授权这一块功能上,由于柜员的授权需要考虑各方面的因素,比如机构权限 ...

  3. WebService 实现BS环境与BS环境传递参数,根据参数生成txt文档

    客户端: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Client.as ...

  4. EasyUI Tree 动态传递参数

    1.问题背景 一般出现在加载的时候,传递参数给后台,进行数据筛选,然后在加载tree渲染数据.所谓动态参数,可以是你的上一级节点node,或者是根节点node. 2.涉及方法 onBeforeLoad ...

  5. springboot websocket集群(stomp协议)连接时候传递参数

    最近在公司项目中接到个需求.就是后台跟前端浏览器要保持长连接,后台主动往前台推数据. 网上查了下,websocket stomp协议处理这个很简单.尤其是跟springboot 集成. 但是由于开始是 ...

  6. Vue 给子组件传递参数

    Vue 给子组件传递参数 首先看个例子吧 原文 html <div class="container" id="app"> <div clas ...

  7. [转] C++的引用传递、指针传递参数在java中的相应处理方法

    原文出处:[http://blog.csdn.net/conowen/article/details/7420533] 首先要明白一点,java是没有指针这个概念的. 但是要实现C++的引用传递.指针 ...

  8. 记一次WinForm程序中主进程打开子进程并传递参数的操作过程(进程间传递参数)

    目标:想在WinForm程序之间传递参数.以便子进程作出相应的处理. 一种错误的方法 父进程的主程序: ProcessStartInfo psi = new ProcessStartInfo(); p ...

  9. 在 Angularjs 中 ui-sref 和 $state.go 如何传递参数

    1 ui-sref.$state.go 的区别 ui-sref 一般使用在 <a>...</a>: <a ui-sref="message-list" ...

随机推荐

  1. minggw 安装

    windows上如果没有安装 visual studio, 也就是俗称的vs, 在安装一些带有c或者c++代码的Python模块的时候, 会报错Unable to find vcvarsall.bat ...

  2. 初识Android App自动化测试框架--Unittest

    1.为什么需要使用框架实现自动化测试 作为测试工程师,可能在代码能力上相比开发工程师要弱一点,所以我们在写脚本的时候就会相对容易的碰到更多的问题,如果有一个成熟的框架供给我们使用的话,可以帮助我们避免 ...

  3. 在vue项目中通过iframe引入jquery项目

    最近公司因为原来的jq框架存在的问题太多,所以要进行主题框架的重新搭建,我使用的vue进行的主题框架的重新搭建,但是原来的页面已经完成很多了,而且都是使用的jquery进行开发的 在vue中引入jqu ...

  4. 【Java】简体中文、繁体中文转换

    项目中用到繁体中文语言适配,目前已经有开源的框架可以将简体中文转换成繁体中文,在此基础上封装了一个工具类,可以直接将简体中文的strings.xml转换成繁体中文的strings.xml. 引用Jar ...

  5. Scrum 冲刺第五篇

    我们是这次稳了队,队员分别是温治乾.莫少政.黄思扬.余泽端.江海灵 一.会议 1.1  29号站立式会议照片: 1.2  昨天已完成的事情 团队成员 昨日计划完成的工作: 黄思扬 活动管理模块(前端) ...

  6. odoo12 权限配置1

    权限配置文档说明,这里使用公司开发的两个权限配置模块,可以快速的帮助你来配置复杂的odoo权限. 安装以下两个模块,SystemGroups模块是快速帮助你批量添加,创建基础群组需要用到的模块 Bas ...

  7. Django 简单的验证码

    创建一个 Django 项目:yanzhengma 和 应用 app01 修改 urls.py 文件 from django.contrib import admin from django.urls ...

  8. Django框架(二十三)-- Django rest_framework-视图组件

    一.基本视图 class PublishView(APIView): def get(self, request): publish_list = Publish.objects.all() bs = ...

  9. 201871010124-王生涛《面向对象程序设计(java)》第十三周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...

  10. Win10 Mactype 字体优化

    1.下载安装 Mactype :http://www.mactype.net/ 2. 打开MacType Tray.exe,右键其在任务栏图标就能选择配置文件. 分享一个配置文件: [General] ...