ROS2学习笔记(十)从turtlesim学习ROS2的工作空间

前言

学习ROS2的路,并不能通过学习ROS1代替,因为ROS2的“内核”不同于ROS1,必须认认真真从头开始重新学习。

Ubuntu版本:20.04

ROS版本:Foxy

学习笔记回顾

1.ROS2工作空间

ROS2工作空间就是我们在做开发的项目空间,所有功能包的源码、配置和编译都在工作空间下完成。

我们可能会同时开发多个项目,那就需要我们创建多个工作空间,所以工作空间也是存在优先级问题的,比如在不同的工作空间中创建相同名称的功能包,这时ROS2就需要根据优先级选择该启动的功能包。ROS默认是启动上层的工作空间(overlay),上层工作空间中的功能包会覆盖(override)下层的工作空间(underlay)中同名的功能包。

2.配置ROS2环境

在根目录下的.bashrc文件中加入下面的命令:

$ source /opt/ros/foxy/setup.bash

3.创建新的目录

创建新的目录能有效的区分工作空间,文件夹名称可以自由定义,我们可以创建为dev_ws

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

src文件夹就是用来存放功能包的位置。

4.下载例程代码

首先确保终端已经进入了dev_ws/src文件夹下。使用如下命令下载例程代码:

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

执行完成后,此时的ros_tutorials已经克隆到我们的工作空间中,可以在dev_ws/src文件夹下看到ros_tutorials功能包。功能包内一共有四个文件夹,分别为:

roscpp_tutorials  rospy_tutorials  ros_tutorials  turtlesim

5.编译工作空间

下载colcon编译器:

$ sudo apt install python3-colcon-common-extensions

接下来就可以编译代码了,需要先移步至dev_ws工作空间根目录下:

$ cd ~/dev_ws/
$ colcon build 
----
Starting >>> turtlesim
Finished <<< turtlesim [5.49s]

Summary: 1 package finished [5.58s]

构建完成后可以在/dev_ws根目录下看到四个文件夹:

build  install  log  src

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

colcon是ROS2的编译工具,相当于ROS1的catkin一样。

colcon build 后面还可以加上一些参数:

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

6.设置dev_ws的环境变量

$ cd ~/dev_ws
$ . install/local_setup.sh

install文件夹中有两个很相似的文件:

  • local_setup.sh仅会设置当前工作空间中功能包的相关环境变量
  • setup.sh会设置该工作空间以及其他底层工作空间的环境变量

运行功能包:

$ ros2 run turtlesim turtlesim_node

此时我们怎么知道我们是运行的dev_ws下的功能包还是默认路径下的功能包呢。通过修改代码方便我们查看。

7.修改dev_ws下的功能包代码

找到~/dev_ws/src/ros_tutorials/turtlesim/src/turtle_frame.cpp文件并且找到52行中的代码,修改成如下代码:

setWindowTitle("MyTurtleSim");

修改之后在dev_ws目录下重新编译,并且重新运行,模拟器的名称已经改为MyTurtleSim:
在这里插入图片描述

可见,当前运行的就是dev_ws工作空间下的功能包,如果我们重新打开一个终端,不source dev_ws的环境变量,重新运行功能包,效果就不一样了:

$ ros2 run turtlesim turtlesim_node

在这里插入图片描述

具体运行哪里的功能包,取决于我们的环境变量如何设置。

总结

大家需要熟悉工作空间的创建和编译,同时要理解工作空间层次的概念(主要是环境变量的作用)。

Reference:

https://docs.ros.org/en/foxy/Tutorials/Workspace/Creating-A-Workspace.html

结语

本文也是基于笔者的学习和使用经验总结的,主观性较强,如果有哪些不对的地方或者不明白的地方,欢迎评论区留言交流~

为了能和读者进一步讨论问题,建立了一个微信群,方便给大家解答问题,也可以一起讨论问题。
加群链接

猜你喜欢

转载自blog.csdn.net/xiaokai1999/article/details/119078975
今日推荐