ROS基础
- 同一个工作空间下,不允许存在同名功能包;不同工作空间下,允许存在同名功能包。
- 通过设置ROS工作空间的环境变量,即可实现ROS工作空间的Overlaying机制,即工作空间的覆盖,实际为切换。
ROS通信编程
- 话题编程。
- 服务编程。
- 动作编程。
什么是动作(action) - 一种问答的通信机制;
- 带有连续反馈;
- 可以在任务过程终止运行;
- 基于ROS的消息机制实现;
动作(action)接口: - goal:发布任务目标;
- cancel:请求取消任务;
- status:通知客户端当前的状态;
- feedback:周期反馈任务运行的监控数据;
- result:向客户端发送任务的执行结果,只发布一次;
ERROR: 针对函数
解决问题的链接
typedef actionlib::SimpleActionClient<learning_communication::DoDishesAction> Client;
....
// 定义一个客户端
Client client("do_dishes", true);
此处出现段错误,原因是Boost库在系统中存在两个版本。
解决方法:删除其中一个boost版本即可。
自己编译安装的boost库安装目录在/usr/local/include /usr/local/lib
目录下,
sudo rm –rf /usr/local/include/boost
sudo rm –rf /usr/local/lib/libboost_*
第三方安装附带的boost库安装目录在/usr/include /usr/lib
。
分布式通信
ROS是一种分布式的软件框架,节点之间通过松耦合的方式进行组合。
- 确保底层链路联通;
- 设置/etc/hosts文件,添加对方的IP地址和计算机名称;
- 设置ROS_MASTER_URI环境变量,确保从机能找到主机的ROS Master(每台计算机都需要设置);设置ROS_HOSTNAME;
launch文件
通过XML文件实现多节点的配置和启动(可自启动ROS Master);
基本元素
**launch>**
:launch文件中的根元素采用标签定义;
<launch>
........
</launch>
采用标签启动ROS节点:属性(pkg、type、name)
。
pkg:定义节点所在功能包的名称;
type:定义节点的可执行文件的名称;
上述两个参数等同于在终端使用rosrun
输入的参数;
name:用来定义节点运行的名称,将覆盖节点中init()
赋予节点的名称。
- output = “screen”:将节点的标准输出打印到终端屏幕,默认输出为日志文档;
- respawn = “true”:复位属性,该节点停止时,会自动重启,默认为false;
- required = “true”:必要节点,当该节点终止时,launch文件中的其他节点也被终止;
- ns = “namespace”:命名空间,为节点内的相对名称添加命名空间前缀;
- args = “arguments”:节点需要的输入参数。
参数设置
代表parameter
,是ROS系统运行中的参数,存储在参数服务器中。每个活跃的节点都可以通过 ros::param::get()
接口来获取parameter
的值,用户也可以在终端中通过rosparam
命令获得parameter
的值。
例:
<param name="output_frame" value="odom"/>
或者使用批量加载参数,可以帮助我们将一个yaml格式文件中的参数全部加载到ROS参数服务器中,需要设置command属性为“load”,还可以选择设置命名空间“ns”。
例:
<rosparam file="params.yaml" command="load" ns="params"/>
代表argument,类似于launch文件内部的局部变量,仅限于launch文件使用,便于launch文件的重构,和ROS节点内部的实现没有关系。
例:
<param name = "foo" value="$(arg arg-name)"/>
<node name = "node" pkg = "package" type = "type" args = "$(arg arg-name)" />
重映射机制
将不同名称的Topic关联在一起。重映射ROS计算图资源的命名。
例:
<remap from = "/turtlebot/cmd_vel" to = "/cmd_vel" />
嵌套复用
可以使用标签包含其他launch文件
例:
<include file = "$(dirname)/other.launch" />
TF坐标变换
学习过程参考古月居大神主页:
ROS探索总结(十八)——重读tf
ROS探索总结(二十二)——设置机器人的tf变换
机器人操作系统ROS从入门到放弃(九):使用tf追踪不同坐标系
ROS机器人TF基础(坐标相关概念和实践)
QT工具箱
- 日志输出工具——rqt_console
- 计算图可视化工具——rqt_graph
- 数据绘图工具——rqt_plot
- 参数动态配置工具——rqt_reconfigure