(四)ROS学习
一.概念
ROS是一种分布式软件框架,节点之间通过松耦合的方式进行组合。
- 网络层及以下的各层实现了网络中主机之间的通信,但是数据通信不是最终的目的;计算机网络最本质的活动是分布在不同地理位置的主机之间的进程通信,以实现各种网络服务功能;设置传输层的主要目的就是要实现分布式进程通信。
- 松耦合系统通常是基于消息的系统,此时客户端和远程服务并不知道对方是如何实现的。客户端和服务之间的通讯由消息的架构支配。只要消息符合协商的架构,则客户端或服务的实现就可以根据需要进行更改,而不必担心会破坏对方。
二.如何实现分布式多机通信
1.设置IP地址,确保底层链路的联通
- 查看两台计算机的IP地址:
ifconfig
,将IP地址分别设置到对方的hosts文件夹里面sudo vi /etc/hosts
- 在两台计算机上分别使用ping命令,测试网络是否联通。
2.在从机端设置ROS_MASTER_URI,让从机找到ROS Master(因为ros master只能存在一个,故需要告诉计算机roscore是运行在哪个计算机上)
主机:roscore
;
从机:vi .bashrc
export ROS_MASTER_URI-http:/主机名字:11311 (当前终端有效)
或echo "export ROS_MASTER_URI-http:/主机名字:11311" >~.bzshrc (所有终端有效)
此时在主机启动小海龟例程,从机远端可以查看话题列表rostopic list
,并发布控制运动命令控制小海龟运动(命令见(一)ros学习)
三.ROS的关键组件
1. launch文件:通过XML文件实现多节点的配置和启动(可自动启动ROS Master)
2.Qt工具箱
- 日志输出工具:
rqt_console
- 计算图可视化工具:
rqt_graph
- 数据绘图工具:
rqt_plot
- 参数动态配置工具:
rqt_reconfigure
3.Rviz可视化平台
- Rviz是一款三维可视化工具,可以很好的兼容基于ROS软件框架的机器人平台。
- 在rviz中,可以使用可扩展标记语言XML对机器人、周围物体等任何实物进行尺寸、质量、位置、材质、关节等属性的描述,并且在界面中呈现出来。
- 同时, rviz还可以通过图形化的方式,实时显示机器人传感器的信息、机器人的运动状态、周围环境的变化等信息。
- 总而言之, rviz通过机器人模型参数、机器人发布的传感信息等数据,为用户进行所有可监测信息的图形化显示。用户和开发者也可以在rviz的控制界面下,通过按钮、滑动条、数值等方式,控制机器人的行为。
4.Gazebo物理仿真环境
gazebo_ros
:主要用于gazebo接口封装、gazebo服务端和客户端的启动、URDF模型生成等。gazebo_msgs
:是gazebo的Msg和Srv数据结构。gazebo_plugins
:用于gazebo的通用传感器插件。gazebo_ros_api_plugin
和gazebo_ros_path_plugin
这两个Gazebo的插件实现接口封装。
仿真流程:创建仿真环境——配置机器人模型——开始仿真。
5.TF坐标变换