ROS入门级教程

2023-05-16

目录

前言

一、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的安装和使用已有的程序,暂未考虑开发。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS入门级教程 的相关文章

  • 电路设计_运算放大器应用

    电路设计 运算放大器应用 说明 xff1a 运算放大器是个万用宝 xff0c 要好好利用起来 xff0c 1 电压跟随 xff1a 起到隔离作用 xff0c 高阻抗变低阻抗 2 同向比例放大器 xff1a 放大输入电压信号 xff0c 在输
  • ESP32_IDF_基于win11的开发环境搭建

    ESP32 IDF 基于win11的开发环境搭建 说明 xff1a 1 安装ofline 2 编译下载 xff08 本来打算使用vscode配合使用来开发的 xff0c 奈何vscode环境真难搞 xff0c 放弃了 xff0c 用不惯 x
  • 树莓派的联网方式

    树莓派的多种联网方式 配置WiFi文件将空白的ssh文件放入sd卡配置WiFI文件 家庭局域网或热点查找树莓派ip 通过网线联网 配置WiFi文件 在sd卡中烧录系统之后 xff0c sd卡中会有如下程序 xff1a 将空白的ssh文件放入
  • STM32F103系列PWM波

    话不多说 xff0c 直接上我能跑通的代码 pwm h span class token macro property span class token directive hash span span class token direct
  • HTTP的几种认证方式之DIGEST 认证(摘要认证) 服务端

    https www cnblogs com xy ouyang p 12609387 html
  • Ubuntu 22.04LTS中使用aptitude来解决build-essential安装过程中过高版本包依赖问题

    小白近日安装完Ubuntu 22 04LTS后 xff0c 记不清是不是用了Software Updater还是自己手动upgrade了包 xff0c 导致在配置编译工具build essential 输入sudo apt install
  • 解决com.github.penggle kaptcha 2.3.2 报错

    需要从该地址处kaptcha的jar包下载位置 xff0c 从该地址下载jar包后 xff0c 可以把该jar包存放在C Users hp Desktop这个位置 xff0c 通过windows的cmd命令进入命令操作界面 执行以下命令 x
  • children 获取所有的子元素节点 2020/11/21

    children 获取所有的子元素节点 也是我们实际开发常用的 span class token operator lt span span class token operator span span class token consta
  • window常见事件 2020/11/24

    window onload是窗口 xff08 页面 xff09 加载时间 xff0c 当文档内容完全加载完成后触发该事件注意 xff1a window onload传统注册事件方式只能写一次 xff0c 如果有多个 xff0c 会以最后一个
  • 用if函数,进入无限循环,如何退出当前函数

    用if函数 xff0c 进入无限循环 xff0c 如何退出当前函数 wxml文件 span class token operator lt span view class span class token operator 61 span
  • form-type:submit和reset用法

    form type submit和reset用法 span class token operator lt span form bindsubmit span class token operator 61 span span class
  • checkbox背景颜色设置

    checkbox背景颜色设置 js文件 data span class token punctuation span languages span class token punctuation span span class token
  • MongoDB安装方案

    安装MongoDB 黑马头条项目 43 人力资源后台项目的接口服务均采用了 MongoDB 43 KOA2 技术栈 xff0c 所以在使用本地服务之前 xff0c 我们需要首先安装MongoDB xff0c 这也是该环节中出问题最多的一项
  • 小程序生成海报携带参数-云函数生成二维码

    1 逻辑代码 span class token keyword async span span class token function qcFn span span class token punctuation span span cl
  • 小程序动画

    小程序动画 点击事件 span class token comment lt 三大特色 gt span span class token tag span class token tag span class token punctuati
  • 小程序云开发--内容安全审查API云调用

    云调用 云调用是小程序 云开发提供的在云函数中调用微信开放接口的能力 xff0c 需要在云函数中通过 wx server sdk 使用 接口方法 openapi span class token punctuation span secur
  • 如何通过异或运算快速简单的实现两个数的值的交换

    实现代码如下图所示 xff1a public class class01 public static void swap int a int b a 61 a b b 61 a b a 61 a b System out println a
  • Cisco ISE AAA认证

    ISE 介绍 思科身份服务引擎 ISE 是一种身份验证安全服务 可以在简单而灵活的界面中显示用户和设备 查看并通过网络平台共享详细信息 使其了解用户 设备和网络的具体情况 当然Cisco还有类型的产品 xff0c 比如NAC ACS 那么三
  • PNET模拟器 安装(附下载地址)

    PNET模拟器介绍 Lab is Simple PNET安装步骤 1 将OVA文件导入Vmware 2 注意点 3 开机 xff0c 进行安装 4 选择第一个 5 安装成功 6 打开浏览器输入上边的IP地址 7 选择Online Mode
  • Python自动化备份网络设备配置

    前提 xff1a https blog csdn net weixin 50299079 article details 109300864 好嘞 xff0c 废话不多说 xff0c 开始搞 本文以Cisco CSR1000V设备配合Pyt

随机推荐

  • Check Point R80.40 防火墙

    Check Point 它是一家以色列的公司 xff0c 是面向全球企业用户业内领先的信息安全解决方案提供商 Check Point 解决方案对恶意软件 勒索软件和高级目标威胁的防范率处于业界领先水准 xff0c 可有效保护客户免受网络攻击
  • YangSuite 与 Netconf

    Cisco YangSuite 提供了一组工具和插件 xff0c 用于学习 xff0c 测试采用yang模型的可编程接口 xff0c 例如Netconf Restconf gNMI等 关于理论可以参考之前写的Cisco YangExplor
  • DMVPN 动态多点隧道技术

    DMVPN的特点 配置简单 中心站点只需要配置一次即可 xff0c 增加站点无需修改中心站点配置 xff0c 分支站点配置几乎相同 xff1b 性能好 能够实现动态mGRE隧道 xff0c 数据在分支之间能够直接通信 xff0c 一次加解密
  • Cisco Viptela SD-WAN 基本部署

    Cisco SD WAN Cisco SD WAN四平面 xff0c 四组件 管理平面 vManage xff1b 提供了一个高度可视化的仪表板 xff0c 可简化网络操作 它在整个 SD WAN 结构中提供集中配置 管理 操作和监控 编排
  • Ubuntu20.04安装ROS系统(其中里边出现了很多错误并解决了)

    目录 前言配置流程1 Software amp Update设置2 ifconfig命令3 安装支持SSH4 安装源5 密钥6 更新7 开始安装ROS8 配置环境变量9 验证是否安装成功 前言 首先非常感谢网上的各种安装教程 xff0c 以
  • 大龄程序员没有出路吗?

    点赞关注 xff0c 不会迷路 xff01 前言 说好的更新终于来了 文末有福利 关于这篇文章 xff0c 其实一直在犹豫怎么跟大家说 因为大龄程序员是一个群体 xff0c 但是每个人的情况又各有不同 这篇文章只能给你一个参考 xff0c
  • 怎么做一个分分钟哄女朋友开心的小程序

    点赞关注 xff0c 不会迷路 xff01 主要目的 xff1a 做一个以女朋友照片为背景的画布 xff0c 装饰点小花小草小气球小爱心 xff0c 另设一个女朋友的小图片可以自由的移动 那么就需要创建一个小花类一个气球类 xff0c 一个
  • maven中Profiles的配置及作用

    1 maven中Profiles的配置方法 xff1a pom xml xff1a pom xml中声明的profile只对当前项目有效 当你的项目存在父模块和字模块的时候 xff0c 通常配置在父模块即可 用户settings xml x
  • Java如果在try,catch里面执行return,那么还会不会执行finally?

    点赞关注 xff0c 不会迷路 xff01 总结 xff1a 1 不管有没有异常 xff0c finally中的代码都会执行 2 当try catch中有return时 xff0c finally中的代码依然会继续执行 3 finally是
  • 从三本院校到斩获字节跳动后端研发Offer

    文章篇幅较长 xff0c 都是满满的干货 xff0c 看完收获绝对很多 xff0c 文末有学习笔记和学习资料领取 前言 大家好 这次应博主的邀约 xff0c 写一篇关于我的 Java 自学经历 xff0c 希望对小伙伴们有所帮助 我本科就读
  • 【面试必看】肝出万字攻略,详解腾讯面试

    点赞关注 xff0c 不会迷路 xff01 2021最新学习面试资料 点击一起学习 暗号 xff1a csdn 最新学习资料 43 简历优化资源 前言 今天给大家分享下腾讯面试攻略 标题涉及的范围很广 xff0c 对多数面试腾讯的人而言 x
  • 国内最简单易用的源码,Nacos必须榜上有名!

    点赞关注 xff0c 不会迷路 xff01 2021最新学习面试资料 点击一起学习 暗号 xff1a csdn 最新学习资料 43 简历优化资源 最近新组件新的小组 xff0c 开始了新的项目 xff0c 项目的注册组件选择了我们国产的Na
  • 怎么做能防止B站再崩?

    点赞关注 xff0c 不会迷路 xff01 本文转载自 xff1a 敖丙 大家都知道虽然我是一个程序员 xff0c 但是我非常热爱运动 xff0c 比如跳舞 xff0c 这不每天回家睡前我都会在B站舞蹈区学习相关的舞蹈 昨天也不例外 xff
  • kali工具安装

    文章目录 汉化火狐浏览器 xff1a 安装google拼音输入法安装google浏览器安装beefssh安装gdebi安装 汉化火狐浏览器 xff1a 先执行命令 xff1a apt y install firefox esr l10n z
  • java多线程-8(CompletableFuture的简单使用)

    CompletableFuture简单使用 在JDK1 5引入的Future接口表示了一个异步计算返回的结果 但是使用Future获取异步返回结果的时候 xff0c 要么调用阻塞方法get 方法 要么轮询看isDone 是否为true ge
  • ROS导航小车2 AMCL(蒙特卡洛)粒子滤波定位算法(仅作个人记录)

    AMCL原理概念 AMCL adaptive Monte Carlo Localization 自适应蒙特卡洛定位 xff0c A也可以理解为augmented xff0c 是机器人在二维移动过程中概率定位系统 xff0c 采用粒子滤波器来
  • Linux安装docker-compose时使用github.com拒接连接处理

    报错如 xff1a Failed to connect to raw githubusercontent com port 443 Connection refused 主要问题就是拒接服务到github com xff0c 你可以测试pi
  • ESP32-CAM 在 Web 服务器中拍照和显示

    ESP32 CAM 在 Web 服务器中拍照和显示 项目简介所需部件项目概况 安装 ESP32 附加组件安装库安装 ESPAsyncWebServer 库安装 ESP32 的异步 TCP 库 ESP32 CAM 拍摄和显示照片 Web 服务
  • Linux系统常用命令总结

    目录 基本常用命令 xff1a 关机重启命令 xff1a 防火墙相关命令 xff1a 针对于CentOS7系统 重定向和追加 xff1a 打包压缩命令 xff1a vi vim编辑器 xff1a 软件包安装命令 xff1a 文件权限设置 x
  • ROS入门级教程

    目录 前言 一 ROS简介与安装 二 ROS文件系统 三 ROS核心概念 1 节点 2 话题 3 通讯机制 四 ROS的编译与简单使用 五 调试工具 1 Rviz和Gazebo 2 rqt工具 3 rosbag 六 常用指令 1 常用的文件