Chapter1:初见ROS

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

ROS1{\rm ROS1}ROS1的基础及应用,基于古月的课,各位可以去看,基于hawkbot{\rm hawkbot}hawkbot机器人进行实际操作。
ROS{\rm ROS}ROS版本:ROS1{\rm ROS1}ROS1Melodic{\rm Melodic}Melodic;实际机器人:Hawkbot{\rm Hawkbot}Hawkbot



1.ROS的历史起源
  1. 200720072007年,诞生于斯坦福STAIR{\rm STAIR}STAIR项目Morgan Quigley{\rm Morgan\ Quigley}Morgan Quigley
  2. 200820082008年,Willow Garage{\rm Willow\ Garage}Willow Garage接手;
  3. 2010{\rm 2010}2010年,ROS 1.0{\rm ROS\ 1.0}ROS 1.0发布;
  4. 201120112011年,TurtleBot{\rm TurtleBot}TurtleBot发布;
  5. 201220122012年,第一届ROScon{\rm ROScon}ROSconROS Fuerte、ROS Groovy{\rm ROS\ Fuerte、ROS\ Groovy}ROS FuerteROS Groovy发布;
  6. 201320132013年,OSRF(Open Source Robotics Foundation){\rm OSRF(Open\ Source\ Robotics\ Foundation)}OSRF(Open Source Robotics Foundation)接管,ROS Hydro{\rm ROS\ Hydro}ROS Hydro发布;
  7. 201420142014年,ROS Indigo{\rm ROS\ Indigo}ROS Indigo发布;
  8. 201520152015年,ROS Jade{\rm ROS\ Jade}ROS Jade发布;
  9. 201620162016年,ROS Kinetic{\rm ROS\ Kinetic}ROS Kinetic发布;
  10. 201720172017年,ROS 2.0 Ardent{\rm ROS\ 2.0\ Ardent}ROS 2.0 Ardent发布,ROS Lunar{\rm ROS\ Lunar}ROS Lunar发布;
  11. 201820182018年,ROS Melodic{\rm ROS\ Melodic}ROS Melodic发布;
  12. 202020202020年,ROS Noetic{\rm ROS\ Noetic}ROS Noetic发布;
2.ROS的总体设计
  1. 一个目标:提高机器人研发中的软件复用率;

  2. 五个特点:

    1. 点对点的设计;
      • 节点单元;
      • 分布式网络;
      • RPC+TCP/UDP{\rm RPC+TCP/UDP}RPC+TCP/UDP通信系统;
      • 适合多机协同;
    2. 多语言支持;
      • 支持Python、C{\rm Python、C}PythonC++、Java{\rm Java}Java等编程语言;
      • 语言无关的接口定义;
    3. 架构精简、集成度高;
      • 每个功能节点可以单独编译;
      • 集成众多开源项目;
      • 接口统一、提高软件复用性;
    4. 组件化工具包丰富;
      • 3D{\rm 3D}3D可视化工具——rviz{\rm rviz}rviz
      • 物理仿真环境——gazebo{\rm gazebo}gazebo
      • 数据记录工具——rosbag{\rm rosbag}rosbag
      • Qt{\rm Qt}Qt工具箱——rqt_∗{\rm rqt\_*}rqt_
    5. 免费且开源;
      • BSD{\rm BSD}BSD许可,可修改、可复用、可商用;
      • 软件包数量指数级增加,良好的生态系统;
  3. 四位一体:

    ROS{\rm ROS}ROS=通信机制+开发工具+应用功能+生态系统;

3.ROS的系统实现

ROS{\rm ROS}ROS系统实现的三个层次:

1

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

    2

  2. 计算图

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

    3

    1. Talker{\rm Talker}Talker注册;
    2. Listener{\rm Listener}Listener注册;
    3. ROS Master{\rm ROS\ Master}ROS Master进行信息匹配;
    4. Listener{\rm Listener}Listener发送连接请求;
    5. Talker{\rm Talker}Talker确认连接请求;
    6. 建立网络连接;
    7. Talker{\rm Talker}TalkerListener{\rm Listener}Listener发布数据;
  4. 服务通信机制

    4

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

    5

    1. Talker{\rm Talker}Talker设置变量;
    2. Listener{\rm Listener}Listener查询参数值;
    3. ROS Master{\rm ROS\ Master}ROS MasterListener{\rm Listener}Listener发送参数值;
  6. 话题与服务的区别

    话题服务
    同步性异步同步
    通信模型发布/订阅服务器/客户端
    底层协议ROSTCP/ROSUDP{\rm ROSTCP/ROSUDP}ROSTCP/ROSUDPROSTCP/ROSUDP{\rm ROSTCP/ROSUDP}ROSTCP/ROSUDP
    反馈机制
    缓冲区
    实时性
    节点关系多对多一对多
    适用场景数据传输逻辑处理
3.2 ROS的文件系统
  1. 功能包清单(Package manifest)({\rm Package\ manifest})(Package manifest):记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志等;

  2. 元功能包(Meta Packages)({\rm Meta\ Packages})(Meta Packages):组织多个用于同一目的功能包;

  3. 元功能包清单(Meta Packages)({\rm Meta\ Packages})(Meta Packages):类似于功能包清单,不同之处在于元功能包清单中可能包含运行时需要依赖的功能包或声明一些引用的标签;

  4. 消息类型(Message)({\rm Message})(Message):消息是ROS{\rm ROS}ROS节点之间发布/订阅的通信消息,可以使用ROS{\rm ROS}ROS系统提供的消息类型,亦可以使用.msg{\rm .msg}.msg文件在功能包的msg{\rm msg}msg文件夹下自定义需要的消息类型;

  5. 服务类型(Service)({\rm Service})(Service):服务类型定义了ROS{\rm ROS}ROS服务器/客户端通信模型下的请求与应答数据类型,可以使用ROS{\rm ROS}ROS系统提供的服务类型,亦可以使用.srv{\rm .srv}.srv文件在功能包的srv{\rm srv}srv文件夹中进行定义;

  6. 代码(Code)({\rm Code})(Code):放置功能包节点源代码的文件夹;

  7. 文件系统结构:

    6

3.3 开源社区
  1. 发行版(Distribution)({\rm Distribution})(Distribution)ROS{\rm ROS}ROS发行版包括一系列带有版本号、可以直接安装的功能包;

  2. 软件源(Repository)({\rm Repository})(Repository)ROS{\rm ROS}ROS依赖于共享网络上的开源代码,不同的组织机构可以开发或共享自己的机器人软件;

  3. ROS wiki{\rm ROS\ wiki}ROS wiki:记录ROS{\rm ROS}ROS信息文档的主要论坛;

  4. 邮件列表(Mailing list)({\rm Mailing\ list})(Mailing list):交流ROS{\rm ROS}ROS更新的主要渠道,同时也可以交流ROS{\rm ROS}ROS开发的各种疑问;

  5. 博客(Blog)({\rm Blog})(Blog):发布ROS{\rm ROS}ROS社区中的新闻、图片、视频;

  6. ROS{\rm ROS}ROS社区资源的组织形式:

    7

4.ROS实践
4.1 海龟仿真例程
  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运行启动文件
  2. 第一个例程

    # 生成一个海龟及控制步骤
    # 1.启动ros master
    roscore
    
    # 2.启动海龟仿真器
    rosrun turtlesim turtlesim_node
    
    # 3.启动控制节点
    rosrun turtlesim turtle_teleop_key
    
    # 4.查看当前计算图
    rqt_graph
    

    8
    9

    # 常用命令
    # 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"
    

    9

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
==============================================================

10

11

5.ROS应用框架

12

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FUXI_Willard

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值