ROS1{\rm ROS1}ROS1的基础及应用,基于古月的课,各位可以去看,基于hawkbot{\rm hawkbot}hawkbot机器人进行实际操作。
ROS{\rm ROS}ROS版本:ROS1{\rm ROS1}ROS1的Melodic{\rm Melodic}Melodic;实际机器人:Hawkbot{\rm Hawkbot}Hawkbot;
1.ROS的历史起源
- 200720072007年,诞生于斯坦福STAIR{\rm STAIR}STAIR项目Morgan Quigley{\rm Morgan\ Quigley}Morgan Quigley;
- 200820082008年,Willow Garage{\rm Willow\ Garage}Willow Garage接手;
- 2010{\rm 2010}2010年,ROS 1.0{\rm ROS\ 1.0}ROS 1.0发布;
- 201120112011年,TurtleBot{\rm TurtleBot}TurtleBot发布;
- 201220122012年,第一届ROScon{\rm ROScon}ROScon,ROS Fuerte、ROS Groovy{\rm ROS\ Fuerte、ROS\ Groovy}ROS Fuerte、ROS Groovy发布;
- 201320132013年,OSRF(Open Source Robotics Foundation){\rm OSRF(Open\ Source\ Robotics\ Foundation)}OSRF(Open Source Robotics Foundation)接管,ROS Hydro{\rm ROS\ Hydro}ROS Hydro发布;
- 201420142014年,ROS Indigo{\rm ROS\ Indigo}ROS Indigo发布;
- 201520152015年,ROS Jade{\rm ROS\ Jade}ROS Jade发布;
- 201620162016年,ROS Kinetic{\rm ROS\ Kinetic}ROS Kinetic发布;
- 201720172017年,ROS 2.0 Ardent{\rm ROS\ 2.0\ Ardent}ROS 2.0 Ardent发布,ROS Lunar{\rm ROS\ Lunar}ROS Lunar发布;
- 201820182018年,ROS Melodic{\rm ROS\ Melodic}ROS Melodic发布;
- 202020202020年,ROS Noetic{\rm ROS\ Noetic}ROS Noetic发布;
2.ROS的总体设计
-
一个目标:提高机器人研发中的软件复用率;
-
五个特点:
- 点对点的设计;
- 节点单元;
- 分布式网络;
- RPC+TCP/UDP{\rm RPC+TCP/UDP}RPC+TCP/UDP通信系统;
- 适合多机协同;
- 多语言支持;
- 支持Python、C{\rm Python、C}Python、C++、Java{\rm Java}Java等编程语言;
- 语言无关的接口定义;
- 架构精简、集成度高;
- 每个功能节点可以单独编译;
- 集成众多开源项目;
- 接口统一、提高软件复用性;
- 组件化工具包丰富;
- 3D{\rm 3D}3D可视化工具——rviz{\rm rviz}rviz;
- 物理仿真环境——gazebo{\rm gazebo}gazebo;
- 数据记录工具——rosbag{\rm rosbag}rosbag;
- Qt{\rm Qt}Qt工具箱——rqt_∗{\rm rqt\_*}rqt_∗;
- 免费且开源;
- BSD{\rm BSD}BSD许可,可修改、可复用、可商用;
- 软件包数量指数级增加,良好的生态系统;
- 点对点的设计;
-
四位一体:
ROS{\rm ROS}ROS=通信机制+开发工具+应用功能+生态系统;
3.ROS的系统实现
ROS{\rm ROS}ROS系统实现的三个层次:

3.1 计算图
-
ROS{\rm ROS}ROS的计算图实例

-
计算图
- 节点(Node)({\rm Node})(Node)——软件模块;
- 节点管理器(ROS Master)({\rm ROS\ Master})(ROS Master)——控制中心,提供参数管理;
- 话题(Topic)({\rm Topic})(Topic)——异步通信机制,传输消息(Message)({\rm Message})(Message);
- 服务(Service)({\rm Service})(Service)——同步通信机制,传输请求/应答数据;
-
话题通信机制

- Talker{\rm Talker}Talker注册;
- Listener{\rm Listener}Listener注册;
- ROS Master{\rm ROS\ Master}ROS Master进行信息匹配;
- Listener{\rm Listener}Listener发送连接请求;
- Talker{\rm Talker}Talker确认连接请求;
- 建立网络连接;
- Talker{\rm Talker}Talker向Listener{\rm Listener}Listener发布数据;
-
服务通信机制

- Talker{\rm Talker}Talker注册;
- Listener{\rm Listener}Listener注册;
- ROS Master{\rm ROS\ Master}ROS Master进行信息匹配;
- 建立网络连接;
- Talker{\rm Talker}Talker向Listener{\rm Listener}Listener发布服务器应答数据;
-
参数通信机制

- Talker{\rm Talker}Talker设置变量;
- Listener{\rm Listener}Listener查询参数值;
- ROS Master{\rm ROS\ Master}ROS Master向Listener{\rm Listener}Listener发送参数值;
-
话题与服务的区别
话题 服务 同步性 异步 同步 通信模型 发布/订阅 服务器/客户端 底层协议 ROSTCP/ROSUDP{\rm ROSTCP/ROSUDP}ROSTCP/ROSUDP ROSTCP/ROSUDP{\rm ROSTCP/ROSUDP}ROSTCP/ROSUDP 反馈机制 无 有 缓冲区 有 无 实时性 弱 强 节点关系 多对多 一对多 适用场景 数据传输 逻辑处理
3.2 ROS的文件系统
-
功能包清单(Package manifest)({\rm Package\ manifest})(Package manifest):记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志等;
-
元功能包(Meta Packages)({\rm Meta\ Packages})(Meta Packages):组织多个用于同一目的功能包;
-
元功能包清单(Meta Packages)({\rm Meta\ Packages})(Meta Packages):类似于功能包清单,不同之处在于元功能包清单中可能包含运行时需要依赖的功能包或声明一些引用的标签;
-
消息类型(Message)({\rm Message})(Message):消息是ROS{\rm ROS}ROS节点之间发布/订阅的通信消息,可以使用ROS{\rm ROS}ROS系统提供的消息类型,亦可以使用.msg{\rm .msg}.msg文件在功能包的msg{\rm msg}msg文件夹下自定义需要的消息类型;
-
服务类型(Service)({\rm Service})(Service):服务类型定义了ROS{\rm ROS}ROS服务器/客户端通信模型下的请求与应答数据类型,可以使用ROS{\rm ROS}ROS系统提供的服务类型,亦可以使用.srv{\rm .srv}.srv文件在功能包的srv{\rm srv}srv文件夹中进行定义;
-
代码(Code)({\rm Code})(Code):放置功能包节点源代码的文件夹;
-
文件系统结构:

3.3 开源社区
-
发行版(Distribution)({\rm Distribution})(Distribution):ROS{\rm ROS}ROS发行版包括一系列带有版本号、可以直接安装的功能包;
-
软件源(Repository)({\rm Repository})(Repository):ROS{\rm ROS}ROS依赖于共享网络上的开源代码,不同的组织机构可以开发或共享自己的机器人软件;
-
ROS wiki{\rm ROS\ wiki}ROS wiki:记录ROS{\rm ROS}ROS信息文档的主要论坛;
-
邮件列表(Mailing list)({\rm Mailing\ list})(Mailing list):交流ROS{\rm ROS}ROS更新的主要渠道,同时也可以交流ROS{\rm ROS}ROS开发的各种疑问;
-
博客(Blog)({\rm Blog})(Blog):发布ROS{\rm ROS}ROS社区中的新闻、图片、视频;
-
ROS{\rm ROS}ROS社区资源的组织形式:

4.ROS实践
4.1 海龟仿真例程
-
ROS{\rm ROS}ROS常用命令
命令 作用 catkin_create_pkg{\rm catkin\_create\_pkg}catkin_create_pkg 创建功能包 catkin_make{\rm catkin\_make}catkin_make 编译工作空间中的功能包 rospack{\rm rospack}rospack 获取功能包的信息 rosdep{\rm rosdep}rosdep 自动安装功能包依赖的其他包 roscd{\rm roscd}roscd 功能包目录跳转 roscp{\rm roscp}roscp 拷贝功能包中的文件 rosed{\rm rosed}rosed 编辑功能包中的文件 rosrun{\rm rosrun}rosrun 运行功能包中的可执行文件 roslaunch{\rm roslaunch}roslaunch 运行启动文件 -
第一个例程
# 生成一个海龟及控制步骤 # 1.启动ros master roscore # 2.启动海龟仿真器 rosrun turtlesim turtlesim_node # 3.启动控制节点 rosrun turtlesim turtle_teleop_key # 4.查看当前计算图 rqt_graph

# 常用命令 # 1.查看话题列表 rostopic list # 2.查看节点列表 rosnode list # 3.发布话题消息 rostopic pub -r 1 /turtle1/cmd_vel geometry_msgs/Twist "linear: x: 0.2 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0" # 4.再生成一个小海龟 rosservice call /spawn "x: 3.0 y: 3.0 theta: 0.0 name: ''" name: "turtle2"
4.2 hawkbot小车例程
# 1.启动节点管理器
roscore
# 2.启动机器人底盘驱动节点
roslaunch hawkbot bringup.launch
# 3.启动键盘控制节点
roslaunch hawkbot teleop_key.launch
# 4.查看计算图
rqt_graph
# 5.查看话题列表
rostopic list
# 6.查看节点列表
rosnode list
# 7.查看具体的话题
rostopic info /cmd_vel
==============================================
Type: geometry_msgs/Twist
Publishers:
* /teleop (http://192.168.66.104:40693/)
* /twist_joy (http://192.168.66.104:35641/)
Subscribers:
* /base (http://192.168.66.104:46213/)
==============================================
# 8.查看具体的节点
rosnode info /imu
==============================================================
Node [/imu]
Publications:
* /imu/data_raw [sensor_msgs/Imu]
* /rosout [rosgraph_msgs/Log]
Subscriptions: None
Services:
* /imu/get_loggers
* /imu/set_logger_level
contacting node http://192.168.66.104:42489/ ...
Pid: 1963
Connections:
* topic: /rosout
* to: /rosout
* direction: outbound (45345 - 192.168.66.104:37424) [9]
* transport: TCPROS
* topic: /imu/data_raw
* to: /imu_complementary_filter
* direction: outbound (45345 - 192.168.66.104:37462) [11]
* transport: TCPROS
==============================================================


5.ROS应用框架

ROS是一个开源的机器人元操作系统,提供硬件抽象、进程间通信、功能包管理和分布式计算资源的调度。它以节点形式进行编程,支持分布式进程,并通过功能包进行管理。ROS具有跨平台特性,允许使用多种编程语言,如Python和C++。其主要组件包括客户端库、硬件接口、数据通信和机器人应用框架。ROS历史中,它逐渐发展成为机器人开发的重要工具。
4万+

被折叠的 条评论
为什么被折叠?



