IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> ROS2——创建ROS2工作空间 -> 正文阅读

[人工智能]ROS2——创建ROS2工作空间

ROS2中的工作空间类似我们常说的概念——“工程”,是我们在ROS中开发具体项目的空间,所有功能包的源码、配置、编译都在该空间下完成。 ? 我们可能会同时开发多个项目,就会产生多个工作空间,所以工作空间之间也有一个层次的问题,类似于优先级的概念,比如不同工作空间中有同名的功能包,那运行的时候是启动哪一个呢?ROS默认是启动最上层的工作空间( overlay),上层工作空间中的功能包会覆盖(override)下层工作空间(underlay)中的同名功能包。所以有多个工作空间存在的时候,我们还需要注意设置工作空间的层次。 ? 本篇我们就来尝试下工作空间的创建和层次设置。 ?

1.设置ROS2环境变量

? 工作空间的层次是通过环境变量来配置的,简单来说:下一个配置的工作空间会放到上一个配置的工作空间之上。 ? ROS2安装路径下的功能包一般会被我们设置为最下层的工作空间,所以我们在安装好ROS2之后,一定要记得在bashrc中设置如下ROS2安装路径的环境变量:

source /opt/ros/foxy/setup.bash

?

2.创建一个新的文件夹

? 开发每一个项目的工作空间,最好是独立创建一个文件夹,文件夹的名字可以自由定义,比如我们来创建一个开发用的空间空间,就叫做dev_ws:

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

? 这里的src就是未来放置所有功能包相关文件的位置。 ?

3.放置例程代码

? 现在我们使用的终端已经cd到dev_ws/src路径下,接下来我们在这里先放置一些示例的功能包(下一篇会讲如何创建功能包)。

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

? 稍等片刻, ros_tutorials?中的示例功能包就全部放到工作空间的src下边啦,其中我们可以看到这些内容: ?

? 现在我们已经在工作空间中放置好了示例功能包,在编译运行之前,我们还需要配置好这些功能包的依赖。 ?

4.解决依赖问题

? 在创建好功能包之后,我们最好养成一个比较好的习惯,就是先解决所有功能包的依赖,不然未来编译运行都会有很多问题。 ? ROS2也提供了自动化的依赖安装方式,需要我们在工作空间的根目录dev_ws下运行如下命令:

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

? 运行之后,会自动安装确实的依赖,如果依赖全部满足的话,就会显示: ?

? 这里需要注意一点,以上自动化安装依赖的前提是:每个功能包已经完整的将所依赖的包和库在package.xml文件中声明了。 ?

5.编译工作空间

? 接下来就可以编译代码啦,需要在工作空间的根目录dev_ws下运行:

colcon build

? 如果提示colcon没有安装的话,可以使用如下命令安装:

sudo apt install python3-colcon-common-extensions

? colcon是ROS2的编译工具,类似于ROS1中的catkin。运行之后可以看到: ?

? colcon?build后边还可以跟一些常用的参数: ?

  1. --packages-up-to?:编译指定的功能包,而不是整个工作空间
  2. --symlink-install?:节省每次重建python脚本的时间
  3. --event-handlers?console_direct+?:在终端中显示编译过程中的详细日志

? 编译结束后,在dev_ws工作空间下,可以看到有几个新创建的文件夹: ?

? 其中的install文件夹就是未来运行所有节点启动文件和脚本的位置。 ?

6.设置环境变量

? 接下来需要重新打开一个终端,然后来设置dev_ws工作空间的环境变量。 ?

cd ~/dev_ws
. install/local_setup.sh

? install里有两个很类似的文件:local_setup.sh和setup.sh,前者仅会设置当前工作空间中功能包的相关环境变量,后者还会设置该工作空间下其他底层工作空间的环境变量。 ? 现在我们就可以来运行dev_ws工作空间下的turtlesi功能包了:

ros2 run turtlesim turtlesim_node

? 这时会有一个问题,ROS2安装的路径下有一个turtlesim功能包,这里又有一个turtlesim功能包,我怎么能确定现在运行的就是dev_ws里的turtlesim呢? ? 不如我们来尝试修改下这个包,看下是否会有变化。 ?

7.修改上层工作空间中的功能包

? 我们来修改下dev_ws中的turtlesim包里的代码,找到~/dev_ws/src/ros_tutorials/turtlesim/src/ turtle_frame.cpp?文件,在第52行的位置找到窗口标题的设置,并改成如下代码:

setWindowTitle(" MyTurtleSim");

? 修改之后回到dev_ws路径下,再次colcon build编译,然后运行:

ros2 run turtlesim turtlesim_node

? 没错,打开的小海龟窗口中,标题名已经变啦。 ?

? 可见,当前运行的确实是dev_ws工作空间下的turtlesim包。 ? 如果再打开一个新终端,不source dev_ws的环境变量,那么运行一下命令时就不一样啦:

ros2 run turtlesim turtlesim_node

? 所以在这里,dev_ws是上层工作空间,ROS2安装路径是下层工作空间,具体运行哪里的包,全看你在终端中如何设置环境变量了。 ? 好啦,这就是ROS2中工作空间的基本操作,大家需要熟悉工作空间的创建和编译,同时要理解工作空间层次的概念(主要是环境变量的作用)。 ?

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-18 15:58:47  更:2021-12-18 16:00:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年6日历 -2024/6/2 10:09:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码