ROS入门级教程

目录

前言

一、ROS简介与安装

二、ROS文件系统

三、ROS核心概念

1.节点

2.话题

3.通讯机制

四、ROS的编译与简单使用

五、调试工具

1.Rviz和Gazebo

2.rqt工具

 3.rosbag

六、常用指令

1.常用的文件系统命令实践

2.节点(Nodes)相关的命令

3.Topic 相关的命令

4.Message 相关的命令

5.Service 相关的命令

6.参数服务器相关的命令

总结


前言

        本文讲述ROS的入门级教程,介绍ROS的安装,ROS程序的主体架构、核心概念、已有程序的编译与使用、常用的调试工具和一些指令。


提示:系统配置:ubuntu18.04 + ROS Melodic

一、ROS简介与安装

        Robot Operating System (ROS) 机器人操作系统的官方定义:
        ROS 是面向机器人的开源的元操作系统(meta-operating system),它能够提供与传统操作系统类似的诸多功能,如硬件抽象、底层设备控制、常用功能实现、进程间消息传递和程序包管理等。此外,它还提供相关工具和库,用于获取、编辑、编译代码,以及在多台计算机上运行程序,实现分布式计算。

        第一代ROS仅支持安装于ubuntu系统,第二代ROS2也支持windows等系统。ROS的版本受制于系统版本,如ubuntu18.04仅支持ROS Melodic,ubuntu20.04仅支持ROS Noetic。以下是具体安装步骤:

        1.安装ubuntu系统,具体步骤略,以下以ubuntu18.04为例。

        2.安装ROS(Melodic)

                2.1安装ROS源文件,打开终端输入:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

#或者选用国内的软件源,提高下载速度

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'

                2.2设置公钥,继续在终端输入:

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

                2.3更新最新可用软件包列表,继续在终端输入:

sudo apt update

                2.4安装ROS,继续在终端输入,建议安装完整版:

sudo apt install ros-melodic-desktop-full

                2.5初始化 rosdep,继续在终端输入,这里使用不知名高手的方法有效规避墙:

sudo rosdepc init

rosdepc update

                2.6设置环境,继续在终端输入:

echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc

source ~/.bashrc

        3.测试,运行小海龟和rviz

        3.1.1打开终端输入

roscore

        3.1.2再打开一个终端输入

rosrun turtlesim turtlesim_node

        3.1.3出现了一个小海龟,再打开一个终端输入

rosrun turtlesim turtle_teleop_key

        让光标在第三个打开的终端中闪烁,此时就可以通过方向键控制小乌龟移动了

        3.2.1运行rviz

        打开终端输入

rosocre

        3.2.2再打开一个终端输入

rosrun rviz rviz (或者rviz)

         出现这个画面说明rviz等组件安装成功

         4.退出ROS程序(进程)

将光标放入对应终端内,按Ctrl+C,适用于几乎所有ROS程序

二、ROS文件系统

        ROS 文件系统的主要目的是使创建的工程集中化,同时提供足够的灵活性使依赖关系分散化。

 

        Catkin 是 ROS定制的编译构建系统,对CMake的扩展。总之,Catkin就是用来编译ROS程序的。Catkin工作空间,就是一个文件夹。,组织和管理功能包的文件夹,以catkin工具编译。对它的创建,克隆修改之类的,都在这个文件夹中完成。

        Build:里面放的是c_make和catkin的缓存信息和中间文件。

        Devel:存放目标文件,比如:头文件,动态链接库,静态链接库,可执行文件。

        Src:是我们真正写代码的地方。我们只需要专注于src就可以了。

        Package 是catkin编译的基本单元。Catkin编译的对象就是一个一个的package。Catkin在编译的时候是在src目录下,以递归形式查找每一个package,所以也可以将多个package放在一个folder下面。

三、ROS核心概念

1.节点

        节点(Node)是ROS程序的运行实例(可执行文件的实例化),也可以理解为几乎相互独立的程序,不同节点实现不同功能,节点通过ROS节点管理器(Master)注册信息,并且多个节点可同时运行。(另一角度定义,ROS 程序的运行实例,即一个进程,称为节点。)

2.话题

        话题(Topic)是节点之间通讯的桥梁,节点将消息发布到话题,同时也可以订阅话题以接收消息。

3.通讯机制

        ROS通讯采用分布式网络结构,使用基于TCP(俗称3次握手)的通信方式,实现模块间点对点的连接。其通讯方式有以下几种。

        3.1基于话题(Topic)的通信

        

        ①Talker(节点1)向Master(节点管理器)注册发布者的信息,包含发布消息的话题名(此处为"bar",地址为"1234"),Master会将其储存到注册列表,等待接受此话题的Listener(节点2)。

        ②Listener向Master注册接收者的信息,包含订阅的话题名"bar"。

        ③Master根据Listener订阅的话题在注册列表寻找与之匹配的话题。如果没有找到匹配的发布者,则等待发布者的加入,如果找到可以与之匹配的发布者信息,则向Listener发送Talker的地址信息"1234"。

        ④⑤⑥Listener接收到Talker的地址信息,就尝试向Talker发送连接许可,当Talker与Listener互相确认信息后就建立连接(3次握手)。

        ⑦等连接成功后,Talker才向Listener发送消息(地址为"2345")。可以发现,话题在两节点通讯之间用于相互验证身份,起到桥梁作用。

        需要注意的是,这两个节点可以以任意顺序开始、结束,不会导致任何错误,他们是相互独立的。

        3.2基于服务(Service)的通信

 

        服务调用(service calls)是ROS另一种通信方法。它与话题通信的区别是:服务允许Client(节点1:客户端)发送请求(request)到Server(节点2:服务器) 并获得一个响应(response),服务调用是双向的,且实现的是一对一的通信;对于话题,消息发布的节点不知道是否有其他节点订阅了这个消息,而订阅的节点也不知道是否有其他节点会发布这个消息,且同一个话题可以有很多个发布者和订阅者。

        服务的描述定义了ROS中需求和响应的数据结构,同消息类型一样,服务数据类型也是由一系列域构成的。唯一的区别就在于服务数据类型分为两部分,分别表示请求和响应。

        3.3基于参数(Parameter)的通信

        通过使用参数服务器(parameter server)来维护变量集的值,包括整数、浮点数、字符串以及其他数据类型。参数服务器允许节点主动查询所需参数的值它们适用于配置那些不会随时间频繁变更的信息。

四、ROS的编译与简单使用

(这里只讲述如何使用别人开发的ROS功能包,暂不讲述如何自己开发)

1.创建一个workspace(工作空间)

打开终端依次执行:

#在/home/你的用户名目录/目录下,新建一个文件夹

mkdir -p ~/catkin_ws/src

#进入到 ~/catkin_ws/src目录下

cd ~/catkin_ws/src

#初始化workspace,执行完该命令后,src目录下会多出一个 CMakeLists.txt 文件。

catkin_init_workspace

2.编译package,生成可执行文件

#返回到上层目录

cd ~/catkin_ws/

#编译,执行完该命令后,发现工作空间catkin_ws中有三个目录: build devel src,其中,src是我们创建工作空间时创建的目录,另外两个是执行完 catkin_make 后生成的。

catkin_make

3.运行ROS节点

#将对应的工作空间的路径加入环境变量ROS_PACKAGE_PATH中。

source devel/setup.bash

#运行package功能包的node节点

rosrun package_name node_name

五、调试工具

1.Rviz和Gazebo

Rviz是一款3D可视化工具,强调把已有的数据可视化显示。

Gazebo是3D物理仿真平台,强调的是创建一个虚拟的仿真环境。

 Rviz需要已有的数据,而Gazebo可以创造数据。

我们可以在Gazebo中创建一个机器人世界,不仅可以仿真机器人的运动功能,还可以仿真机器人的传感器数据,而这些数据就可以放到Rviz中显示,所以使用gazebo的时候,经常也会和rviz配合使用。

2.rqt工具

①rqt_graph:查看节点之间的发布-订阅关系。

 ②rqt_plot:实时显示一个发布到某个话题上的数据变化图形。

 3.rosbag

        包文件由 ROS 生成,可用于保存话题(Topic)和服务(Service)等传输的信息,采用 *.bag 文件格式。通常用于实验数据的记录和算法调试。

①录制

#如果要记录所有的topic,则可以直接使用-a来记录

rosbag record -a

#如果仅记录某些感兴趣的topic的话,这可以使用下面这个命令样式来进行记录

rosbag record <topic_name> <topic_name>....

#如果要指定录制文件名字的话,则使用-O/-o参数

rosbag record -O bagname.bag <topic_name> <topic_name>... #为文件命名
rosbag record -o bagname <topic_name> <topic_name>... #为文件名字做前缀

#其他录制命令如下

rosbag record --duration=30 /topic_name #持续30s录制,还可以指定m,h,和--split类似
rosbag record --split --size=1024 /topic_name1 #空间达到1024M后分文件存储
rosbag record --split --duration=30 /topic_name1 #持续时间到30s后分文件存储
rosbag record --split --duration=5m /topic_name1 #持续时间到5m后分文件存储
rosbag record --split --duration=2h /topic_name1#持续时间到2h后分文件存储
rosbag record -l 1000 /topic_name1  # 录制该主题1000个消息限制

 ②查看

当录制好bag以后,可以利用info参数来查看bag的相关信息

rosbag info filename.bag

③播放

#当录制好bag以后,可以利用play参数让bag播放,回放bag中的topic

rosbag play <bagfile>

#如果想改变消息的发布速率,可以用下面的命令,-r 后面的数字对应播放速率

rosbag play -r 2 <bagfile>

#利用参数-l则可实验循环播放

rosbag play -l <bagfile>

#如果只播放感兴趣的 topic ,则用命令

rosbag play bag_name.bag --topics /topic_name1 /topic_name2

#开始播放立刻暂停,按空格继续

rosbag play --pause bag_name.bag

#指定播放起始点

rosbag play bag_name.bag -s 5 #从5s的地方开始播放

#指定播放时长

rosbag play bag_name.bag -u 250 #播放250s信息

#发布时钟,默认/clock话题是没有消息的

rosbag play --clock bag_name.bag #默认/clock的话题频率100hz
rosbag play --clock --hz 200 bag_name.bag #指定/clock的时钟为200hz

④其他

#rosbag 重新索引是一个命令行工具,用于修复破损的袋文件如果某个包由于任何原因没有清洁地关闭,则索引信息可能已损坏。使用此工具重新读取消息数据并重新生成索引。

rosbag reindex old.bag

#重新录制rostopic filter

#过滤单个topic

#生成的tf.bag仅包含/tf这一个topic

rosbag filter input.bag only-tf.bag "topic == '/tf'"   

#生成的output.bag包含‘/velodyne_point_cloud、/visensor/imu、/visensor/left/image_raw‘这三个topic

rosbag filter input.bag output.bag "topic == '/velodyne_point_cloud' or topic =='/visensor/imu' or topic == '/visensor/left/image_raw'"  
 

#根据时间过滤:

rosbag filter input.bag output.bag "t.to_sec() <= 1284703931.86"

六、常用指令

1.常用的文件系统命令实践

rospack find turtlesim
rosstack find ros_comm
rosls turtlesim
roscd turtlesim
pwd                            # 显示当前所在目录
cd | cd ~ | cd - | cd ..    # 目录跳转
ls | ll            # 列出目录和文件
ps -ef            # 以完整格式显示所有进程信息
kill <pid>    # 杀死指定进程
grep -rn 'publish' ./    # 递归搜索当前目录下包含#"publish"字符串的文件

2.节点(Nodes)相关的命令

rosrun <package-name> <executable-name>
rosnode help
rosnode list
rosnode info <node1> <node2> …
rosnode machine <machine-name>
rosnode ping <node-name>
rosnode kill <node-name>
rosnode cleanup

3.Topic 相关的命令

rostopic help
rostopic list
rostopic echo <topic-name>        # eg. /turtle1/pose
rostopic hz <topic-name>            # eg. /turtle1/pose
rostopic bw <topic-name>        # eg. /turtle1/pose
rostopic info <topic-name>        # eg. /turtle1/cmd_vel
rostopic type <topic-name>        # eg. /turtle1/cmd_vel
rostopic find <message-type-name>

4.Message 相关的命令

rosmsg help
rosmsg list
rosmsg info <message-type>   # eg. turtlesim/Pose

# 显示指定软件包中定义的所有消息
rosmsg package <package-name>

# 显示定义了消息的所有软件包
rosmsg packages

5.Service 相关的命令

rosservice help
rosservice list
rosnode info <node-name>            # eg. /turtlesim
rosservice node <service-name>    # eg. /clear
rosservice info <service-name>    # eg. /clear
rossrv info <service-type-name>
rosservice call <service-name> [args …]
eg. rosservice call /clear    # 清除运行轨迹

6.参数服务器相关的命令

rosparam help
rosparam list
rosparam get <param-name>    # eg. background_b
rosparam set <param-name> <value>
rosservice call /clear    #使背景色生效


总结

本篇介绍了ROS基本入门操作,只涉及ROS的安装和使用已有的程序,暂未考虑开发。

  • 46
    点赞
  • 462
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: "ROS2入门21讲"是一套图文教程,以简单易懂的方式介绍ROS2的基本概念和操作。通过这套教程,读者可以了解Ros2的工作原理,学习如何使用ROS2搭建机器人系统。教程分为21个部分,每个部分讲解一个话题,包括ROS2的体系结构,节点,Topic,服务等。对于初学者来说,这套教程是学习ROS2的良好入门材料。在学习过程中,读者可以循序渐进地学习相关知识,通过实际操作,了解ROS2的核心技术。教程还提供了大量的示例代码和操作指南,帮助读者更好地理解ROS2的操作过程。此外,教程也提供了一些高级内容的介绍,如如何自动部署ROS2应用,如何实现ROS2的多机通信等。总体而言,ROS2入门21讲图文教程是一套非常实用的教程,适合初学ROS2的读者使用。学习这套教程可以让读者了解ROS2在机器人系统中的应用,从而更好地掌握相关技能。 ### 回答2: 如今,ROS成为了机器人领域调试、开发和测试的标准,ROS 2是其最新版本,它主要带来了更快的性能、更好的可靠性和更好的可扩展性等特性。 为了帮助大家更快、更好地学习ROS 2,本着开放、分享、合作的精神,一位名为vxy10的作者为我们制作了《ROS 2入门21讲图文教程》。 该教程分为多个章节,涵盖了ROS 2的基础知识、常用工具的使用以及一些实例案例的讲解等内容。 首先,作者详细阐述了ROS 2的基础概念,例如节点、话题、服务、参数、行为等,为读者提供了一个清晰的整体认识。然后,课程讲解了ROS 2常用的工具和函数,包括Rviz、rostopic、rosnode、rqt等,为新手提供了一个快速入门的方式。接着,课程分别讲解了一些实例案例,例如如何使用 ROS 2进行控制机器人、如何使用ROS 2进行机器人的对话等,为读者提供了一个更加深入的了解。 本教程不仅提供了详尽的代码示例,还有丰富精美的图例,能够帮助读者更好地理解各种概念和示例。此外,每个章节都配有习题和答案,帮助读者巩固所学知识,提高学习效率。 总之,《ROS 2入门21讲图文教程》具有系统性、实用性和互动性等特点,对于想要学习ROS 2的读者来说,是一份非常宝贵的资源。 ### 回答3: ROS2入门21讲图文教程是一篇非常详细的教程,旨在帮助初学者了解ROS2的基本知识和使用方法。这个教程分为21个章节,每个章节都覆盖了ROS2的不同方面和主题。 在第一章中,教程简要介绍了ROS2的概念和优点,让读者了解ROS2的用途和处理能力。第二章讲解了ROS2的安装和设置,包括环境变量的配置和ROS2节点的启动方式。第三章介绍了ROS2的工具,包括rqt图形界面,rviz可视化环境等,这些工具是ROS2开发的关键组成部分。第四章到第十二章讲解了ROS2的核心概念,包括消息传递机制、文件结构、包和节点等,这些都是ROS2开发的重要知识点。第十三章到第十五章讲解了ROS2服务,包括服务器和客户端的创建和使用。第十六章到第十九章讲解了ROS2参数服务器和节点名称,涉及到ROS2开发中的重要概念和工具。最后两章讲解了ROS2的调试方式和使用ROS2与OpenCV进行通信的方法。 整个教程详细、生动、易于理解,其中配图和代码示范也让读者更好地理解和操作ROS2。对于初学者来说,这个教程是入门ROS2的一份非常好的材料,不仅涵盖了大部分基础知识和技能,而且通过大量实例的演示,让读者能够更好地掌握ROS2的使用方法。所以,这个教程是初学ROS2的开发者们不可多得的宝贵资源。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值