• ros基础


    1. 介绍

    ROS(Robot Opearting System)是一套开源的机器人操作系统(并不直接跑在裸机上,需要依附ubuntu),对各种硬件设备进行了抽象,提供了方便二次开发的基础环境,包括底层设备控制、消息传递机制、常用函数和接口、包管理。相当于提供了一整套控制机器人的开发框架,用户通过ros提供的各种基础设施,方便的实现自己的功能。主要提供python和C++接口。

    这里是ROS的官方教程,很详细: http://wiki.ros.org/ROS/Tutorials

    2. 安装

    ubuntu16.04+kinetic 版本
    按照这一页安装就可以,会在 /opt/ 目录下安装整套ros环境。

    3. 基础概念

    3.1. 静态结构

    • workspace: 开发目录,包含各种模块自己源码安装的、新写的模块,自己二次开发主要是在这个目录中进行。
    • package: 一个独立的模块,完整功能的单元,比如一个实现从摄像头取流、转换成mp4文件保存到本地功能的模块。
    • node: package中的一个执行程序,完成消息的接收、处理、发送等功能,传递给下一个node。

    三者的关系是:1个workspace会包含多个package,多个package之间可以是依赖关系,也可以不存在依赖关系,一个package可以包含多个node,每个node提供一个具体功能。运行起来之后,最常打交道的是node。

    3.2. 消息机制

    • message: node之间通过消息来通信,node1发送message给node2,node2收到后,进行处理,再发送给node3。
    • topic: 类似kafka中的topic。1个topic表示这里会中转一种类型的message。node可以从topic订阅消息,或者发布消息到这个topic。
    • service: node之间可以通过消息来通信,也可以通过service来直接通信,这样需要1个 node 提供服务,另一个node去调用相应的接口。与消息不同的是,消息发送出去,不需要回复;而服务需要明确的一问一答。

    ros提供了基础的消息机制,将多个 node 动态组织起来,共同完成1个大的任务。比如 node1 从摄像头取出原始的 BGR 像素点,编码成 JPEG 图像,通过 topic1 发布出去,node2 从 topic1 订阅该消息,使用 opencv 和 ffmpeg 进行处理,编码成H264视频流,再发布到 topic2,另外的node可以通过订阅 topic2 的消息,得到 H264 视频流:

    摄像头 --> node1(BGR像素点转换成JPEG图片) --> topic1 --> node2(JPEG转换成H264视频流) --> topic2 --> node3(显示视频图像)
    

    3.3. 管理服务

    • master: ros的中心节点,负责管理各种node、topic、service、parameter等,最重要的还有提供名称服务,帮助各个节点找到彼此。
    • parameter server: 参数管理器,负责统一管理各个node的参数,并给node提供参数动态变更的机制。统一管理参数。

    这两个服务相当于ros的基础服务,各个node都依赖他们来运行。

    4. 常用命令

    ros提供了一些自己的常用命令,需要先加载ros的环境变量才能使用:

    source /opt/ros/kinetic/setup.bash
    

    常用命令有这些:

    • roscd: 类似cd,相当于使用package名字作为相对目录
    • rosls: 类似ls
    • roscore: 启动master,其他部分的运行需要依赖这个
    • rosrun package1 node1: 运行 package1 中的 node1
    • rosservice: 查看ROS服务信息
    • rosnode: 查看node信息
    • rosparam: 查看参数信息
    • rosmsg: 查看消息类型
    • rossrv: 查看服务类型
    • rospack: 查看当前系统中所有 package 的信息

    rostopic: 查看ros topic的各种信息

    • rostopic ls: 列出当前运行的topic
    • rostopic hz topic1:查看topic1上消息的频率
    • rostopic bw topic1: 查看topic1上消息的平均数据量,带宽
    • rostopic info topic1: topic1上的消息类型

    rosbag: 可以保存、回放消息

    • rosbag record -a: 记录所有的topic的消息
    • rosbag record topic1: 记录 topic1 的消息
    • rosbag play -l bag_file topic1: 重放bag_file中保存的 topic1 的消息,-l 表示循环播放

    5. 如何开始自己的开发

    # 1. 创建 workspace
    mkdir -p ~/catkin_ws/src
    cd ~/catkin_ws
    catkin_init_workspace
    
    # 2. 建立自己的 package
    cd ~/catkin_ws/src/
    # my_package 依赖 roscpp 等
    catkin_create_pkg my_package roscpp
    
    # 3. 在 ~/catkin_ws/src/my_package/ 中放入自己的代码,修改 CMakeLists.txt 等
    
    # 4. 编译
    cd ~/catkin_ws/
    catkin_make
    
    # 5. 运行
    # 先加载自己工作空间的环境,再运行
    source ~/catkin_ws/devel/setup.bash
    rosrun my_package my_package_node
    
  • 相关阅读:
    java学习之成员内部类
    上海 炉石面试题及解析
    利用RALL机制来事项String类的赋值操作
    关于信号打断正在读取终端的read与select来监视0文件描述符的问题
    ubuntu16.04开机花屏蓝屏解决方案
    gcc 中__thread 关键字的示例代码
    成长、责任和公司的关系
    团队贡献分
    团队如何做决定
    分析app的NABCD
  • 原文地址:https://www.cnblogs.com/suntus/p/15643605.html
Copyright © 2020-2023  润新知