大家好,感谢邀请,今天来为大家分享一下深入探索ROS(机器人操作系统)的问题,以及和的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
须藤apt更新
sudo apt full-update 再次更新系统后,按照教程中的流程安装ROS。
基本概念
3.1 ROS
ROS(机器人操作系统)是一个适用于机器人的开源元操作系统。它提供操作系统应有的服务,包括硬件抽象、低层设备控制、通用功能的实现、进程间消息传递和包管理。它还提供跨计算机获取、编译、编写和运行代码所需的工具和库函数。可以从以下四个方面来理解: 1.通道:ROS提供了发布-订阅通信框架,可以轻松快速地构建分布式计算系统。
2.工具:ROS提供了大量的工具组合,用于配置、启动、自测试、调试、可视化、登录、测试和终止分布式计算系统。
3.强大的库:ROS提供了丰富的库文件来实现机器人功能,重点是移动性、操作控制和感知。
4.生态系统:ROS的支持和发展依赖于强大的社区。 ros.org 特别关注兼容性和支持文档,提供“一站式”解决方案,允许用户搜索和学习来自世界各地开发人员的数千个ROS 软件包。
简单来说,ROS提供了一些开源的可调用函数库和通信方法供我们使用。
3.2 工作空间
Workspace是ROS中最小的环境配置单元。 Workspace可以看作是一个结构化的文件夹,其中包含多个包和一些结构文件。只有一次将一个工作空间配置到环境变量中,才能使用ROS命令执行与该工作空间中的包相关的操作。
3.3 功能包
包是ROS应用程序代码的组织单元。每个包都可以包含库、可执行文件、脚本或其他手动创建的内容。只有创建相应的软件包才能实现相应的功能。
3.4 列表
Manifest是对功能包相关信息的描述,用于定义软件包相关元信息之间的依赖关系。这些信息包括版本、维护者、许可协议等。即package.xml 文件。
3.5 脚本文件
CMakeLists.txt 是一个Cmake 脚本文件。 Cmake是一个符合行业标准的跨平台编译系统。这个文件包含一系列编译指令,包括应该生成什么样的可执行文件、需要哪些源文件以及在哪里找到所需的头文件和链接库。
3.6 节点
Node是ROS功能包中的可执行文件。节点之间可以通过ROS客户端库(如roscpp、rospy)相互通信。机器人控制系统由许多节点组成,每个节点各司其职。例如,1个节点控制激光距离传感器,1个节点控制车轮电机,1个节点进行定位,1个节点进行路径规划,1个节点提供系统的整个视图。等待。即能够执行特定工作任务的工作单元。
3.7 节点管理器
节点管理器(Master)是一个ROS 名称服务,可以帮助节点找到彼此。节点通过与节点管理器通信来报告其注册信息。值得注意的是,当这些节点与节点管理器通信时,它们可以接受来自其他注册节点的信息并保持正常通信。当这些注册信息发生变化时,节点管理器也会回调这些节点。因此,如果没有节点管理器,节点将无法找到彼此、交换消息或调用服务。
3.8 参数管理器
参数管理器(参数服务器)是节点管理器的一部分,是可通过网络访问的共享多变量字典。节点使用此服务器来存储和检索运行时参数。
3.9 消息
消息是一种ROS 数据类型。节点向特定主题发布消息,从而将数据发送到另一个节点。消息具有一定的类型和数据结构,包括ROS提供的标准类型和用户定义类型。消息和主题(发布/订阅模式)密切相关。 msg 文件本质上是一个简单的文本,它在结构上描述了ROS 中使用的消息类型。它描述了消息的数据类型。
3.10 主题
Topic是用于在节点之间传输数据的总线。通过主题的消息路由不需要节点之间的直接连接。节点可以向主题发布消息,也可以订阅主题来接收消息。一个主题可以对应多个作为主题发布者和主题订阅者的节点。当然,一个节点可以发布和订阅多个主题。如果某个节点对某类数据感兴趣,只需要订阅相关主题即可。一般来说。主题发布者和主题订阅者不知道彼此的存在。发布者在全局工作区中发布信息。当订阅者发现该信息是自己订阅的信息时,就可以接收该信息。
3.11 服务
当需要直接与节点通信并获取响应时,无法通过主题来实现,而是需要服务。我们可以看到,发布/订阅模式是一种多对多的传输方式。显然这种传输方式不适合请求/回复交互方式。请求/回复交互通常用于分布式系统中。请求服务是通过Service来执行的,Service被定义为一对消息结构:一个用于请求,一个用于回复。客户端通过发送请求信息并等待响应来使用服务(ROS中的请求/回复交互类似于远程函数调用,srv文件类似于函数参数和返回值的定义)。
3.12 消息录音包
消息记录包(Bag)是一种用于保存和回放ROS消息数据的格式。消息记录数据包是检索传感器数据的重要机制。尽管这些数据很难收集,但它们对于开发和测试算法是必要的。
常用命令
4.1 ROS Shell 命令
命令功能
roscd 移动到指定的ROS包目录
rosls 显示ROS包的文件和目录
rose 编辑ROS包的文件
roscp 复制ROS包的文件
rospd 将目录添加到ROS 目录索引中
rosd 显示ROS目录索引中的目录
roscd [软件包名称]。使用它,您不再需要使用cd逐层搜索并进入功能包。
rosls [包名称]。相当于roscd+ls。查看ROS功能包的文件列表更加方便快捷。
rose[功能包名称][文件名].用于编辑功能包中的特定文件。它的优点是快速且易于修改。
4.2 ROS执行命令
命令功能
roscore打开Master(ROS名称服务)
rosrun 运行单个节点
roslaunch运行多个节点并设置运行选项
rosclean 检查或删除ROS 日志文件
roscore [选项]。运行主节点,管理节点之间消息通信中的连接信息。主节点的具体作用我就不详细说了。
rosrun [包名称] [节点名称]。执行指定功能包中某个节点的命令(rosrun rqt_graph rqt_graph可以查看当前系统的运行状态)。
roslaunch [功能包名称] [启动文件名]。与dat批处理命令类似,是运行指定功能包之一或设置执行选项的命令。
罗斯清洁[选项]。运行roscore时,所有节点的记录都会写入日志文件。随着时间的推移,需要使用rosclean 命令定期删除这些记录。
4.3 ROS信息命令
命令功能
rostopic 查看ROS主题信息
rosservice 查看ROS服务信息
rosnode 查看ROS节点信息
rosparam确认并修改ROS参数信息
rosbag记录并回放ROS消息
rosmsg 显示ROS 消息类型
rossrv 显示ROS服务类型
rosversion 显示ROS功能包的版本信息
roswtf 检查ROS系统
rostopic [选项]
list - 列出活跃主题
echo [主题名称] - 实时显示指定主题的消息内容
find [类型名称] - 使用指定类型的消息显示主题
type [主题名称] - 显示指定主题的消息类型
bw [主题名称] - 显示指定主题的消息类型
hz [主题名称] - 显示指定主题的消息数据发布周期
info [主题名称] - 显示指定主题的消息
pub [主题名称] [消息类型] [参数] - 发布指定主题名称的消息。在许多情况下,打开另一个终端。操作示例: rostopic pub -1 /turtle1/cmd_vel Geometry_msgs/Twist "[2.0, 0.0, 0.0] "[0.0, 0.0, 0.0]"
罗斯服务[选项]
list - 显示活动服务信息
info [服务名称] - 显示有关指定服务的信息
type [服务名称] - 显示服务类型
find [服务类型] - 查找指定服务类型的服务
uri [服务名称] - 显示ROSRPC URI 服务
args [服务名称] - 显示服务参数
call [服务名称] [参数] - 使用输入的参数请求服务,通常用于测试服务
罗斯节点[选项]
list - 查看活动节点列表
ping [节点名称] - 执行与指定节点的连接测试
info [节点名称] - 查看指定节点的信息
machine [PC 名称或IP] - 查看在此PC 上运行的节点列表
Kill [节点名称] - 停止指定节点的运行
cleanup——删除掉线节点的注册信息
rosparam [参数]
list - 查看参数列表
get [参数名称] - 获取参数值
set [参数名称] - 设置参数值
dump [文件名] - 保存参数到指定文件
load [文件名] - 获取指定文件中保存的参数,经常使用。
删除[参数名称] - 删除参数
rosmsg [参数]
列表- 显示所有消息
show [消息名称] - 显示指定的消息
md5 [消息名称] - 显示md5sum
package [功能包名称] - 显示指定功能包的所有消息
packages - 显示使用该消息的所有功能包
rossrv [参数]
列表- 显示所有服务
show [服务名称] - 显示指定的服务信息
md5 [服务名称] - 显示md5sum
package [功能包名称] - 显示指定功能包中使用的所有服务
packages - 显示使用该服务的所有功能包
罗斯巴格[参数]
record [选项] [主题名称] - 将指定主题的消息记录到包文件中
info [文件名] - 查看包文件信息
play [文件名] - 播放指定的包文件。这是经常使用的。
compress [文件名] - 压缩指定的bag文件
decompress [文件名] - 解压指定的bag文件
filter [输入文件] [输出文件] [选项] - 生成新的bag文件,删除指定内容
reindex bag [文件名] - 刷新索引
check bag [文件名] - 检查指定的bag文件是否可以在当前系统上播放
修复[输入文件] [输出文件] [选项] - 将因版本不同而无法播放的包文件修改为可以播放的文件
4.4 ROS catkin命令
catkin_create_pkg - 自动生成函数包(示例命令:catkin_create_pkg [函数包名称] [依赖函数包1] [依赖函数包2]….)。
catkin_make - 基于catkin构建系统构建(示例:catkin_make pkg [包名称]仅构建部分功能包)。
catkin_eclipse - 修改catkin构建系统生成的功能包,使其可以在Eclipse环境中使用。
catkin_prepare_release - 发布期间使用的日志组织和版本标记。
catkin_generate_changelog - 发布时生成或更新CHANGLOG.rst 文件。
catkin_init_workspace - 初始化catkin构建系统的工作目录。
catkin_find - 搜索catkin,查找并显示工作区。
4.5 ROS功能包命令
rospack [options] [功能包名称] - 查看ROS功能包相关信息(可以使用find、list、depend-on、depends和profile选项)。
rosinstall - 安装ROS 附加功能包。
rosdep [options] - 安装此功能包的依赖文件(检查、安装、初始化、更新)。
roslocate [options] [功能包名称] - ROS功能包信息相关命令(可用选项有info、vcs、type、uri和repo等)。基本操作
5.1 创建ROS工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make 其中catkin_ws是自定义工作区名称,即文件夹名称。
5.2 将工作空间配置到环境变量中
可以使用以下命令进行配置:
源码devel/setup.bash也可以直接写在.bashrc中:
source ~/catkin_ws/devel/setup.bash5.3 创建功能包
首先切换到工作区的src目录:
cd ~/catkin_ws/src 然后使用catkin_create_pkg命令创建功能包:
catkin_create_pkg Beginner_tutorials std_msgs rospy roscpp 其中,beginner_tutorials 是创建的函数包名称,后面是该函数包依赖的三个函数包。运行后可以看到在begin_tutorials目录下创建了package.xml和CMakeLists.txt两个文件。
5.4 配置package.xml文件
接下来,配置package.xml 文件。 package.xml文件主要由4个标签组成,分别是description标签、maintainer标签、license标签、dependency标签。
?xml version="1.0"?beginner_tutorials0.1.0初学者_tutorials包你的名字BSDhttp://wiki.ros.org/beginner_tutorialsJane Doecatkinroscpprospystd_msgsroscpprospystd_msgs5.5 编写ROS程序
在~/workspace/src/功能包名目录下,创建并编辑cpp程序文件(以hello.cpp为例)。运行以下命令:
cd ~/catkin_ws/src/beginner_tutorials
触摸你好.cpp
gedit hello.cpphello.cpp代码如下:
#includeint main(int argc, char ** argv)
{
ros:init (argc, argv, "你好");
ros:NodeHandle nh;
ROS_INFO_STREAM("你好,ROS!");
}5.6 编译ROS程序
5.6.1 声明依赖库
首先,我们需要声明程序所依赖的其他功能包。对于C++程序,这一步是必要的,以确保catkin可以为C++编译器提供适当的标签来定位编译函数包所需的头文件和链接库。
为了给出依赖库,我们需要编辑CMakeLists.txt文件。即修改find_package如下:
find_package(catkin 所需组件
依次写出依赖的功能包。
罗斯普
)同样,我们还需要列出包中的依赖库。如下:
catkinroscpproscpproscpp5.6.2 声明可执行文件
接下来,我们需要在CMakeLists.txt 中添加两行来声明我们需要创建的可执行文件。
第一行:
add_executable(hello hello.cpp) 其中hello是我们要生成的可执行文件的文件名,hello.cpp是生成这个可执行文件所需的源文件列表。如果有多个源文件,请在此处列出,并用空格分隔。
第二行:
target_link_libraries(hello ${catkin_LIBRARIES}) 这一行告诉Cmake 在链接这个可执行文件时需要链接哪些库(已经在上面的find_package 中定义)。
5.6.3 编译工作区
首先返回工作空间目录,然后使用catkin_make命令进行编译:
cd ~/catkin_ws
catkin_make完成编译后,会在工作区中创建两个devel(开发空间,用于放置编译生成的可执行文件)和build(编译空间,用于存放缓存信息以及workspace编译过程中生成的中间文件)。子目录。
5.7 运行ROS程序
hello程序是一个节点(Node),需要节点管理器才能正常运行。启动节点管理器后,使用rosrun命令运行程序:
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!
【深入探索ROS(机器人操作系统)】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
准备学ROS入门!这东西搞明白了能大大提升做机器人工程的能力
有5位网友表示赞同!
看到ROS基础,是不是要开始搭载我的小玩具了?
有18位网友表示赞同!
很久没接触到ROS了,想重新温习一下基础概念
有15位网友表示赞同!
学习ROS的学习资源那么多,从哪里入手好呢?
有5位网友表示赞同!
我一直想了解一下ROS是如何工作的原理,这次机会终于来了!
有16位网友表示赞同!
ROS真是太强大了吧!能把一系列机器人任务串起来。
有16位网友表示赞同!
这个主题很有帮助,我之前做了一些简单的ROS项目,但基础还需要加固一下
有8位网友表示赞同!
希望能够深入理解ROS的节点、话题和服务的使用方法
有17位网友表示赞同!
学完ROS基础之后,可以尝试一些更复杂的机器人控制了吗?
有12位网友表示赞同!
这篇文章能帮我解决一些之前学习ROS遇到的问题吗?
有7位网友表示赞同!
刚接触ROS不久,感觉很抽象,要努力学习理解其中的关键概念
有11位网友表示赞同!
听闻ROS被广泛应用于工业机器人领域,期待学习一下!
有16位网友表示赞同!
需要准备一台机器进行实践操作吗?
有14位网友表示赞同!
希望能从这篇文章中了解一些ROS的实战经验
有7位网友表示赞同!
我之前对ROS有一个误解,这次正好来纠正一下我的认知!
有5位网友表示赞同!
学习ROS基础的过程可能会比较枯燥,但最终成果一定很棒!
有18位网友表示赞同!
期待着能够通过这篇文章掌握ROS的基础知识,开设一个机器人项目!
有5位网友表示赞同!
最近有很多关于ROS的讨论,这个主题很贴切!
有18位网友表示赞同!
希望这篇文章能讲解清楚ROS与其他软件框架的区别
有19位网友表示赞同!
看了标题就感觉很有冲劲,要好好学习一下ROS基础!
有20位网友表示赞同!