ROS基础教程

1. 简介

ROS 全称为 Robot Operating System (机器人操作系统)

  • ROS 是适用于机器人的开源元操作系统
  • ROS 集成了大量的工具,库,协议,提供类似 OS 所提供的功能,简化对机器人的控制
  • ROS 还提供了用于在多台计算机上获取,构建,编写和运行代码的工具和库,ROS 在某些方面类似于“机器人框架”
  • ROS 设计者将 ROS 表述为 “ROS = Plumbing + Tools + Capabilities + Ecosystem”,即 ROS 是通讯机制、工具软件包、机器人高层技能以及机器人生态系统的集合体

1.1. 系统架构

ROS 的系统架构可分为三层

  1. OS 层,也即经典意义的操作系统。ROS 只是元操作系统,需要依托真正意义的操作系统,目前兼容性最好的是 Linux 的 Ubuntu,Mac、Windows 也支持 ROS 的较新版本
  2. 中间层。是 ROS 封装的关于机器人开发的中间件,比如:
    • 基于 TCP/UDP 继续封装的 TCPROS/UDPROS 通信系统
    • 用于进程间通信 Nodelet,为数据的实时性传输提供支持
    • 大量的机器人开发实现库,如:数据类型定义、坐标变换、运动控制…
  3. 应用层。功能包,以及功能包内的节点,比如: master、turtlesim的控制与运动节点。

1.2. 文件系统

WorkSpace --- 自定义的工作空间
    |--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。
    |--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。
    |--- src: 源码
        |-- CMakeLists.txt: 编译的基本配置
        |-- package:功能包(ROS 基本单元)包含多个节点、库与配置文件,包名所有字母小写,只能由字母、数字与下划线组成
            |-- CMakeLists.txt 配置编译规则,比如源文件、依赖项、目标文件
            |-- package.xml 包信息,比如:包名、版本、作者、依赖项...(以前版本是 manifest.xml)
            |-- scripts 存储 python 文件
            |-- src 存储 C++ 源文件
            |-- include 头文件
            |-- msg 消息通信格式文件
            |-- srv 服务通信格式文件
            |-- action 动作格式文件
            |-- launch 可一次性运行多个节点 
            |-- config 配置信息
        |-- package

ROS 的文件系统本质上都还是操作系统文件,因此可以使用 Linux 命令来操作这些文件。不过,在 ROS 中为了更好的用户体验,ROS 专门提供了一些类似于 Linux 的命令,这些命令较之于 Linux 原生命令,更为简洁、高效。

# 创建新的ROS功能包
catkin_create_pkg 自定义包名 依赖包

# 安装 ROS 功能包
sudo apt install xxx
# 删除某个功能包
sudo apt purge xxx
# 列出所有功能包
rospack list

# 查找某个功能包是否存在,如果存在返回安装路径
rospack find 包名

# 进入某个功能包
roscd 包名

# 列出某个包下的文件
rosls 包名

# 搜索某个功能包
apt search xxx
# 修改功能包文件(需要安装 vim)
rosed 包名 文件名
  1. 执行
# 必须运行 roscore 才能使 ROS 节点进行通信,他是 ROS 的系统先决条件节点和程序的集合。运行 roscore 会运行 ros master、ros 参数服务器、rosout 日志节点
roscore 

# 或(指定端口号)
roscore -p xxxx

# 运行指定的ROS节点
rosrun 包名 可执行文件名

# 执行某个包下的 launch 文件
roslaunch 包名 launch文件名

1.3. 计算图

ROS 文件结构是磁盘上 ROS 程序的存储结构,是静态的,而 ros 程序运行之后,不同的节点之间是错综复杂的,ROS 中提供了一个实用的工具:rqt_graph

rqt_graph 能够创建一个显示当前系统运行情况的动态图形。ROS 分布式系统中不同进程需要进行数据交互,计算图可以以点对点的网络形式表现数据交互过程。rqt_graph 是 rqt 程序包中的一部分

运行 rat_graph 可通过下面命令执行:

rosrun rqt_graph rqt_graph
# 或者直接输入
rqt_graph

1.4. Source

  • 下面命令是使得能够在任意终端都能使用 ROS
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
  • 下面命令是使得能够在任意终端都能使用当前工作空间
echo "source ~/工作空间/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

1.5. helloworld

ROS 可是使用 C++ 或者 Python,但是具体选择哪种语言需要视需求而定:C++ 运行效率高但是编码效率低,而 Python 则反之。基于二者互补的特点,ROS 设计者分别设计了 roscpp 与 rospy 库,前者旨在成为 ROS 的高性能库,而后者则一般用于对性能无要求的场景,旨在提高开发效率

1.5.1. C++ 实现

  1. 进入 ros 包的 src 目录编辑源文件
#include "ros/ros.h"

int main(int argc, char *argv[]) {
    //执行 ros 节点初始化,输入所有参数并对节点命名。注意,节点名称是一个标识符,需要保证在 ROS 网络拓扑中唯一
    ros::init(argc,argv,"hello");
    //创建 ros 节点句柄。注意,因为一个进程上运行一个节点,所以句柄是自动绑定到当前的进程,即节点上的
    ros::NodeHandle n;
    //控制台输出 hello world
    ROS_INFO("hello world!");
    return 0;
}
  1. 编辑 ros 包下的 Cmakelist.txt 文件
add_executable(可执行文件名
  src/步骤3的源文件名.cpp
)
target_link_libraries(可执行文件名
  ${catkin_LIBRARIES}
)
  1. 返回顶层工作空间目录并编译(生成 build 和 devel):catkin_make

  2. 执行

    1. 在一个终端输入命令启动 ROS 核心:roscore
    2. 再在另一个终端输入命令刷新环境变量并运行节点:
source ./devel/setup.bash
rosrun 包名 可执行文件名

命令行输出: HelloWorld!

1.5.2. Python 实现

  1. 进入 ros 包的 scripts 目录编辑 python 文件(C++是进入同级的 src 目录)

                
  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值