ROS2 - 创建项目 (Ubuntu22.04)

本文简述:在 Ubuntu22.04 系统中使用 VS CODE 来搭建一个ROS2开发项目。

1. 创建工作空间

本文使用 Ubuntu 22.04, 已安装配置完成 VS Code,C++ 环境(g++/gdb)

1.1 创建目录

选择文件夹作为工作空间,并在这个文件夹下,创建 src 子文件夹。

cd btl_ros_project/
mkdir src
 1.2 编译工作空间

在创建好的功能包中,继续完成代码的编写,完成后需要编译和配置环境变量,才能正常运行:

colcon build   # 编译工作空间所有功能包
source install/local_setup.bash    #配置环境初始化

执行命令后,文件夹内出现了一些新的文件夹:build, install, log。

创建工作空间时需要编译,以后创建功能包,修改代码后都要重新编译。 

1.3 设置环境变量, 初始化工作区

编译完成后,还需要设置环境变量才能让系统知道这个工作空间内有哪些功能包和可执行文件,因此还需要设置环境变量。这一步的作用是初始化工作区。

1)使环境变量只在当前终端内生效

cd btl_ros_project/
source install/local_setup.sh

2)使环境变量在所有终端生效。使用第二种后,也可以使用第一种手动刷新环境变量。

cd btl_ros_project/
echo " source ~/myProjects/btl_ros_project/install/local_setup.sh" >> ~/.bashrc

设置环境变量的操作在每次编译之后都要执行。

2. 创建功能包 

2.1 创建只有一种语言的功能包

创建 C++ 功能包:

cd srcros2 pkg create cal_joint_angle --node-name joint_node --build-type ament_cmake --dependencies rclcpp std_msgs

ros2 pkg create <你的功能包名字> --build-type <选择cmake/ament_camke/ament_python三者之一作为项目的编译工具> --node-name <节点名称,这一项可以不写,后续手动配置> --dependencies <依赖项名字,例如在ROS1中常用的rclpy rclcpp std_msgs sensor_msgs等>

创建 Python 功能包:

cd srcros2 pkg create cal_joint_angle_py --node-name joint_node --build-type ament_cmake --dependencies rclpy std_msgs

package.xml 文件是ROS2项目的功能包管理文件。上述命令中依赖项可以先不写,可以在创建完成后在package.xml中修改CMakeLists.txt 是ROS2项目的编译配置文件。

2.2

2.2 包含多种语言的功能包

建议一个节点仅使用一种语言,通过修改CMakeLists.txt的内容,也可以创建包含多种语言的节点。

3. 进行节点编程

3.1 代码存放位置

C++功能包,将代码文件新建到功能包文件夹下的 src 文件夹内。

Python功能包,将代码文件新建到功能包文件夹下的与功能包同名的文件夹下。

上述两个功能包分别位于:

btl_ros_project/src/cal_joint_angle/src/

btl_ros_project/src/cal_joint_angle_py/cal_joint_angle_py/ 

3.2 VS Code 配置 ROS

1.创建 VS Code 工作目录

cd btl_ros_project/src (进入src文件夹)
code . (在该目录下打开VS CODE)

2. <ROS2工程目录下>/src/<节点cpp>.cpp 节点代码编写

3. 配置 settings.json文件

需要自己在项目下面新建 .vscode 文件夹,然后在在该文件夹下新建 settings.json文件 , 添加下列内容:

{

//添加/opt/ros/humble文件夹下的ros2的include路径

"files.associations": {

"iostream": "cpp"

},

"C_Cpp.default.includePath": ["/opt/ros/humble/include/**"]

}

4. ROS2项目的 package.xml 文件和配置 CMakeLists.txt 文件:

  package.xml 文件是ROS2项目的功能包管理文件。 CMakeLists.txt 是ROS2项目的编译配置文件,ROS2项目采用ament_cmake工具。

5. colcon 构建项目

在项目工作空间的目录下,运行:

colcon build

6.设环境变量

cd btl_ros_project/
source install/local_setup.sh

7.执行该项目节点文件

在终端输入 ros2 run 功能包名 节点名

ros2 run cal_joint_angle joint_node

参考链接:

1. https://blog.csdn.net/qq_51403009/article/details/133415895

2.https://blog.csdn.net/aniclever/article/details/135653069

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一篇文章告诉你聚类算法的作用和怎么用聚类算法!建议收藏!(下篇)

EM聚类 EM聚类 基于概率分布对数据进行建模&#xff0c;通过迭代的期望和最大化步骤来估计模型参数&#xff0c;并将数据分为不同的聚类。EM聚类通常用于处理混合分布的数据&#xff0c;其中每个聚类被建模为一个概率分布。 原理介绍 EM聚类的核心思想是将数据集中的每个样本…

AI图像生成-原理

一、图像生成流程总结 【AI绘画】深入理解Stable Diffusion&#xff01;站内首个深入教程&#xff0c;30分钟从原理到模型训练 买不到的课程_哔哩哔哩_bilibili 二、如果只是用comfy UI生成图片 1、找到下面几个文件&#xff0c;把对应模型移动到对应文件夹即可使用 2、选择对…

HarmonyOS应用模型Stage基本介绍

文章目录 <font colorcoral> HarmonyOS应用模型概况<font colorcoral> Stage模型基本概念<font colorcoral> Stage模型UIAbiliry的生命周期<font colorcoral> Stage模型的配置文件<font colorcoral> 写在后面的话<font colorcoral>Referen…

企业为什么需要HTTPS

一.什么是HTTPS HTTPS &#xff08;全称&#xff1a;Hyper Text Transfer Protocol over SecureSocket Layer&#xff09;&#xff0c;是以安全为目标的 HTTP 通道&#xff0c;在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL&a…

并行执行的4种类别——《OceanBase 并行执行》系列 4

OceanBase 支持多种类型语句的并行执行。在本篇博客中&#xff0c;我们将根据并行执行的不同类别&#xff0c;分别详细阐述&#xff1a;并行查询、并行数据操作语言&#xff08;DML&#xff09;、并行数据定义语言&#xff08;DDL&#xff09;以及并行 LOAD DATA 。 《并行执行…

SQL高级语句

主知识点八&#xff1a;窗口函数 新开窗口&#xff0c;不影响原数据的排序。且子句必须有order by。窗口结果返回到 且窗口函数必须写在select后面&#xff01; ● 【排序窗口函数】 ● rank()over()——1,1,3,4 ● dense_rank()over()——1,1,2,3 ● row_number(…

初识java——javaSE(4)类与对象

文章目录 前言一 类与对象1.1 面向过程与面向对象思想的区别&#xff1a;1.2 类的定义1.3 类的实例化——对象通过创建对象&#xff0c;调用对象中的成员变量与方法 1.4 this关键字this的作用一&#xff1a;this 的作用二构造方法&#xff1a;对象创建的两步方法的重载 this的作…

干部谈话考察:精准洞悉,助推成长

在组织人事管理的精细布局中&#xff0c;干部谈话考察扮演着举足轻重的角色。它不仅是组织深度了解干部、精准评价其表现的重要窗口&#xff0c;更是推动干部个人成长、优化组织人才配置的关键一环。通过深入的谈话考察&#xff0c;我们能够全面把握干部的思想脉搏、工作能力、…

人武部三维电子沙盘系统

深圳易图讯科技有限公司(www.3dgis.top)系统采用自主可控高性能可视化三维GIS引擎&#xff0c;支持多用户客户端通过网络请求访问服务器地图和JFQ专题数据&#xff0c;提供地理信息数据、专题数据的并发访问和高效调度加载&#xff0c;依托前端设备采集的重点图像、视频等信息资…

代码随想录day19day20打卡

二叉树 1 二叉树的最大深度和最小深度 最大深度已经学习过了&#xff0c;实质就是递归的去判断左右子节点的深度&#xff0c;然后对其进行返回。 附加两个学习的部分&#xff1a; &#xff08;1&#xff09;使用前序遍历的方法求解 int result; void getdepth(TreeNode* nod…

华为OD机试 - 测试用例执行计划(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

麒麟 V10 安装docker2

1. 查看系统版本 2.安装docker-ce 添加源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安装docker yum install docker-ce --allowerasing 重启docker systemctl start docker 3.安装nvidia-container-runtime 添…

04-单片机商业项目编程,从零搭建低功耗系统设计

一、本文内容 上一节《03-单片机商业项目编程&#xff0c;从零搭建低功耗系统设计-CSDN博客》我们确定了设计思路&#xff0c;并如何更有效的保持低功耗&#xff0c;这节我们就准备来做软件框架设计。在AI飞速发展的时代&#xff0c;我们也会利AI来辅助我们完成&#xff0c;让自…

网络工程师----第二十八天

计算机基础 第五章&#xff1a;运输层 运输层的两个协议&#xff1a; 1、传输控制协议TCP&#xff1a; TCP最主要的特点&#xff1a; (1)TCP是面向连接的。应用程序在使用TCP协议之前&#xff0c;必须先建立连接。在传送数据完毕后&#xff0c;必须释放已经建立的TCP连接。…

大语言模型的RAG:综述

23年12月同济大学和复旦大学的综述论文“Retrieval-Augmented Generation for Large Language Models: A Survey”。 大语言模型&#xff08;LLM&#xff09;展示了强大的功能&#xff0c;但在实际应用中仍然面临挑战&#xff0c;如幻觉、知识更新缓慢以及答案缺乏透明度。检索…

怎么转换音频?看这3款音频转换器

随着数字媒体的发展&#xff0c;音频文件在我们的日常生活中占据了越来越重要的地位。有时候在不同的应用场景里&#xff0c;无论是音乐、语音还是其他类型的音频内容&#xff0c;我们都需要对其进行转换以满足不同的需求。 本文将为您介绍3款常用的音频转换器&#xff0c;帮助…

MHD093C-058-PG1-AA具备哪些特点?

MHD093C-058-PG1-AA是一种高性能的伺服电机控制器。 该产品具备以下特点&#xff1a; 高精度与高性能&#xff1a;MHD093C-058-PG1-AA设计用于提供精确的运动控制和定位&#xff0c;适用于需要高精度定位和控制的场合。快速响应&#xff1a;采用先进的控制技术&#xff0c;确…

Memcached

一、NoSQL介绍 NoSQL是对 Not Only SQL、非传统关系型数据库的统称。 NoSQL一词诞生于1998年&#xff0c;2009年这个词汇被再次提出指非关系型、分布式、不提供ACID的数据库设计模式。 随着互联网时代的到来&#xff0c;数据爆发式增长&#xff0c;数据库技术发展日新月异&a…

基础算法,贪心算法,贪心策略,OJ练习

文章目录 一、概念二、OJ练习2.1 区间选点2.2 区间合并2.3 区间2.4 合并果子2.5 排队接水2.6 货仓选址2.7 防晒2.8 畜栏预定2.9 雷达设备2.10 国王游戏2.11 耍杂技的牛2.12 给树染色2.13 任务2.14 能量石 三、总结 一、概念 贪心是一种在每次决策时采取当前意义下最优策略的算…

[JAVASE] 类和对象(二)

目录 一. 封装 1.1 面向对象的三大法宝 1.2 封装的基本定义与实现 二. 包 2.1 包的定义 2.2 包的作用 2.3 包的使用 2.3.1 导入类 2.3.2 导入静态方法 三. static 关键字 (重要) 3.1 static 的使用 (代码例子) 3.1.1 3.1.2 3.1.3 3.1.4 四. 总结 一. 封装 1.1 面向对象…