351|0

548

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

《ROS2智能机器人开发实践》--3.ROS2机器人开发流程之工作空间、功能包 [复制链接]

 
本帖最后由 dirty 于 2025-2-15 23:31 编辑

      本篇讲述ROS2机器人开发流程概览,并对其工作空间、功能包进行梳理学习实践。

一.ROS2机器人开发流程

      ROS2的应用开发流程包含如下:

●工作空间(Workspace),开发过程的大本营
●功能包(Package):功能源码的聚集地
●节点(Node):机器人的工作细胞
●话题(Topic):节点间传递数据的桥梁
●服务(Service):节点间的你问我答
●通信接口(Interface):数据传递的标准结构参数(Parameter):机器人系统的全局字典动作(Action):完整行为的流程管理分布式通信(DistributedCommunication):多计算平台的任务分配
●DDS(Data Distribution Service):机器人的神经网络

      ROS2机器人开发流程图如下:

 

二.工作空间与功能包

工作空间

1.工作空间概述

      工作空间是一个存放项目开发相关文件的文件夹,也是开发过程中存放所有资料的大本营。ROS系统中一个典型的工作空间结构如下图所示。

●src,代码空间,未来编写的代码、脚本,都需要人为的放置到这里;
●build,编译空间,保存编译过程中产生的中间文件;
●install,安装空间,放置编译得到的可执行文件和脚本;
●log,日志空间,编译和运行过程中,保存各种警告、错误、信息等日志。

2.创建工作空间

      创建创建工作空间主要是创建目录及代码如下,这里用到了古月居引导学习的ros2 21讲上手代码

  • mkdir -p ~/dev_ws/src
  • cd ~/dev_ws/src
  • git clone https://gitee.com/guyuehome/ros2_21_tutorials.git

3.安装依赖。这里需要安装python3(最好3.8以上)。书中有讲安装rosdepc,实际可安装上rosdep。

  • sudo add-apt-repository ppa:deadsnakes/ppa
  • sudo apt update
  • sudo apt install python3.10
  • sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.x 1
  • sudo update-alternatives --config python3
  • python3 --version

4.编译工作空间

      目录切换到dev_ws,使用colcon build进行全编译,编译成功后,就可以在工作空间中看到自动生产的build、log、install文件夹了。

5.设置环境变量

  • echo " source ~/dev_ws/install/local_setup.sh" >> ~/.bashrc # 所有终端均生效

      至此,我们就完成了工作空间的创建、编译和配置。

 

功能包

      功能包原理,是把不同功能的代码划分到不同的功能包中,尽量降低他们之间的耦合关系。功能包的机制,是提高ROS中软件复用率的重要方法之一。

1.创建功能包

ros2命令中:

pkg:表示功能包相关的功能;
create:表示创建功能包;
build-type:表示新创建的功能包是C++还是Python的,如果使用C++或者C,那这里就跟ament_cmake,如果使用Python,就跟ament_python;
package_name:新建功能包的名字。

      我们可以看到ROS2工作空间ros2_21_tutorials中learning_pkg_c和learning_pkg_python是在终端中分别创建C++和Python版本的功能包:

  • cd ~/dev_ws/src
  • ros2 pkg create --build-type ament_cmake learning_pkg_c # C++
  • ros2 pkg create --build-type ament_python learning_pkg_python # Python

2.编译功能包

      编译功能包可以colcon build全编译,也可以指定功能包编译。编译指定使用前需要安装colcon的扩展功能。

      指定功能包编译指令如下,通过--packages-select 或者--packages-up-to 参数编译指定功能包,package_name用于替换某个具体功能包。

  • cd ~/dev_ws
  • colcon build --packages-select <package_name> # 只编译指定功能包
  • colcon build --packages-up-to <package_name> # 编译指定功能包及相关依赖

3.清除编译历史

  • cd ~/dev_ws
  • rm -rf install/ build/ log/ # 清除工作空间中的编译历史

      以上是功能包操作相关指令,下面了解下功能包结构。

4.功能包的结构

      上面有介绍C++和Python两种版本功能包创建,这里也分开讲述。

C++功能包

      C++类型的功能包,其中必然存在两个文件:package.xmlCMakerLists.txt

      package.xml文件的主要内容如下,包含功能包的版权描述,和各种依赖的声明。

      CMakeLists.txt文件是编译规则,C++代码需要编译才能运行,所以必须要在该文件中设置如何编译,使用CMake语法。

Python功能包

      C++功能包需要将源码编译成可执行文件,但是Python语言是解析型的,不需要编译,所以会有一些不同,但也会有这两个文件:package.xml和setup.py。

      package.xml文件的主要内容和C++版本功能包一样,包含功能包的版权描述,和各种依赖的声明。

      setup.py文件里边也包含一些版权信息,除此之外,还有“entry_points”配置的程序入口。

      至此,对功能包的创建、编译及其结构与文件功能有了了解认识。

查看本帖全部内容,请登录或者注册
点赞 关注(1)
个人签名

保持热爱

 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播 | AI之眼——安森美图像传感器 报名中
直播时间:2025年4月25日(周五)上午10:00-11:30
直播主题:AI之眼——安森美图像传感器
报名观看直播、直播间提问、填写问卷均有机会获得精美礼品!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 2

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表