rosparam 用来和参数服务器进行交互,其指令如下
rosparam list 显示当前有哪些参数
get <参数名> 获得参数值
set <参数名> <参数值> 设置参数
dump <文件名> 保存参数文件
load <文件名> 读取文件
delete <参数名> 删除参数
在cpp文件中可以采用ros::param::<命令>来获得参数
ros::param::get(<参数名>,<变量名>)//将参数的值保存到变量
ros::param::set(<参数名>,<变量名>)//将变量的值赋给参数
可以采用这种方法和roslaunch结合使用。
=================================================================================================
tf —— ros坐标管理系统
TF功能包主要用来记录,计算各个节点的坐标。其采用广播TF变换和监听TF变换来实现。
展现方式多种,可有:
tf rosrun tf view_frames //显示TF坐标树(坐标变换关系)
tf tf_echo <节点1> <节点2> //显示两个节点的坐标变换情况
rosrun rviz rviz -d ‘rospack find <包>’ <路径> //rviz显示
广播器:用来向外发送位姿矩阵,一般这部分都会放在回调函数中,利用监听来获得位姿信息。
http://wiki.ros.org/tf/Tutorials/Writing%20a%20tf%20broadcaster%20%28C++%29
#include <ros/ros.h> //头文件
#include<tf/transform_broadcaster.h> //头文件
int main(int argc, char** argv)
{
ros::init(argc, argv, <节点名>);//节点初始化
ros::NodeHandle n;
tf::TransformBroadcaseter <广播器名>;//创建广播器
tf::Transform <tf数据名>;//创建一个数据
<tf数据名>.setOrigin(tf::Vector3(<x赋值>,<y赋值>,<z赋值>));//对t进行赋值
tf::Quaternion q; //定义 四元数
q.setRPY(<绕x轴角度>,<绕y轴角度>,<绕z轴角度>);//绕轴旋转角度赋值
<tf数据名>.setRotation(q);//四元数赋值
<广播器名>.sendTransform(tf::StampedTransform(<tf数据名>,ros::time::now(),<坐标系名a>,<坐标系名b>));//对tf数据进行广播,需要指定:<tf数据名>(位姿矩阵是什么),ros::time::now()(时间戳,now就是最新的),位姿矩阵是哪两个坐标系的。
return 0;
}
监听器:用来接收位姿矩阵的,
#include <ros/ros.h>
#include <tf/transform_listener.h>
int main(int argc, char** argv)
{
ros::init(argc, argv, <节点名>);//创建节点
ros::NodeHandle n;
tf::transformListener <监听器名>;
ros::Rate rate(10.0);
while(node.ok())
{
tf::StampedTransform <tf坐标系名>;
try
{
listener.waitForTransform(<坐标系名a>, <坐标系名b>,ros::Time(0), ros::Duration(3.0));
listener.lookupTransform(<坐标系a>,<坐标系名b>,ros::Time(0), <tf坐标系名>);
}
catch(tf::TransformException &ex)
{
ROS_ERROR("%s",ex.what());
ros::Duration(1.0).sleep();
continue;
}
rate.sleep();
}
return 0;
}
lookupTransform()计算两个坐标系的关系,从a到b的转换。
transformPoint(<名称>,<坐标a>,<坐标系名b>);将a坐标系下的坐标,变换到b坐标系下
refer:https://blog.csdn.net/Start_From_Scratch/article/details/50762293
ros::Time(0)是实时运算,但是因为计算延时不能达到now()的程度
================================================================================================
roslaunch 启动文件,其功能是可以启动多个节点,并且缺省启动roscore,结合rosparam可以对节点的参数进行设置。
1、根元素
<launch>
</launch>
2、节点
<node pkg=<功能包名> type=<可执行文件名> name=<节点运行名称> />
上面3个是必须参数,还有很多可选参数。
args = "" 将参数传递给节点
respawn="true"如果节点挂了,就自动重启
required="true"如果节点终止,则关闭runlaunch
ns="" 命名空间
output="log|screen"输出模式
……
3、param与rosparam
rosparam用来读取参数列表
<rosparam command="load" file="$(find pkg-name)/example.yaml" /> 读取pkg-name目录下的ymal文件:
example.yaml:
A: 123
B: "hello"
group:
C: 456
D: "hello"
<rosparam command="delete" param="my/param" /> 也可以用来删除参数。
param 一个参数
<param name="publish_frequency" type="double" value="10.0" />
arg:局部变量 $(arg-name)=arg-value",进行调用
<arg name="arg-name" default="arg-value">
<node name="" pkg="" type="" args=$(name)/>
remap:重命名
<remap from=<资源名a> to=<资源名b>>
将资源从a命名为b
include:包括其他文件的launch
<include file=<文件路径>>