首页 > 其他分享 >ROS入门

ROS入门

时间:2023-06-28 14:05:26浏览次数:37  
标签:入门 source 工作 空间 turtlesim ROS 上层

背景知识

工作空间指的是包含了ROS 2 应用包的文件夹。在使用ROS 2之前,需要在你将要进行工作的终端上,source你安装了ROS 2的工作空间。这使得ROS 2的应用包可以在所打开的终端上使用。

你还有一个选择是source一个上层工作空间,也就是第二工作空间。第二工作空间指的是你添加了一些新的包,但是它跟已经有的ROS 2 工作空间不存在接口。你的基础工作空间必须要包含有你的上层工作空间所需要的全部依赖。你的上层工作空间中的包会覆盖掉基础工作空间的同名应用包。这里也是可能存在多个层工作空间重叠的情况,每一个上层的工作空间都会使用到它的父工作空间的内容。

前提条件

  • 安装ROS 2
  • 安装colcon
  • 安装git
  • 安装turtlesim
  • 安装rosdep
  • 能理解基础的终端命令(Linux基础教程)
  • 你喜欢的文本编辑器

任务

1. source ROS 2 环境

source ROS 2的基础工作空间可以使用下面的命令:

source /opt/ros/foxy/setup.bash

如果上面的命令不能正常工作,那么具体的命令会跟你的安装方式有关,可以参考:ROS 2环境配置

2. 创建一个新的文件夹

最好是为每一个新的工作空间创建一个新的文件夹。名字不重要,但是它可以帮助你区分不同目的的工作空间。我们选择将工作空间的 名字成为dev_ws,意思是开发工作空间。执行类似下面的命令:

mkdir -p ~/dev_ws/src
cd ~/dev_ws/src

另外一个好的习惯是,将你的工作空间中所有的包都放在src文件夹下。上面的代码在dev_ws下创建一个src文件夹,并且进入到该文件夹下。

3. 克隆一个例程的仓库

在你克隆之前,确认你还在dev_ws/src这个文件夹下。

在接下来的入门级教程中,你将会创建你自己的包,但是现在,你将练习使用已经有的包组成一个工作空间。

你将要使用的已有的包是来自ros_tutorials仓库的。如果你已经看过ROS2专利之前的教程,已经对turtlesim这个包已经很熟悉了,它就是在这个仓库中的其中一个包。

你可以再GitHub上看到这个仓库

注意看文件夹列表左上方的“分支”的下拉菜单。当你克隆这个仓库的时候,通过在命令后面增加-b参数,后面再跟上与你的ROS 2版本想对应分支的名称。

dev_ws/src这个文件夹下,运行对应你正在使用ROS 2版本的命令:

git clone https://github.com/ros/ros_tutorials.git -b foxy-devel

比如,如果你正在使用Foxy:

git clone https://github.com/ros/ros_tutorials.git -b foxy-devel

现在,ros_tutorials已经克隆到你的工作空间。如果你查看dev_ws/src在的内容,你会看到新的叫ros_tutorials的文件夹。

为了查看在ros_tutorials中的文件夹,你可以输入下面的命令:

ls ros_tutorials

这将会返回你刚刚克隆的内容,大概类似:

roscpp_tutorials  rospy_tutorials  ros_tutorials  turtlesim

前面三个包都被忽略了,turtlesim是这个仓库唯一真实的ROS 2 包。

现在你已经在你的工作空间中新增了一个例程的包,但是这还不是一个完整的工作空间,你还需要解决工作空间的依赖问题,并且构建这个工作空间。

4. 解决依赖

在构建工作空间之前,你需要解决应用包的依赖问题。你可能已经安装了所有的依赖,但是最好的操作还是每次克隆了仓库之后都检查一遍依赖。你大概是不希望因此缺少依赖,导致你等待了很长的时间之后,构建失败了。

在你工作空间的根目录(dev_ws),运行下面的命令:

rosdep install -i --from-path src --rosdistro foxy -y

如果你是通过源码或者”fat“包将ROS2安装到你的Linux上,你将需要用它们的安装指南中提到的rosdep命令。下面是分别是源码的rosdep部分以及”fat“archive的rosdep部分

如果你已经有了全部的依赖,终端的窗口会返回下面的信息:

All required rosdeps installed successfully

应用包会将它们的依赖声明在package.xml文件中。这个命令会遍历那些声明,并且安装那些缺少的依赖。

5. 使用colcon构建工作空间

在你的工作空间的根目录(dev_ws),你可以通过下面的命令来构建你的包:

colcon build

命令行的窗口会返回下面的消息:

Starting >>> turtlesim
Finished <<< turtlesim [5.49s]

Summary: 1 package finished [5.58s]

备注:

colcon build还有一些有用的参数:

  • --packages-up-to用来构建你想要构建的包,已经它的全部依赖,但是不会构建整个工作空间(节省时间)。
  • --symlink-install可以让你不需要在每次稍微调整了你的python脚本之后都要重新构建。
  • --event-handlers console_direct+构建的过程中,在窗口中显示输出。否则的话,可以在log文件夹中找到。

一旦构建结束,在工作空间的根目录中输入ls,你可以看到colcon已经创建了新的文件夹:

build  install  log  src

你的工作空间的setup文件会在install文件夹中,你可以用这个setup文件来source你的上层工作空间。

6. source上层工作空间

在你source上层工作空间之前,一件很重要的事情是你需要打开一个新的终端,跟你构建工作空间的那个终端分隔开。在你构建上层工作空间的终端中source上层工作空间,或者反过来,在source了上层工作空间的终端里面构建上层工作空间,都可能引起复杂的问题。

在一个新的终端中,source你的主要的ROS2环境作为基础工作空间,然后你就可以在它上面构建上层工作空间:

source /opt/ros/foxy/setup.bash

去到你的工作空间的根目录:

cd ~/dev_ws

在根目录中source你的上层工作空间:

. install/local_setup.bash

备注

source上层工作空间的local_setup只是只会将上层工作空间的包增加到你的环境中。sourcesetup的话,则会将上层工作空间以及基础工作空间的应用都添加到你的环境中,允许你同时使用两个工作空间的应用包。

因此,source你安装的主要ROS2的setup,然后像你刚刚做的那样,source上层工作空间dev_wslocal_setup,跟仅仅source dev_wssetup是一样的效果,因为这样做环境中也会包含用于创建上层工作空间的基础工作空间。

现在,你可以从上层工作空间中source turtlesim包了:

ros2 run turtlesim turtlesim_node

不过,你如何可以确定,这个turtlesim是来自上层工作空间的,而不是你安装到主环境中的turtlsim呢?

让我们修改上层工作空间中的turtlesim,这样你就可以看到相关的效果了:

  • 你可以修改然后重新构建上层工作空间的包
  • 上层工作空间相比于基础工作空间具有更高的优先级

7. 修改上层工作空间

你可以通过编辑turtlesim窗口的标题栏来修改你的上层工作空间中的turtlesim。为了做到这个,首先在 ~/dev_ws/src/ros_tutorials/turtlesim/src 这个路径下找到turtle_frame.cpp这个文件,然后用你喜欢的文本编辑器打开它。

在第52行,你可以看到 setWindowTitle("TurtleSim");这个函数,将"Turtlesim"这个值改变为"Myturtlesim",然后保存文件。

回到第一个终端,也就是你运行colcon build的终端,把这个命令再运行一次。

回到第二个终端,也就是你source了上层工作空间的终端,然后将turtlesim在运行一次:

ros2 run turtlesim turtlesim_node

你将会看到窗口的标题栏现在显示的是“MyTurtleSim"。

ROS入门_git

虽然在这个终端启动的时候,你也source了ROS2的环境,但是位于dev_ws环境下的上层工作空间比基础工作空间的内容具有更高的优先级。

为了验证你的基础工作空间的内容依然是可以用的,你打开一个全新的终端,然后仅仅是source的你ROS2的安装目录,然后运行turtlesim:

ros2 run turtlesim turtlesim_node

ROS入门_git_02

你可以看到修改过的上层工作空间并没有影响基础工作空间中的任何内容。

总结

在这个教程中,你通过source你所安装的ROS版本作为基础工作空间,并且通过克隆和构建软件包在一个新的工作空间中创建了一个上层工作空间。正如你从修改过的turtlesim中所看到的,这个上层工作空间被前置在环境变量中,对基础工作空间具有优先权。

标签:入门,source,工作,空间,turtlesim,ROS,上层
From: https://blog.51cto.com/u_16018714/6570967

相关文章

  • C++入门
    c++入门--变量与基本类型如果你还没有接触过编程,想先体验一下编程的乐趣。请看我的c++入门(1)--输入输出,代码运行顺序及其控制。此文开始学习变量以及基本类型。原始内置类型(PrimitiveBuild-inTypes)两类:算术类型(arithmetictypes)和void。我们主要讲解算术类型。算术类型(Arithmetic......
  • 新手怎么投资黄金?黄金投资入门知识
    黄金作为市场上热门的投资产品,受到不少新手投资者的青睐。但是在实际交易过程中,还是应该先从黄金投资入门知识学起,真正了解市场之后再正式开始投资。黄金投资入门知识一、投资品种黄金从投资品种方面一共可以分为实物黄金、纸黄金、黄金基金、杠杆黄金四种,这四种之间都是会有区别的......
  • 【Flutter专题】Android Flutter入门笔记、技术解析与项目实战
    Flutter是一个跨平台、高性能的移动UI框架,其采用Dart语言开发,并使用自己的渲染引擎来绘制UI,保证了自身的高性能,保证了在Android和iOS上UI的一致性。目前Flutter已经支持iOS、Android、Web、Windows、macOS、Linux、Fuchsia(Google新的自研操作系统)等众多平台。与其他跨平......
  • Sqlsugar从入门到放弃
    环境要求VS2022/.Net6/SqlServer安装方式项目内Nuget包中引用:.NetCore3&5&6&7&8——》SqlSugarCore.NetCore2——》SqlSugarCore_NetCore2.NetFramework——》SqlSugar 一、数据库迁移和映射1、Dbfirst 示例: 2、Codefirst(1)基础操作 (2)......
  • 编程初学者入门5_键盘输入5个人的身高(米),求他们的平均身高(米)。(C的没问题,试着用Java写
    写在前面此系列博客为牛客网编程初学者入门题目小结,题目很基础不常用的知识容易遗忘,为了边复习c语言和学习Java,后面系列博客将采用c、c++、Java双语言版记录现在位置(72/140),虽然我走的很慢,但我仍在前进~题目描述从键盘输入5个人的身高(米),求他们的平均身高(米)。输入描述:一行,连续输......
  • 编程初学者入门6_简单分支问题+Java在OJ中实现多组输入sc.hasNextInt()函数
    题目KiKi想知道这学期他的学习情况,BoBo老师告诉他这学期挂的科目累计的学分,根据所挂学分,判断KiKi学习情况,10分以上:很危险(Danger++),4~9分:危险(Danger),0~3:Good。输入描述:一行,一个整数(0~30),表示KiKi挂的科目累计的学分。输出描述:一行,根据输入的挂科学分,输出相应学习情况(Danger+......
  • 编程初学者入门7_公务员面试现场打分。有7位考官,从键盘输入若干组成绩,每组7个分数(百分
    题目描述公务员面试现场打分。有7位考官,从键盘输入若干组成绩,每组7个分数(百分制),去掉一个最高分和一个最低分,输出每组的平均成绩。输入描述:一行,输入7个整数(0~100),代表7个成绩,用空格分隔。输出描述:一行,输出去掉最高分和最低分的平均成绩,小数点后保留2位,每行输出后换行。示例1我的......
  • 编程初学者入门11_井字棋游戏、进制转换、订闹钟(时间换算)
    一、井字棋游戏题目描述KiKi和BoBo玩“井”字棋。也就是在九宫格中,只要任意行、列,或者任意对角线上面出现三个连续相同的棋子,就能获胜。请根据棋盘状态,判断当前输赢。输入描述:三行三列的字符元素,代表棋盘状态,字符元素用空格分开,代表当前棋盘,其中元素为K代表KiKi玩家的棋子,为O表......
  • 一文解开主流开源变更数据捕获技术之Flink CDC的入门使用
    @目录概述定义什么是CDC?CDC的分类特性应用场景支持数据源实战FlinkDataStream方式代码示例FlinkSQL方式代码示例概述定义flink-cdc-connectors官网https://github.com/ververica/flink-cdc-connectors源码release最新版本2.4.0flink-cdc-connectors文档地址https://v......
  • [RK3588从入门到精通] 专栏目录及介绍
    1.前言本专栏是由ArmSom团队撰写的[RK3588从入门到精通]本专栏基于RK3588平台讲解嵌入式Linux开发的项目流程。本专栏采用ArmSom出品的ArmSom-W3产品为例进行系统性教程讲解,涉及各种系统讲解:Debian,Ubuntu,Android系统等本专栏可供初学者入门嵌入式Linux平台开发,快速提高嵌入式......