1.ros简介

  1.ros诞生背景

    在2007年Willow Garage公司发布了ros系统(机器人操作系统),是一套机器人通用软件框            架,可以提升模块复用性

  2.ros概念

    1.是适用于机器人的开源元操作系统

    2.集成了大量工具、库、协议、提供类似操作系统所提供的功能,简化对机器人的控制

    3.提供用于在多台计算机上获取,构建,编号和运行代码的工具和库,类似于“机器人框架”

    4.是通讯机制、工具软件包、机器人高层技能一级机器人生态系统的集合体

  3.设计目标:代码复用、分布式、松耦合、精简、语言独立性、易于测试、大型应用、丰富的组                          件工具、免费且开源

  4.发展历程

    1.在ros诞生前很多人认为机器人研究需要一个开放式协作框架,在2000年斯坦福大学开展了斯坦福人工智能机器人等项目,在研究具有代表性,集成式人工智能系统的过程中,创立了用于室内场景的高灵活性、动态软件系统,其可以用于机器人学研究

    2.2007年Willow Garage公司提供大量资源,用于将斯坦福大学机器人项目的软件系统进行扩展与完善,同时ros的核心思想和基本软件包逐渐得到完善

    3.ros的发行版本指软件包的版本,与Linux发行版本概念类似。退出ros发行版本旨在开发人员可以使用相对稳定的代码库,知道其准备好将所有内容进行版本升级为止

2.ros安装

https://blog.csdn.net/zjxsmsw/article/details/157509255?fromshare=blogdetail&sharetype=blogdetail&sharerId=157509255&sharerefer=PC&sharesource=zjxsmsw&sharefrom=from_link

可在上述链接中查看ros系统安装教程

3.ros快速体验

  1.添加Ubuntu中文输入法

    1.打开settings

    2.找到

    3.点击Manage Installed Languages

    4.在弹出的窗口中点击 Install​ 安装语言支持

    5.勾选Chinese (Simplified),点击Apply

    6.回到Region & Language

    7.在input Sources部分,点击 +​ 按钮添加输入法

    8.找到Chinese

   9.选中后点击Add

   10.可用win+空格键切换输入法

  2.代码实现

    1.流程:指定解释器,导包,编写主入口,初始化ros节点,输出日志

       指定解释器:#! /usr/bin/env python

    2.编译:在cmake文件中添加  

可自动下载python解释器

    3.执行catkin make

    4.新开窗口,输入roscore进入当前窗口,输入当前目录,加载环境变量

    5.rosrun+包名+被执行的python文件

4.集成环境搭建

  1.安装终端terminator

    输入sudo apt install terminator

  2.安装vscode

    1.使用和基本配置

      1.创建工作空间:mkdir -p xxx_ws/src

                                 cd xxx_ws

                                  catkin_make

      2.使用code命令进入vscode

      3.在集成终端中打开:输入chomd +x  *.py

      4.软链接:sudo ln -s /usr/bin/python3 /usr/bin/python

    3.launch文件展示

    1.优势:可以一次性实现多个ros节点

    2.实现

      1.选定功能包右击--》添加launch文件夹

      2.选定launch文件夹右击--》添加launch文件(xml文件)

      3.编辑launch文件内容

      node--》包含的某个节点

      pkg--》功能包

      type--》被运行的节点文件

      name--》为节点命名

      output--》设置日志的输出目标

      4.运行:roslaunch 包名 launch文件名

5.ros架构

  1.系统架构

    1.os层:操作系统

    2.中间层:封装关于机器人开发的中间件

    3.应用层:功能包,以及功能包内的节点

  2.自身结构

    1.文件系统:源代码组织形式

    2.计算图

    3.开源社区

  3.文件系统

   1.结构

  4.ros文件系统相关命令

  5.计算图

    1.简介:以点对点的网络形式表现数据交互过程

    2.安装(以noetic为例)

    3.启动:rosrun rqt_graph rqt_graph

6.ros通信机制

使用python实现代码时需导包:import rospy

导入消息格式:from std_msgs.msg import String

  1.实现策略

    1.话题通信(发布订阅模式)

    2.服务通信(请求响应模式)

    3.参数服务器(参数共享模式)

  2.简介

    1.概念:以发布订阅的方式实现不同节点之间数据交互的通信模式

    2.作用:用于不断更新的,少逻辑处理的数据传输场景

  3.理论模型

    1.角色--》流程--》注意

      1.角色:master-管理者:可根据话题建立发布者和订阅者之间的连接

                    talker-发布者:

                    listener-订阅者

      2.注意:1.使用的协议由PRC和TCP

                     2.发布者和订阅者话题无顺序关系

                    3.发布者和订阅者都可以存在多个

                   4.发布者和订阅者建立连接后,管理者就可以关闭了

                    5.下图实现流程以实现封装,以后直接调用即可

     3.话题通信应用时的关注点

         1.大部分已经实现封装了

         2.话题设置

         3.关注发布者和订阅者实现

         4.关注信息载体

  3.需求分析

    1.发布者python

代码主体

    2.添加发布逻辑

      指定发布频率:rate=rospy.Rate(发布频率)

修改后代码

    3.订阅者实现

      代码示例

注:1.在最后一定要写上rospy.spin

      2.无论是发布者还是订阅者都要以下图形式进行编译

    3.若发现发布者和订阅者信息不对称,须在发布前进行休眠(rospy.sleep(休眠时间))确保订阅

  4.使用计算图显现

      1.启动:输入rqt_graph启动计算图

  4.自定义msg

    1.定义msg文件:功能包下新建msg目录,添加文件Person.msg

    2.编辑配置文件

      1.在package文件中导入message_generation和message_runtime

      2.在cmake中添加message_generation以及进行下图操作

    3.编译:中间文件在(/工作空间/devel/lib/python3/dist-pachages/包名/msg)

    4.python实现

     在代码实现前需输入from msg包名 import 数据文件名

      1.配置vscode:方便代码提示以及误抛异常

      2.发布方实现

        代码实现

    3.订阅方实现

      

  5.服务通信

    1.概念:已请求相应的方式实现不同节点数据交互的通信模式

    2.作用:用于偶然的,对时时性有要求,有一定逻辑处理需求的数据传输场景

    3.理论模型

      1.master-管理者

      2.server-服务端

      3.client-客户端

      4.流程:master会根据话题实现server和client的连接

      5.注:

         1.保证顺序:客户端发起请求时,服务端需已经启动

         2.客户端和服务端都可以存在多个

      6.关注点

        1.流程已被封装直接调用即可

        2.话题

        3.服务端

         4.客户端

        5.数据载体

      

    7.自定义srv

      1.流程

        1.按照固定格式创建srvwenjian

        2.编辑配置文件

        3.编译生成中间文件

      2.定义srv文件

      3.编辑配置文件在package文件中添加message_generation和message_runtime

      4.在cmake中添加message_generation,并解除service注释,以及添加下图内容

      5.vscode配置:同message配置

      6.流程

          1.导包

          2.初始化ros节点

          3.创建服务端对象

          4.处理逻辑(回调函数)

           5.spin()

代码示例

      7.客户端实现

        流程:

          1.导包

          2.初始化ros节点

          3.创建客户端对象

          4.组织请求数据,并发送请求

          5.处理响应

代码示例

      8.优化实现:可以在实行节点时,动态传入参数

        使用sys.argv数组

优化后的代码示例

   9.注意事项

        1.需先启动服务端,客户端先于服务端启动,会抛出异常

          解决方案:使用ros内置函数,等待服务启动

             1.client.wait_for_service()

             2.rospy.wait_for_service("话题名称")

  10.参数服务器

    1.概念:一共享的方式实现不同节点之间数据交互的通信模式

    2.作用:存储一些多节点共享的数据,类似于全局变量

    3.理论模型

    1.master:管理者

    2.talker:设置者

    3.listener:调用者

    4.注:参数服务器不是为高性能而设计的,因此最好用于存储静态的非二进制的简单数据

    5.可用数据类型

    6.参数新增与修改

      1.需求:在参数服务器中设置机器人属性,型号,半径

      2.实现:rospy.set_param()

      3.代码示例

    7.参数服务器获取参数

      1.函数类别

    8.参数删除

        代码示例

注:二次删除会抛出异常

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐