【MOOC】机器人操作系统入门

机器人操作系统入门

中国大学MOOC
https://www.icourse163.org/course/ISCAS-1002580008#/info
https://www.bilibili.com/video/av24585414
github地址:https://github.com/ersaijun/ROS-Academy-for-Beginners

课程讲义:https://legacy.gitbook.com/book/sychaichangkun/ros-tutorial-icourse163/details

一、ROS介绍与安装

  • 本次使用 ros kinetic & ubuntu16.04
  • ROS包括

    • 框架:
    • 分布式
    • 进程(结点Node)管理
    • 进程间通信
    • 工具:
    • Gazebo
    • Rviz
    • 功能:
    • 控制
    • 规划
    • 视觉
    • 建图
    • 社区:
    • 软件包管理
    • 文档
    • 教程
  • ROS演示
  • ROS安装与配置
    • ROS官网安装教程
    • ROS IDE推荐:RoboWare

二、工程结构

  • catkin 工作空间
    • ros 定制的编译构建系统
    • catkin_make
    • // 建立工作空间
      $ mkdir -p ~/catkin_ws/src
      $ cd ~/catkin_ws/
      // 编译
      $ catkin_make
      $ source ~/catkin_ws/devel/setup.bash  # 编译完成后要source刷新环境
    • package 是catkin编译的基本单元
  • package
    • ROS软件的基本组织形式catkin编译的基本单元,一个package可以包含多个可执行文件(节点)
    • package包含CMakeLists.txt(编译规则) 和package.xml(属性信息)
    •  rospack 查找某个pkg的地址
      $ rospack find package_name
      $ rospack list
      roscd 跳转到某个pkg路径下
      $ roscd package_name
      rosls 列举某个package下的文件信息
      $ rosls package_name
      rosed 编辑pkg中的文件
      $ rosed package_name file_name
      catkin_create_pkg 创建一个pkg
      $ catkin_create_pkg <pkg_name> [deps]
      rosdep 安装某个pkg所需的依赖
      $ rosdep install [pkg_name]
  • Metapackage(stack)
    • 虚包,包含其他软件包,组合起来。使安装更方便

三 通信架构上

  • master
    • 节点管理器,每个node启动时都要向master注册
    • 管理node之间的通信
    • 启动ros master命令
      $ roscore
      启动之后有master:节点管理器; rosout:日志输出;parameter server:参数服务器
  • node
    • ROS的进程,pkg里可执行文件运行实例
    • 启动一个node
      $ rosrun [pkg_name] [node_name]
      显示某个node的具体信息
      $ rosnode info [node_name]
      列出当前运行的node信息
      $ rosnode list
      结束某个node
      $ rosnode kill [node_name]
      启动master和多个node
      $ roslaunch [pkg_name] [file_name.launch]
  • Topic
    • ROS中的异步通信方式
    • Node间通过publish-subscribe机制通信
    • 一个topic可以有多个publish和多个subscriber

  • Message
    • topic内容的数据类型或者说类,定义在*.msg文件中
    •  列出当前所有topic
      $ rostopic list
      显示某个topic的属性信息
      $ rostopic info /topic_name
      显示某个topic的内容
      $ rostopic echo /topic_name
      向某个topic发布内容
      $ rostopic pub /topic_name
      列出系统上所有msg
      $ rosmsg list
      显示某个msg内容
      $ rosmsg show /msg_name

四 通信架构下

  • Service
    • ROS中同步通信方式
    • Node间可以通过request-reply方式通信

  • srv
    • Service通信的数据格式,定义在*.srv文件中
    •  列出当前所有活跃的service
      $ rosservice list
      显示某个service的属性信息
      $ rosservice info service_name
      调用某个service
      $ rosservice call service_name args
      列出系统上所有srv
      $ rossrv list
      显示某个srv内容
      $ rossrv show srv_name
  • Parameter Server 参数服务器
    • 存储各种参数的字典,可用命令行launch文件和node(API)读写
    • 列出当前所有参数
      $ rosparam list
      显示某个参数的值
      $ rosparam get param_key
      设置某个参数的值
      $ rosparam set param_key param_key
      保存参数到文件
      $ rosparam dump file_name
      从文件读取参数
      $ rosparam load file_name
      删除某个参数
      $ rosparam delete param_key
  • Action
    • 类似service,带有状态反馈的通信方式,通常在长时间/可抢占的任务中
    • action通信的数据格式,定义在*.action文件中

五 常用工具

  • 仿真:Gazebo;机器人仿真工具,ODE物理引擎,用于动力学/导航/感知等任务的模拟
  • 调试/可视化:Rviz/rqt; The Robot Visualization tool,方便调试和监控; rqt:可视化工具,rqt_graph(显示通信架构)/rqt_plot(绘制曲线)/rqt_console(查看日志)
  • 命令行工具: rostopic。。。
  • 专用工具:Movieit!
  • rosbag
    • ROS命令行工具,记录和回放数据流
    • 记录某些topic到bag中
      $ rosbag record <topic-names>
      记录所有topic到bag中
      $ rosbag record -a
      回放bag
      $ rosbag play <bag-files>

六 Client Library

  • 客户端服务器
    • 提供ROS编程的库,例如建立node、发布消息

roscpp

  • ros::init() // 解析ROS参数,为node命名
  • 案例 (topic_demo、service_demo、param_demo)

rospy

  • 案例 (topic_demo、service_demo)

七 TF 和 URDF

TF

  • transform 坐标转换
  • 坐标转换的标准、话题、工具、接口
  • 部件 link,对应一个frame,joint:连接两个link
  • tf tree,link之前通过node连接,broadcast

URDF

  • Unified Robot Description Format
  • xml语言规范

八 SLAM 与 Map

九 Navigation

 

 

留下评论