ROS传参方式

参数

  • 函数定义时,使用变量名表示参数。
  • 使用参数时,将其数值传入程序

一、main()的argc、argv变量

<arg> - 仅限launch文件内部使用

  • 在launch文件中,使用 <arg>代码中参数赋值,并传入代码中使用。
  • <arg>标签的arguments只有在launch文件合法(launch文件内部的局部变量),它们的值不直接提供给节点
  • .launch文件,使用的每一个argument必须赋值
    • 命令行赋值,使用:=赋值符号
    roslaunch 功能包名 .launch文件名 参数名:=参数值
    
    • .launch文件中,
      • 参数的值被default 、value定义后,在别处,使用$(arg 参数名)表示参数的值
    <arg name="参数名" default="参数值">
    
    或者
    <arg name="参数名" value="参数值">
    
    二者区别:
    命令行给argument赋值,可以覆盖default的值。不能覆盖value的值。

二、参数服务器

1.<param>、<rosparam>

(1)<param> - 传到参数服务器

  • .launch文件通过元素将parameter加载到ROS参数服务器,以便各个节点的使用
  • 活动(运行)的节点可以通过ros::param::get()接口,获取parameter的数值。
    • row 4的server_host_变量
      • (s==""):判断字符串s是否等于空字符串
      • 如果 (s=="") = true,server_host_ = 127.0.0.1
      • 如果 (s=="") = false,server_host_ = 字符串s(/aubo_driver/server_host)

文件:/aubo_robot/aubo_driver/src/aubo_driver.cpp

 std::string s;
 //The server_host should be corresponding to the robot controller setup.
 ros::param::get("/aubo_driver/server_host", s); 
 server_host_ = (s=="")? "127.0.0.1" : s;
 std::cout<<"server_host:"<<server_host_<<std::endl;
  • ROS程序启动时,在终端使用rosparam指令,获得parameter的数值。
  • 元素的使用方法
<param name="/server_host" value="127.0.0.1"/>

运行moveit_planning_execution.launch后,aubo_driver/server_host参数的值就设置为127.0.0.1。并加载到ROS参数服务器

(2)<rosparam> -传到参数服务器

  • <param>一次只能加载一个参数。<rosparam>可以同时加载多个参数。
  • <rosparam>标签作用
    • .yaml文件导入参数
    • 参数导出.yaml文件
    • 删除参数
  • <rosparam>标签在<node>中,为私有的
  • 写法
    • command=“load | dump | delete” (可选,默认 load), 加载、导出、删除参数。
    • file =" $(find 功能包名)/文件夹名/.yaml文件名"加载、导出到的.yaml文件
    • param = "参数名称"
    • ns = "命名空间"(可选)
<rosparam command="load" file="$(find aubo_i5_moveit_config)/config/joint_names.yaml"/>

2. robot_ip的值如何控制仿真& 真机?

(1)文件:aubo_robot/aubo_i5_moveit_config/launch/moveit_planning_execution.launch
使用aubo_driver/server_host参数举例。

  <arg name="robot_ip" default="127.0.0.1"/>
<!-- publish the robot state (tf transforms) -->
  <node name="aubo_driver" pkg="aubo_driver" type="aubo_driver" >
  	<param name="/server_host" type="str" value="$(arg robot_ip)"/>
  	<!--<param name="/server_host" value="127.0.0.1"/>-->
  </node>

(2)启动moveit

roslaunch aubo_i5_moveit_config moveit_planning_execution.launch robot_ip:=ip地址
  • robot_ip:=127.0.0.1 ,启动仿真
  • robot_ip:=示教器上的ip地址,启动真机
    (3)参数robot_ip使用default属性赋值,命令行可以重新赋值,不需要修改.launch`文件内容。
  • <param>参数,不能在命令行赋值!!!
  • <arg><param>赋值的用处:
    • 如果<arg>的属性是default,可以通过不修改launch文件的情况下修改参数的值

(4)如果moveit_planning_execution.launch写成如下:
aubo_driver/server_host =127.0.0.1参数的值就写死了。只能实现仿真。

  <arg name="robot_ip" default="127.0.0.1"/>
<!-- publish the robot state (tf transforms) -->
  <node name="aubo_driver" pkg="aubo_driver" type="aubo_driver" >
  	<param name="/server_host" value="127.0.0.1"/>
  </node>

3. robot_ip参数流程

(1)通过roslaunch aubo_i5_moveit_config moveit_planning_execution.launch robot_ip:=ip地址指令定义robot_ip的值。
(2)在aubo_robot/aubo_i5_moveit_config/launch/moveit_planning_execution.launch文件中,将
参数aubo_driver/server_host 赋值为 $(arg robot_ip) robot_ip参数的值。
(3)在/aubo_robot/aubo_driver/src/aubo_driver.cpp文件中,通过ros::param::get("/aubo_driver/server_host", s); ,将参数aubo_driver/server_host 的值传递给字符串s字符串s将值传递给server_host_变量。
(4)server_host_变量的声明:
aubo_robot/aubo_driver/include/aubo_driver/aubo_driver.hclass AuboDriver中的private的row175
在这里插入图片描述

3. 参考

感谢作者们!

  1. ROS探索总结(五十六)—— launch文件
  2. ROS 提高篇 之 Launch 深入研究 - 01 — 启动文件的编程 — ROS 的 XML语法简介
  3. launch文件arg和param传参
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在Ubuntu 18.04上安装ROS Melodic的步骤: 1. 添加ROS存储库 首先,我们需要将ROS存储库添加到Ubuntu软件源中。打开终端并输入以下命令: ```bash sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' ``` 2. 添加ROS密钥 然后,我们需要添加ROS密钥,以验证软件包的完整性。在终端中输入以下命令: ```bash sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 ``` 3. 更新软件包列表 输入以下命令以更新软件包列表: ```bash sudo apt update ``` 4. 安装ROS 输入以下命令以安装ROS桌面完整版: ```bash sudo apt install ros-melodic-desktop-full ``` 5. 初始化rosdep 在我们可以使用ROS之前,我们需要初始化rosdep。rosdep是ROS的依赖项管理工具,可以帮助我们安装和编译ROS程序的依赖项。输入以下命令以初始化rosdep: ```bash sudo rosdep init rosdep update ``` 6. 配置环境 我们需要为ROS设置环境变量。输入以下命令以打开bashrc文件: ```bash nano ~/.bashrc ``` 在文件末尾添加以下两行: ```bash source /opt/ros/melodic/setup.bash source ~/.bashrc ``` 保存并关闭文件。 7. 测试 输入以下命令以启动roscore: ```bash roscore ``` 然后在新终端中输入以下命令以启动ROS节点: ```bash rosrun turtlesim turtlesim_node ``` 现在,你应该可以看到一个小乌龟在屏幕上移动了!恭喜你,ROS Melodic已经成功安装! 如果需要更详细的安装说明或遇到任何问题,请查阅ROS官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值