ROS学习笔记

ros学习笔记

  • 目录结构
    • CMakeLists.txt
    • package.xml
    • catkin工作空间
      • catkin_make
      • 包管理指令
      • Metapackage
  • 通信架构(计算图层级)
    • master
      • roscore 命令
    • node 节点
      • rosrun命令
      • rosnode命令
      • roslaunch命令
    • 通信方式
      • Topic
      • Service
      • 异同
      • 后续
      • Action
    • Parameter Server
      • 命令行
      • launch文件
      • node(API)
  • 常用工具
    • Gazebo
    • RViz The Robot Visualization tool
    • rqt
    • rosbag
    • Moveit
  • Client Library
    • roscpp C++的接口
      • ros::init()
      • ros::NodeHandle
      • ros::master
      • ros::this_node
      • ros::service
      • ros::param
      • ros::names
    • rospy python的接口
      • Node
      • Topic
      • Service
      • Param
      • Time
  • TF & URDF
    • TF树
    • urdf Unified Robot Description Format
  • 出错处理
    • 依赖安装
      • rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y
  • 参考资料

目录结构

ROS学习笔记_第1张图片

|--src 源代码
|	|--package 是编译的基本单位
|		|--CMakeLists.txt  编译规则、依赖等
| 		|--package.xml 属性信息
|		|--scripts 脚本文件夹
|		|	|--python脚本
|		|	|--shell脚本
|		|--include 头文件.h
|		|--src C++源文件
|		|--srv 服务
|		|	|--*.srv 
|		|--msg 消息
|		|	|--*.msg
|		|--action	动作
|		|	|--*.action
|		|--launch launch配置文件
|		|	|--*.launch
|		|--config 参数配置文件
|		|	|--*.yaml
|--build cmake和catkin缓存中间文件
|--devel 编译生成的目标文件

CMakeLists.txt

ROS学习笔记_第2张图片

package.xml

ROS学习笔记_第3张图片

catkin工作空间

命名规则为 workspace_name/src
创建命令为

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make 

catkin_make

作用为编译,同时可以起到初始化工作空间的目的
在编译完之后要用source命令刷新当前环境 source ~/catkin_ws/devel/setup.bash,刷新完之后才能运行编译生成的ros可执行环境。但是每个终端都需要运行才行,可以直接更新到.bashrc文件中echo "source ~/catkin_ws/devel/setup.bash " >> ~/.bashrc,直接更新环境变量。

rosbuild是早期的编译命令,现在已经被catkin_make淘汰

包管理指令

  • rospack
    查找某个包的地址rospack find package_name
    列出本地所有包rospack list
  • roscd 跳转到某个包路径下 roscd package_name
  • rosls 列出包文件信息 rosls package_name
  • rosed 编辑包中文件 rosed package_name file_name
  • catkin_create_pkg 创建包 catkin_create_pkg pkg_name [deps]deps是依赖名,可以有多个
  • rosdep 安装依赖rosdep install package_name

Metapackage

功能相似的包的集合,主要用于安装的时候使用。sudo apt-get install ros-kinetic-[Metapackage_name]
ROS学习笔记_第4张图片

通信架构(计算图层级)

master

节点管理器,每个node启动时都需要在master进行注册,类似与微服务架构中的服务管理中功能。

roscore 命令

roscore
该命令功能:
启动master节点
启动rosout节点 负责日志输出
启动parameter server 参数服务器

node 节点

一个node实际上就是一个进程,master实际上也是一个node,但是它的功能是对其他node进行管理。
由于机器人一般都有非常多的零部件,所以每个部分一般都需要一个进程对其进行管理,例如摄像头模块、雷达模块等都需要单独的进程才能完成任务,这里的每个进程在ros中被称为节点node。

rosrun命令

该命令的功能是启动一个node
rosrun [pkg_name] [node_name]

rosnode命令

管理和查看某个node信息
rosnode list列出在运行的node信息
rosnode info [node_name]显示某个node的详细信息
rosnode kill [node_name]结束运行某个node

roslaunch命令

roslaunch [pkg_name] [file_name.launch]启动master节点以及多个node
其中的.launch文件就配置了需要启动的node有关信息【启动规则】
ROS学习笔记_第5张图片

通信方式

Topic

异步通信方式 publish-subscribe通信机制
nodeA向这个Topic发送(publish)消息,然后nodeB订阅(subscribe)这个Topic,然后nodeB就能收到nodeA发送的消息。所以可以进行一对多的消息发送,也可以多对一。

Message topic通信方式定义的数据类型 定义在.msg文件中
每个msg文件定义一种通信格式,相当于面向对象中的类,然后node在发送的时候是发送一个msg格式的数据。
基本格式包括:bool,int8,int16,int32,uint,float32,float64,string,time,duration,header,不定长数组array[],定长数组array[n]

  • sensor_msgs/Image(sensor_msgs/msg/Image.msg) 定义了传输一幅图的数据格式
  • rostopic list列出当前所有topic
  • rostopic info /topic_name显示某个topic的属性信息
  • rostopic echo /topic_name显示某个topic的内容
  • rostopic pub /topic_name ...向某个topic发布内容
  • rosmsg list列出系统上所有msg
  • rosmsg show /msg_name显示某个msg内容 (这里显示的是msg的格式内容)

Service

同步通信方式 request-reply方式通信
ROS学习笔记_第6张图片

srv Service通信格式,定义在.srv文件中

  • rosservice 与 rostopic对应
    rosservice list列出当前所有活跃的service
    rosservice info service_name显示某个service的属性信息
    rosservice call service_name args调用某个service
  • rossrv 与 rosmsg对应
    rossrv list列出系统上所有srv
    rossrv show srv_name显示某个srv内容

异同

ROS学习笔记_第7张图片

后续

在定义了msg和srv后需要对package.xml和CMakeList.txt进行修改,添加相关依赖才能运行。

Action

类似Service,在通信过程中有执行状态的反馈,更常用于那些执行时间较长,并且可能需要中断和被抢占的任务节点中。
ROS学习笔记_第8张图片

action通信的数据格式 定义在.action文件中

Parameter Server

参数服务器,存储各种参数的一种字典格式。可以使用命令行,launch文件和node节点的api进行读写。
感觉像是一种全局变量的维护方式。

命令行

命令 含义
rosparam list 列出当前所有参数的值
rosparam get param_key 显示某个参数的值
rosparam set param_key param_value 设置某个参数的值
rosparam dump file_name 保存参数到文件(文件格式为YAML文件)
rosparam load file_name 从文件读取参数
rosparam delete param_key 删除参数

launch文件

node(API)

常用工具

Gazebo

仿真工具,模拟器,ODE物理引擎

RViz The Robot Visualization tool

可视化调试工具

rqt

可视化工具,基于qt开发
rqt_graph:显示通信架构
rqt_plot:绘制曲线
rqt_console:查看日志

rosbag

命令行工具,记录和回放数据流(top数据流)

命令 含义
rosbag record 记录某些topic的数据到bag文件中
rosbag record -a 记录所有topic到bag文件中
rosbag play 回放bag文件中记录的数据

Moveit

机械臂常用的专用工具

Client Library

ROS编程的库 对API进行了进一步的封装,一些标准接口。
编程的具体方法与细节。
http://docs.ros.org/api/

roscpp C++的接口

官方文档:http://docs.ros.org/en/api/roscpp/html/
具体见该https://www.bilibili.com/video/BV1mJ411R7Ni?p=22&spm_id_from=pageDriver 视频中有一系列例子及讲解。

#include
//导入自定义的一些msg之类的头文件
...

ros::init()

在这里插入图片描述

ros::NodeHandle

ROS学习笔记_第9张图片

ros::master

ROS学习笔记_第10张图片

ros::this_node

ROS学习笔记_第11张图片

ros::service

ROS学习笔记_第12张图片

ros::param

ros::names

ROS学习笔记_第13张图片

rospy python的接口

http://wiki.ros.org/rospy

import rospy
import math
from topic_demo.msg import gps #自己定义的各种msg等等都需要import

Node

ROS学习笔记_第14张图片

Topic

ROS学习笔记_第15张图片
其中queue_size(队列长度)如果传入为None会变成同步方式,只有是一个整数才是异步方式。

Service

ROS学习笔记_第16张图片

Param

ROS学习笔记_第17张图片

Time

ROS学习笔记_第18张图片
Time是表示时刻的类
Duration是表示时间(持续时间)的类

TF & URDF

TF: TranForm 坐标系变换
URDF:机器人描述规范

TF树

机器人每个frame(以每个部件为中心的坐标系)之间的连接关系,每个连接关系都有一个node来进行维护,这些节点将消息发布到tf的topic中,然后从这些消息中就可以恢复得到一棵完整的tf树,这些消息可以反映每个部件之间的相对位移关系。
tf的具体消息格式以及消息发送和接收方法略【详情见视频】

命令 含义
rosrun tf view_frames 根据当前的tf树(最近5s内的tf消息)创建一个tf图
rosrun rqt_tf_tree rqt_tf_tree 查看当前的tf树(动态变化)
rosrun tf tf_echo [reference_frame] [target_frame] 查看两个frame之间的变换关系

urdf Unified Robot Description Format

定义机器人结构

  • link 核心部件
  • joint 两个link之间的连接部件(连接关系)
    ROS学习笔记_第19张图片

出错处理

依赖安装

rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y

报错信息如下

ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
robot_sim_demo: Cannot locate rosdep definition for [yocs_cmd_vel_mux]
navigation_sim_demo: Cannot locate rosdep definition for [dwa_local_planner]
slam_sim_demo: Cannot locate rosdep definition for [hector_mapping]ERROR: the following packages/stacks could not have their rosdep keys resolvedto system dependencies

使用sudo apt-get install ros-kinetic-[] 命令将缺失的包都进行安装再次运行即可。

参考资料

视频教程ros入门:https://www.bilibili.com/video/BV1mJ411R7Ni?p=1

你可能感兴趣的