ROS笔记一:工作空间和功能包

目录

工作空间

如何创建工作空间:

 编译工作空间

 设置环境变量

功能包

  创建功能包

CMakeLists.txt

 package.xml


工作空间

ROS的工作空间是用来存放工程文件代码的文件夹

ROS的开发依赖于工作空间,包括编写代码、编译等都是在工作空间下进行的

工作空间有三种文件 :build-编译过程产生的中间文件夹、src-代码文件(功能包)、devel-编译生成的目标文件

如何创建工作空间:

①mkdir -p ~/work_name/src创建文件夹

  1. mkdir: 这是一个常用的命令,用于创建目录。

  2. -p: 这个选项允许mkdir命令创建多级目录结构。如果没有加上这个选项,而你尝试创建的目录的上级目录不存在时,mkdir命令会报错。使用了-p选项后,如果所需的上级目录不存在,mkdir会自动创建它们。

  3. ~/work_name/src: 这指定了你想要创建的目录路径。

    • ~代表当前用户的家目录。在Linux和Unix系统中,每个用户都有一个家目录,通常路径是/home/用户名,对于root用户则是/root。在这个上下文中,~会被自动扩展为当前用户的家目录的绝对路径。
    • /work_name/src指定了在家目录下想要创建的目录结构。具体来说,这个命令会在家目录下创建一个名为work_name的目录,然后在work_name目录内部再创建一个名为src的子目录。
    • work_name就是你工作空间的目录

② cd ~/work_name/src进入文件夹

③ catkin_init_workspac初始化工作空间

运行catkin_init_workspace 命令是要切换到src目录下的

 编译工作空间

编译工作空间是一个用于构建和运行程序的环境。它通常由编译器、库文件和其他必要的工具组成,用于将源代码转换为可执行文件或库。编译工作空间提供了一个统一的界面和管理系统,使开发人员能够轻松地编写、调试和测试他们的代码。

catkin_make:编译工作空间(整个工作空间)

编译完之后当前的路径下就会有三个文件

 编译单独功能包:catkin_make -DCATKIN_WHITELIST_PACKAGES="package_name"

 当使用完编译单独功能包的指令之后想编译整个工作空间,但使用catkin_make此时是编译单独那个指定的功能包,需要catkin_make -DCATKIN_WHITELIST_PACKAGES=""才能把单独解除编译全部功能

自定义编译速度:catkin_make -j -l

"-j"用于指定并行构建任务的数量(同步进行的任务数量);-l表示系统加载的任务数

想加快编译速度的话就:catkin_make -j2 -l2

 设置环境变量

添加环境变量,就为了告诉系统这是我们工作空间的一个路径。在运行工作空间里面程序的时候才能够被正确地索引到

source devel/setup.bash(添加单个终端环境变量)

nano .bashrc

source ..../devel/setup.bash

source .bashrc添加全局环境变量

echo $ROS_PACKAGE_PATH查看ROS的环境变量

功能包

功能包是存放在src下,里面的内容就是编写的源代码

功能包里面的内容:

 include--.h文件、src--.cpp文件、CMakeLists.txt--定义功能包编译的规则、urdf--.urdf文件(三位模型)

package.xml--定义package的属性 、launch--launch文件、scripts--可执行脚本文件(Python

config--参数文件,yaml,srv,msg,action

  创建功能包

catkin_create_pkg<package_name>[depend1] [depend2] [depend3]   

 e.g:catkin_create_pkg new_package std_msgs rospy roscpp

CMakeLists.txt

CMakeLists.txt用于定义编译规则的文件,即用于定义如何编译和构建ROS功能包

常用的cmakelist宏:

  1. cmake_minimum_required:指定CMake的最低版本要求。例如,cmake_minimum_required(VERSION 2.8.3)表示需要使用CMake 2.8.3或更高版本。

  2. project:指定ROS软件包的名称和版本。例如,project(my_package VERSION 0.1.0)表示ROS软件包的名称为my_package,版本为0.1.0。

  3. find_package:查找依赖项并配置ROS软件包。例如,find_package(catkin REQUIRED COMPONENTS roscpp std_msgs)表示需要安装roscpp和std_msgs依赖项,并将它们添加到catkin构建系统中。

  4. catkin_package:定义ROS软件包的编译选项和依赖项。例如,catkin_package(CATKIN_DEPENDS roscpp std_msgs)表示需要在编译ROS软件包时使用roscpp和std_msgs,并将它们作为catkin软件包的依赖项。

  5. include_directories:指定ROS软件包的头文件目录。例如,include_directories(include ${catkin_INCLUDE_DIRS})表示需要包含ROS软件包的include目录和catkin_INCLUDE_DIRS变量中的所有目录。

  6. add_executable:定义ROS软件包的可执行文件。例如,add_executable(my_node src/my_node.cpp)表示需要将src/my_node.cpp文件编译成名为my_node的可执行文件。

  7. target_link_libraries:指定ROS软件包的依赖项。例如,target_link_libraries(my_node ${catkin_LIBRARIES})表示需要将catkin_LIBRARIES变量中的所有库链接到my_node可执行文件中

 package.xml

package.xml用于描述功能包的信息。描述和定义ROS功能包的元数据和依赖关系

<package format="2">根标签

......

</package>

package.xml是以一个标签的形式来写的,分为必要标签和可选标签

必要的package.xml标签:

<name>包名
<version>版本号
<description>描述
<maintainer>维护者 
<license>开源许可

可选的package.xml标签:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/373543.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQLite database实现加密

注意&#xff1a;以下操作以VS2022为开发工具&#xff0c;以C#为开发语言。 数据加密原因 软件在使用的各个场景&#xff0c;很多都需要数据具有保密性&#xff0c;于是对于数据库就需要加密。特别是在某些特定领域或存储敏感数据尤其如此。 SQLite加密实现 SQLite加密有两种…

防范恶意勒索攻击!亚信安全发布《勒索家族和勒索事件监控报告》

本周态势快速感知 本周全球共监测到勒索事件81起&#xff0c;事件数量有所下降&#xff0c;比上月降低20%。 lockbit3.0仍然是影响最严重的勒索家族&#xff1b;akira和incransom也是两个活动频繁的恶意家族&#xff0c;需要注意防范。 本周alphv勒索组织窃取MBC法律专业公司…

【动态规划】【图论】【C++算法】1928规定时间内到达终点的最小花费

作者推荐 【动态规划】【状态压缩】【2次选择】【广度搜索】1494. 并行课程 II 本文涉及知识点 动态规划汇总 LeetCode1928. 规定时间内到达终点的最小花费 一个国家有 n 个城市&#xff0c;城市编号为 0 到 n - 1 &#xff0c;题目保证 所有城市 都由双向道路 连接在一起…

Java设计模式大全:23种常见的设计模式详解(一)

本系列文章简介&#xff1a; 设计模式是在软件开发过程中&#xff0c;经过实践和总结得到的一套解决特定问题的可复用的模板。它是一种在特定情境中经过验证的经验和技巧的集合&#xff0c;可以帮助开发人员设计出高效、可维护、可扩展和可复用的软件系统。设计模式提供了一种在…

VS编译器对scanf函数不安全报错的解决办法(详细步骤)

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…

第5节、S曲线加减速转动【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍步进电机S曲线相关内容&#xff0c;总共分四个小节讨论步进电机S曲线相关内容 5-1、S曲线加减速简介   根据上节内容&#xff0c;步进电机每一段的速度可以任意设置&#xff0c;但是每一段的…

【教程】ESP32-CAM使用WiFi和MQTT

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 连接MQTT 1、先安装库 2、默认你已有MQTT服务器 3、编写代码(跳过WiFi连接部分) #include <PubSubClient.h>// MQTT server details const char* mqtt_server "xxxxx.cn"; const int mqtt_po…

Spring Boot整合MyBatis Plus实现基本CRUD与高级功能

文章目录 1. 引言2. 项目搭建与依赖配置2.1 添加MyBatis Plus依赖2.2 配置数据源与MyBatis Plus 3. 实现基本CRUD功能3.1 创建实体类3.2 创建Mapper接口3.3 实现Service层3.4 控制器实现 4. 高级功能实现4.1 自动填充功能4.2 乐观锁功能4.3 逻辑删除功能 5. 拓展&#xff1a;My…

Kafka SASL_SSL双重认证

文章目录 1. 背景2. 环境3. 操作步骤3.1 生成SSL证书3.2 配置zookeeper认证3.3 配置kafka安全认证3.4 使用kafka客户端进行验证3.5 使用Java端代码进行认证 1. 背景 kafka提供了多种安全认证机制&#xff0c;主要分为SASL和SSL两大类。 SASL&#xff1a; 是一种身份验证机制&…

计算机网络——新型网络架构:SDN/NFV

1. 传统节点与SDN节点 1.1 传统节点(Traditional Node) 这幅图展示了传统网络节点的结构。在这种设置中&#xff0c;控制层和数据层是集成在同一个设备内。 以太网交换机&#xff1a;在传统网络中&#xff0c;交换机包括控制层和数据层&#xff0c;它不仅负责数据包的传输&…

【CSS】margin塌陷和margin合并及其解决方案

【CSS】margin塌陷和margin合并及其解决方案 一、解决margin塌陷的问题二、避免外边距margin重叠&#xff08;margin合并&#xff09; 一、解决margin塌陷的问题 问题&#xff1a;当父元素包裹着一个子元素的时候&#xff0c;当给子元素设置margin-top:100px&#xff0c;此时不…

vue2 自定义指令 v-highlight 文本高亮显示分享

简单分享一个文本高亮显示的自定义指令&#xff0c;主要分两部分&#xff1a; 1、代码实现&#xff1a;在 main.js 文件中添加一个自定义指令&#xff0c;实现搜索时文本高亮显示&#xff0c;代码如下&#xff1a; const highlightText (el, searchText) > {const textCo…

详细关于如何解决mfc140.dll丢失的步骤,有效修复mfc140.dll文件丢失的问题。

mfc140.dll文件是Microsoft Visual Studio 2015程序集之一&#xff0c;它包含用于支持多种功能的代码和库。当这个mfc140.dll文件丢失时&#xff0c;可能会导致相关程序运行出错甚至无法运行。很多用户可能会遇到mfc140.dll丢失的问题&#xff0c;但是这并不是不可解决的困难。…

2024 年十大 Vue.js UI 库

Vue.js 是一个流行的 JavaScript 框架&#xff0c;它在前端开发者中越来越受欢迎&#xff0c;以其简单、灵活和易用性而闻名。 Vue.js 如此受欢迎的原因之一是它拥有庞大的 UI 库生态系统。 这些库为开发人员提供了预构建的组件和工具&#xff0c;帮助他们快速高效地构建漂亮…

PCIE 参考时钟架构

一、PCIe架构组件 首先先看下PCIE架构组件&#xff0c;下图中主要包括&#xff1a; ROOT COMPLEX (RC) (CPU); PCIE PCI/PCI-X Bridge; PCIE SWITCH; PCIE ENDPOINT (EP) (pcie设备); BUFFER; 各个器件的时钟来源都是由100MHz经过Buffer后提供。一个PCIE树上最多可以有256个…

如何在Termux中使用Hexo结合内网穿透工具实现远程访问本地博客站点

文章目录 前言 1.安装 Hexo2.安装cpolar3.远程访问4.固定公网地址 前言 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的主题生成静态网页。 下面介绍在Termux中安装个人hexo博客并结合…

考研数据结构笔记(1)

数据结构&#xff08;1&#xff09; 数据结构在学什么&#xff1f;数据结构的基本概念基本概念三要素逻辑结构集合线性结构树形结构图结构 物理结构&#xff08;存储结构&#xff09;顺序存储链式存储索引存储散列存储重点 数据的运算 算法的基本概念什么是算法算法的五个特性有…

LeetCode、198. 打家劫舍【中等,一维线性DP】

文章目录 前言LeetCode、198. 打家劫舍【中等&#xff0c;一维线性DP】题目及分类思路线性DP&#xff08;一维&#xff09; 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注…

记一次页面接口502问题:“502 Bad Gateway”

接收别人的项目进行迭代&#xff0c;项目部署到服务器上之后&#xff0c;有一个接口数据刷不出来&#xff0c;一直502 后来联想到网关的问题&#xff0c;想通过设置白名单的方式解决&#xff0c;设置之后依旧不行。 查看nginx日志发现报错&#xff1a; *169 connect() failed …

vue - 指令(一)

看文章可以得到什么&#xff1f; 1.可以快速的了解并会使用vue的指令 2.可以加深你对vue指令的理解&#xff0c;知道每个指令代表什么功能​​​​​​​ 目录 什么是vue的指令&#xff1f;​​​​​​​ vue常见指令的使用 v-html v-show v-if v-else 和v-else-…