ROS传参方式
参数
函数定义
时,使用变量名
表示参数。使用参数
时,将其数值
传入程序
。
一、main()的argc、argv变量
<arg>
- 仅限launch文件内部使用
- 在launch文件中,使用
<arg>
给代码中参数赋值
,并传入代码
中使用。 <arg>
标签的arguments
只有在launch文件
里合法
(launch文件内部的局部变量
),它们的值不直接提供给节点
。.launch
文件,使用的每一个argument
必须赋值- 命令行赋值,使用
:=
赋值符号
roslaunch 功能包名 .launch文件名 参数名:=参数值
.launch
文件中,- 参数的值被default 、value
定义后
,在别处,使用$(arg 参数名)
表示参数的值
- 参数的值被default 、value
或者<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)
- row 4的
文件:/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.h
中class AuboDriver
中的private
的row175
3. 参考
感谢作者们!