zoukankan      html  css  js  c++  java
  • Apollo ROS原理(一)

    一、背景介绍

    为什么选择ROS

    高效的开发支持

    1、具有完整的包管理和工程结构

    2、庞大的基础库

    3、多语言接口支持

    模块灵活配置

    1、消息驱动的异步运行模型

    2、抽象的P2P通信接口

    3、自定义的消息格式

    丰富的调试工具

    1、具有可视化的调试工具

    2、消息查看、存储、回放功能

    二、 ROS概述

    image

    1、点对点

    两个node进行消息通讯的时候是一个点对点的行为。

    2、分布式

    在部署多级通讯时,ROS提供了一个天然支持‘

    3、跨语言

    ROS不关注各个节点是用什么语言来写的,只需要按照ROS提供的一些接口完成消息的订阅和分发,就可以完成一个消息的通信

    4、轻量级ROS程序

    用户只需关注自己核心模块的算法逻辑,不需要关注底层的一些操作,如如何通信以及断开通信。

    5、开源框架

    大家可以往里面提供自己的想法。

    ROS工作环境

    ROS master(节点管理器)用于管理节点之间的通讯,打开节点管理器(在所有节点运行之前运行)roscore

    node (节点):可以理解为一个算法模块,比如自动驾驶里的感知模块、或定位模块。节点相互之间是独立的,同时节点之间又要相互通信,节点之间如何发现对方,如何在发现对方后建立连接以及通信,都是通过节点管理器所起到的作用。

    运行一个节点:rosrun packages_name node_name

    列出正在运行的节点:rosnode list

    查看某一个节点的具体信息(topic 名字,流向谁,类型):rosnode info node_name

    topic(话题)两个节点通信的一个主题。内部所使用的消息格式为msg

    列出所使用的topicrostopic list

    查看topic内容rostopic info /topic

    订阅并打印topic内容rostopic echo /topic(/表示该topic的作用域是全局作用域)

    查看topic类型rostopic type /topic

    发布一个topic的消息rostopic pub /topic type args

    roslaunch 把所有启动节点放到一个描述文件里,启动这个描述文件时,这个描述文件会做两件事,一是找到你在这个描述文件里所定义的各个节点的位置,二是去启动这些节点。运行roslaunch时,会先检测系统里有没有ROScore,如果ROScore已经启动,就直接启动节点;否则先启动ROScore,再启动节点。

    工作流程如下图: 两个节点perception和planning,话题obstacle

    (1)perception节点要启动时,要向ROScore发送一个注册信息,告诉ROScore我现在启动一个节点并告诉ROScore我要发送的话题为obstacle;

    (2)同时,planning节点在启动时,也会向ROScore发送一个注册信息,并说明自己要订阅一个名为obstacle的话题;

    (3)当ROScore发现两者匹配的时候,会向planning 节点发送一个消息,告诉他你所订阅的话题是由已经存在的perception发布的;

    (4)planning 节点接收到ROScore的信息后,就会向perception请求一个通信连接,perception在收到planning请求后会建立一个通信链路;

    (5)当通信链路建立起来后ROScore的任务暂时完成。

    image

    松耦合概念体现

    1、两个节点启动没有先后关系

    2、通信链路建立起来后 ,ROScore所起作用微乎其微

  • 相关阅读:
    jquery操作select
    EL表达式
    八大排序算法之希尔排序
    八大排序算法之堆排序
    八大排序算法之归并排序
    yield与send实现协程操作
    详解生成器、迭代器
    类相关知识
    python装饰器大详解
    详解python之反射机制
  • 原文地址:https://www.cnblogs.com/linhaostudy/p/15334921.html
Copyright © 2011-2022 走看看