`

ROS(Robot Operating System) Tutorial 学习记录

 
阅读更多

ROS(Robot Operating System) Tutorial 学习记录

编写: 王宇 
2018-03-31

注: 此文档仅仅是我阅读时的流水账,也因为本人英语水平有限,仅凭个人的自我理解所编写,不可避免的存在错误和偏差,请以官方原文为准。

官方教程:http://wiki.ros.org/ROS/Tutorials

Beginner Level

1. 安装配置ROS环境

安装ROS

管理环境

  • 概念 :notion of combining spaces using the shell environment
  • 检查环境
  •     $ printenv | grep ROS
  • 安装命令
  •     $ source /opt/ros/kinetic/setup.bash

创建ROS工作空间

  • Build空间
  •     $ mkdir -p ~/catkin_ws/src
  •     $ cd ~/catkin_ws
  •     $ catkin_make
  • catkin : http://wiki.ros.org/catkin
  • 设置
  •     $ source devel/setup.bash
  • 确认环境变量: $ROS_PACKAGE_PAHT 
/home/youruser/catkin_ws/src:/opt/ros/kinetic/share

2. ROS文件系统

预备

  • 安装教程预先准备的Package
  •     $ sudo apt-get install ros-<distro>-ros-tutorials

Overview 文件系统概念

  • Package : Package 组织ROS单元代码的抽象组织结构,每个Package能够包含库,可以执行文件,脚本和其他部分
  • Manifests(package.xml) : Manifest是对Package的描述,它定义Package的依赖,明确Package的元数据,像版本,License等。

文件系统工具

  • 使用 rospack - 得到Packages中的信息
  •     $ rospack find [package_name]
  • 使用 roscd - 更改目录
  •     $ roscd [locationname [/subdir]]
  • roscd log - 切换到日志目录
  •     $ roscd log
  • 使用 rosls - 查询目录
  •     $ rosls [locationname [/subdir]]

Tab 补全

3.创建ROS Package

  • Package 由什么组成的?
  1. package.xml 提供Package的元数据描述
  2. catkin使用的CMakeList.txt
  3. 每个Package必须有它自己的目录
  • 在 catkin工作空间中的Package 


  •  

  • 创建catkin Package 
使用catkin_create_pkg脚本创建 catkin Package
  •     $ cd ~/catkin_ws/src
    $ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
  • 编译和设置
    $ cd ~/catkin_ws
    $ catkin_make
    $ . ~/catkin_ws/devel/setup.bash
  • package 依赖
  • 自定义你的Package

4. 编译ROS Package

编译 Packages

  • 使用 catkin_make - 类似于cmake make工具
  •     $ catkin_make --source my_src
    $ catkon_make install --source my_src
  • 构建你的Package
  •     $ cd ~/catkin_ws/
    $ ls src

beginner_turorials/CMakeLists.txt
    $ catkin_make

5. 理解ROS Nodes节点

预备- 同ROS文件系统

Overview Graph 概念

  • Node : 用ROS(roscore)协同其他node的可以执行体
  • Message: 当使用subscribing和publishing topic时,被使用的数据类型
  • Topics:subscribing和publishing 时的主题
  • Master:ROS的服务名
  • rosout:ROS的 stdout stderr
  • roscore: Master + rosout + parameter server

Nodes

  • ROS nodes 使用 ROS 客户端库与其他节点通讯。
  • Nodes可以发布和订阅一个主题。Node
  • Node能够提供和使用服务

客户端库

ROS客户端库允许nodes使用不同的程序语言编写,用于通讯,例如Python和C++

roscore

使用 rosnode

  • 查询Node信息
  •     $ rosnode list

       从rosout中查看内容

  • rosnode info 命令查看特定node信息

使用rosrun

    $ rosrun [package_name] [node_name]

6. 理解ROS Topics主题

启动一个例子

  • 启动 roscore
  •     $ roscore
  • 运行 turtlesim - turtlesim是package,turtlesim_node 和 turtle_turtle_teleop_key是 node
    $ rosrun turtlesim turtlesim_node
  • turtle键盘遥控
  • $ rosrun turtlesim turtle_teleop_key



 

ROS Topics

The turtlesim_node 和 turtle_teleop_key 节点使用各自的ROS Topic进行通讯。turtle_teleop_key是发布键盘消息的topic, turtlesim 订阅相同topic,去接受键盘消息。让我们使用rqt_graph(能够显示nodes和topics)去运行

  • 使用 rqt_graph 

        rqt_graph在系统中,建立一个实时动态图像。rqt_graph是rqt package的一部分。

 

  • 安装 rqt_graph
  •     $ sudo apt-get install ros-<distro>-rqt
  •     $ sudo apt-get install ros-<distro>-rqt-common-plugins
  • rqt_graph的显示效果 



 


  • 介绍rostopic 
         rostopic 工具允许你获得关于ROS topics的信息
  •     $ rostopic -h
  • 使用 Using rostopic echo 
        rostopic echo显示在topic上的被发布数据
  •     $ rostopic echo [topic]
  • 使用 rostopic list 
  •         rostopic list返回所有当前发布和订阅主题列表
  •     $ rostopic list -h

ROS Message

在nodes之间,topics上凭借发送的ROS Message去通讯。因为发布和订阅通讯,它们必须发送接收相同类型的信息。这意味着,topic类型凭借message 类型发布被定义。

  • 使用 rostopic type 
        rostopic type 返回topic发布的message类型。
  •     $ rostopic type [topic]

rostopic continued

  • 使用 rostopic pub 
        rostopic pub 发布数据给当前被公布的topic
  •     $ rostopic pub [topic] [msg_type] [args]
  • 使用rostopic hz 
         rostopic 报告被发布数据的频率。
  •     $ rostopic hz [topic]
  • 使用rqt_plot 
       rqt_plot显示一个在topic上被发布数据的实时滚动图


 

7. 理解ROS 的服务和参数

ROS 服务

服务是使node与其他node通讯的另外一种途径。服务允许node发送一个请求和接收一个回应

使用rosservice

rosservice能够轻松的使用serives附加到ROS C/S框架结构。 rosservice有许多能够使用在topics上的命令。



  

8. 使用rqt_console and roslaunch

ROS使用rqt_console 和 rqt_logger_level进行调试,使用roslaunch一次启动多个node

预备

使用rqt_console 和rqt_logger_level

rqt_console依附于ROS的日志框架,用于显示从node的输出信息。rqt_logger_level允许我去改变运行时node的调试级别(DEBUG WARN INFO ERROR)

9. 使用rosed在ROS中编辑文件

使用rosed

rosbash : http://wiki.ros.org/rosbash 
rosed是rosbash套件中的一部分。它允许你直接在package内编辑文件。

    $ rosed [package_name] [filename]

使用rosed 用 tab补全

    $ rosed [package_name] <tab><tab>

编辑器

rosed默认编辑器是vim。 更加友好的编辑器nano通过默认Ubuntu 安装时被包含。你能够通过编辑你的~/.bashr文件去使用它们。

    export EDITOR='nano -w'

10. 创建ROS msg 和 srv

介绍msg 和 srv

  • msg:msg files是描述ROS信息字段的样例文本文件。它们用于生成不同语言信息的源代码
  • srv:srv file表示一个服务。由两部分组成: a request , a response

msg files 被保存在package 的msg目录中, svr files 被保存在srv目录中

  • 字段类型 


  
在ROS还有一些特殊的类型: Hear,它包含一个时间戳和在ROS中被使用的坐标参照信息。你将在msg file中第一行频繁的看到Hearder 
例子: 


 
srv file就像msg files,除了他们包含两部分内容:request,respone。这两部分内容被“-------”行分开

使用msg

  • 创建msg 
    让我们定义一个在之前的教程被创建的package中的msg
  •     $ roscd beginner_tutorials
    $ mkdir msg
    $ echo "int64 num" > msg/Num.msg

这部分内容待续

  • 使用rosmsg
  •     $ rosmsg show [message type]

使用srv

  • 创建srv

这部分内容待续

  • 使用rossrv
  •     $ rossrv show <service type>
    $ rossrv show begineer_turoials/AddTwoInts

用于msg 和srv 常见步骤

  • 改变CMakeList.txt

获得帮助

$ rosmsg -h
$ rosmsg show -h

11. 用C++写一个Publisher和Subscriber的例子

http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29

12. 用Python写一个Publisher和Subscriber的例子

http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28python%29

13. 测试Publisher和Subscriber的例子

http://wiki.ros.org/ROS/Tutorials/ExaminingPublisherSubscriber

14. 用C++写一个Service 和 Client的例子

http://wiki.ros.org/ROS/Tutorials/WritingServiceClient%28c%2B%2B%29

15. 用Python写一个Service和Client的例子

http://wiki.ros.org/ROS/Tutorials/WritingServiceClient%28python%29

16. 测试Service和Client的例子

http://wiki.ros.org/ROS/Tutorials/ExaminingServiceClient

17. 记录和播放数据

记录数据-创建一个bag 文件

  • 启动roscore,运行两个node,一个是显示乌龟,一个是键盘操作
  1. Terminal1 : $ roscore
  2. Terminal2 : $ rosrun turtlesim turtlesim_node
  3. Terminal3 : $ rosrun turtlesim tutle_teleop_key
  • 记录所有的 publisher topics
  •     $ mkdir ~/bagfiles
    $ cd ~/bagfiles
    $ rosbag record -a

测试和播放bag file

    $ rosbag info <your bagfile>

记录数据的子集

    $ rosbag record -O subset /turtle1/cmd_vel /turtle1/pose

rosbag 记录播放限制-(没搞懂)

18. 用roswtf开始

roswtf: 诊断ROS运行时错误的工具 
http://wiki.ros.org/roswtf

19. 导航ROS wiki

总结



 

此文档的PDF版本下载

 

  • 大小: 108.6 KB
  • 大小: 115.3 KB
  • 大小: 210.6 KB
  • 大小: 359.9 KB
  • 大小: 69 KB
  • 大小: 50.6 KB
  • 大小: 42.8 KB
  • 大小: 424 KB
分享到:
评论

相关推荐

    ros-tutorial-icourse

    ROS(Robot Operating System,机器人操作系统)是机器人领域广泛使用的开源框架,它为机器人软件开发提供了一个标准化的平台。本文将详细解析"ros-tutorial-icourse"教程,旨在帮助ROS入门者快速掌握其安装与使用的...

    ROS_Tutorial ROS基础笔记两篇(中文版).zip

    ROS,全称Robot Operating System,是一个开源操作系统框架,专门用于设计和实现机器人系统的软件架构。ROS_Tutorial ROS基础笔记两篇(中文版).zip是一个压缩包,包含了两份中文版的学习资料,分别是"ROS学习笔记...

    Kinect With ROS Tutorial

    在Windows系统上,微软提供了相应的SDK(软件开发工具包),而在ROS(Robot Operating System,机器人操作系统)平台上,则主要使用由Kinect制造商提供的OpenNI SDK,并且该SDK已经被移植到了ROS中。 首先,我们...

    ROS入门学习指南.docx

    ROS(Robot Operating System,机器人操作系统)是一种开源的机器人操作系统,可以帮助开发者快速构建机器人应用程序。 ROS 入门学习非常重要,找到正确的方向往往能大大提高学习效率。本文将结合作者的学习经历,给...

    ros_tutorial.zip_ROS

    ROS(Robot Operating System,机器人操作系统)是一个开源操作系统,专门设计用于为各种机器人设备和软件提供一个统一的框架。"Ros_tutorial.zip_ROS" 文件很可能包含了一系列ROS的基础教程,帮助初学者了解并学习...

    ROS tutorial jit.pdf

    ### ROS (Robot Operating System): 全面解析与实践指南 #### 一、ROS 概述 **ROS**(Robot Operating System)并非一个真正的操作系统,而是一个灵活的框架用于编写机器人软件。它提供了一系列工具和服务来简化...

    ros_tutorial_hello.rar

    ROS(Robot Operating System)是一个开源操作系统,专门为机器人设备和软件应用程序设计。这个“ros_tutorial_hello.rar”压缩包很可能是ROS中的一个初学者教程,旨在引导用户了解如何在ROS环境中编写基本的“Hello...

    urdf_sim_tutorial.zip_ROS_urdf_urdf_tutorial

    ROS(Robot Operating System)是一个开源操作系统,专门设计用于机器人技术,提供了一整套工具和库,使得机器人软件开发变得更加高效和可移植。URDF(Unified Robot Description Format)是ROS中的一种XML格式,...

    ros-thread-tutorial:ROS线程化教程

    ROS(Robot Operating System)线程化教程主要针对的是在ROS系统中如何有效地利用多线程技术来提升程序的并发性能和资源利用率。ROS是机器人软件开发的一个开源框架,它为编写复杂的机器人应用提供了便利的接口和...

    基于ROS+kcf算法 读取电脑自带摄像头 手动圈取跟踪(cv_brdge track_pkg video_transport_tutorial)

    ROS(Robot Operating System)是一种广泛应用于机器人开发的操作系统框架,它提供了一套工具、库以及标准,使得开发者能够轻松地创建、编译和部署机器人软件。在这个项目中,"基于ROS+kcf算法 读取电脑自带摄像头 ...

    机器人工程(ROS)和单片机2018安卓APP汇总

    在机器人技术领域,ROS(Robot Operating System)是一个广泛使用的开源操作系统,专为设计和开发智能机器人系统而构建。它提供了一个框架,使开发者能够轻松地编写软件模块,并将它们集成到复杂的机器人应用中。本...

    urdf_tutorial-kinetic简明教程全部源码

    **ROS (Robot Operating System) 简介** ROS(Robot Operating System)是一个开源操作系统,专为机器人设备和软件开发而设计。它提供了一个框架,使开发者可以轻松地创建复杂的机器人应用,包括硬件接口、低级设备...

    Gazebo_ROS

    ROS (Robot Operating System) 是一个开源操作系统,专为机器人设备和软件开发而设计。它提供了一个框架,使得机器人系统的开发、模拟和测试变得更加容易。Gazebo 是ROS中的一个重要组件,是一个三维仿真环境,用于...

    gauss机械臂 ros 仿真包

    ROS(Robot Operating System)是机器人领域广泛使用的开源操作系统,它为机器人硬件抽象、传感器和执行器接口、消息传递、软件包开发提供了框架。Gauss机械臂是一款先进的机器人手臂,其在ROS环境下的仿真包允许...

    ROS-Android

    随着机器人操作系统(Robot Operating System,简称ROS)的普及与移动设备技术的发展,越来越多的应用场景需要ROS与Android平台进行交互。本文将详细介绍如何在Ubuntu环境下搭建ROS与Android之间的通信环境,并提供...

    Ros_tutorial

    ROS(Robot Operating System,机器人操作系统)是机器人领域广泛使用的开源框架,它提供了工具和库,使得机器人系统的开发、测试和部署变得更加便捷。本教程“Ros_tutorial”将引导你逐步了解ROS的基础知识,并掌握...

    Learning robotics using python

    About This Book, Design, simulate, build and program an interactive autonomous mobile robotProgram Robot Operating System using PythonGet a grip on the hands-on guide to robotics for learning various ...

    Learning Robotics Using Python

    About This Book, Design, simulate, build and program an interactive autonomous mobile robotProgram Robot Operating System using PythonGet a grip on the hands-on guide to robotics for learning various ...

    Learning Robotics using Python 2nd

    Robot Operating System &#40;ROS&#41; is one of the most popular robotics software frameworks in research and industry. It has various features for implement different capabilities in a robot without ...

    ros_tutorial

    ROS(Robot Operating System,机器人操作系统)教程 ROS是机器人领域广泛应用的一个开源框架,它提供了一套工具、库和协议,用于帮助开发机器人软件。ROS教程是学习如何利用ROS进行机器人编程的重要资源。"ros_...

Global site tag (gtag.js) - Google Analytics