当前位置: 首页 > news >正文

【ROS2知识】关于colcon编译和ament指定

一、说明

        这里说说编译和包生成的操作要点,以python包为例。对于初学者来说,colcon和ament需要概念上搞清楚,与此同时,工作空间、包、节点在一个工程中需要熟练掌握。本文以humble版的ROS2,进行python编程的实现。

二、编译器安装配置

2.1 关于编译器的安装

        colcon是ros2的编译器,如果我们想看到colcon编译器,需要到指定位置:

    ls  /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash

        如果没有安装,需要如下语句安装之:

    sudo apt updatesudo apt install python3-colcon-common-extensions

        一般来说,在安装humble版ros2,已经安装好colcon,以上步骤可以忽略。

2.2 关于编译器的配置

        在~/.bashrc中配置编译器:

    vim ~/.bashrc

        将以下语句追加到~/.bashrc的最后语句。

    source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash

三、建立工程

3.1 建立工程的工作空间

cd ~/tmp
mkdir  -p ros2_ws/src

3.2 编译一个空的workspace

         编译一个空的工程:

cd ros2_ws
colcon build

        设置系统路径、编译器路径、本工程的路径,路径:sudo gedit ~/.bashrc,追加如下:

    source /opt/ros/humble/setup.bashsource /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bashsource ~/tmp/ros2_ws/install/setup.bash

四、建立一个软件包

4.1 生成一个包

        注意包生成的路径:

    cd   ros2_ws/src

        生成一个包:

    ros2 pkg create my_robot_controller --build-type ament_python --dependencies rclpy

        通过以上create语句,生成一个名字叫my_robot_controller的包。

4.2 包的在工程中的位置

        工作空间中,不外乎两个指令:编译指令、包生成指令,它们执行的地点应该明确了。如下图:

这里参看整个workspace的路径:

cd ros2_ws
tree
├── build
│   ├── COLCON_IGNORE
│   └── my_robot_controller
│       ├── build
│       │   └── lib
│       │       └── my_robot_controller
│       │           └── __init__.py
│       ├── colcon_build.rc
│       ├── colcon_command_prefix_setup_py.sh
│       ├── colcon_command_prefix_setup_py.sh.env
│       ├── install.log
│       ├── my_robot_controller.egg-info
│       │   ├── dependency_links.txt
│       │   ├── entry_points.txt
│       │   ├── PKG-INFO
│       │   ├── requires.txt
│       │   ├── SOURCES.txt
│       │   ├── top_level.txt
│       │   └── zip-safe
│       └── prefix_override
│           ├── __pycache__
│           │   └── sitecustomize.cpython-310.pyc
│           └── sitecustomize.py
├── install
│   ├── COLCON_IGNORE
│   ├── local_setup.bash
│   ├── local_setup.ps1
│   ├── local_setup.sh
│   ├── _local_setup_util_ps1.py
│   ├── _local_setup_util_sh.py
│   ├── local_setup.zsh
│   ├── my_robot_controller
│   │   ├── lib
│   │   │   └── python3.10
│   │   │       └── site-packages
│   │   │           ├── my_robot_controller
│   │   │           │   ├── __init__.py
│   │   │           │   └── __pycache__
│   │   │           │       └── __init__.cpython-310.pyc
│   │   │           └── my_robot_controller-0.0.0-py3.10.egg-info
│   │   │               ├── dependency_links.txt
│   │   │               ├── entry_points.txt
│   │   │               ├── PKG-INFO
│   │   │               ├── requires.txt
│   │   │               ├── SOURCES.txt
│   │   │               ├── top_level.txt
│   │   │               └── zip-safe
│   │   └── share
│   │       ├── ament_index
│   │       │   └── resource_index
│   │       │       └── packages
│   │       │           └── my_robot_controller
│   │       ├── colcon-core
│   │       │   └── packages
│   │       │       └── my_robot_controller
│   │       └── my_robot_controller
│   │           ├── hook
│   │           │   ├── ament_prefix_path.dsv
│   │           │   ├── ament_prefix_path.ps1
│   │           │   ├── ament_prefix_path.sh
│   │           │   ├── pythonpath.dsv
│   │           │   ├── pythonpath.ps1
│   │           │   └── pythonpath.sh
│   │           ├── package.bash
│   │           ├── package.dsv
│   │           ├── package.ps1
│   │           ├── package.sh
│   │           ├── package.xml
│   │           └── package.zsh
│   ├── setup.bash
│   ├── setup.ps1
│   ├── setup.sh
│   └── setup.zsh
├── log
│   ├── build_2023-03-02_10-42-14
│   │   ├── events.log
│   │   └── logger_all.log
│   ├── build_2023-03-02_10-50-32
│   │   ├── events.log
│   │   ├── logger_all.log
│   │   └── my_robot_controller
│   │       ├── command.log
│   │       ├── stderr.log
│   │       ├── stdout.log
│   │       ├── stdout_stderr.log
│   │       └── streams.log
│   ├── build_2023-03-02_10-57-14
│   │   ├── events.log
│   │   ├── logger_all.log
│   │   └── my_robot_controller
│   │       ├── command.log
│   │       ├── stderr.log
│   │       ├── stdout.log
│   │       ├── stdout_stderr.log
│   │       └── streams.log
│   ├── COLCON_IGNORE
│   ├── latest -> latest_build
│   └── latest_build -> build_2023-03-02_10-57-14
└── src└── my_robot_controller├── my_robot_controller│   ├── __init__.py│   └── my_first_node.py├── package.xml├── resource│   └── my_robot_controller├── setup.cfg├── setup.py└── test├── test_copyright.py├── test_flake8.py└── test_pep257.py

4.3 包生成后重新编译

        在包生成后,进行一次空的编译:

cd ros2_ws
colcon build

         如果出现下述信息,恭喜您有中着了:

        这里错误原因是:setuptooks版本太高引起,查看版本:

        pip3 list      (如果没有pip3用sudo apt install python3-pip安装。)

        pip3 list |grep setuptools

        用 pip install setuptools==58.2.0 语句可以降低版本,然后执行无误。

五、生成python节点

5.1 节点程序位置

        在以上的工作空间,找到包路径:

    cd  ./ros2_ws/src/my_robot_controller/my_robot_controller

5.2 编写节点

文件名称:

    sudo vim first_node.py

         将上述文件保存后,执行colcon编译。(注意:colcon总是在workspace路径上执行)

         在setup.py配置如下:

         再次强调,需要source文件.bashrc

    source /opt/ros/humble/setup.bashsource /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bashsource ~/tmp/ros2_ws/install/setup.bash

        再次编译,编译过后:执行

        ros2 run  my_robot_controller  test_node

可以启动。注意这里test_node也可以用first_node.py代替。

相关文章:

【ROS2知识】关于colcon编译和ament指定

一、说明 这里说说编译和包生成的操作要点,以python包为例。对于初学者来说,colcon和ament需要概念上搞清楚,与此同时,工作空间、包、节点在一个工程中需要熟练掌握。本文以humble版的ROS2,进行python编程的实现。 二、…...

数据结构: 最小栈

最小栈的特色是保持栈后进先出的特性,同时能够以O(1)复杂度获得当前栈的最小值。 栈是比较好实现的,直接搞个链表,从头部删除和添加即可。 最小栈的核心逻辑是: 因为栈是后进先出的,因此栈顶元素之下的数字永远在栈…...

STM32之PWM

PWMPWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调…...

操作系统(1.1)--引论

目录 一、操作系统的目标和作用 1.操作系统的目标 2.操作系统的作用 2.1 OS作为用户与计算机硬件系统之间的接口 2.2 OS作为计算机系统资源的管理者 2.3 0S实现了对计算机资源的抽象 3. 推动操作系统发展的主要动力 二、操作系统的发展过程 1.无操作系统的计算机系统…...

Spring boot + mybatis-plus 遇到 数据库字段 创建不规范 大驼峰 下划线 导致前端传参数 后端收不到参数 解决方案

最近使用springboot 连接了一个 sqlserver 数据库 由于数据库年数久远 ,建表字段不规范 大驼峰 下划线的字段名都有 但是 java 中 Spring boot mybatis-plus 又严格按照小驼峰 格式 生成实体类 如果不是小驼峰格式 Data 注解 get set 方法 在前端请求参数 使用这个…...

JavaScript String 字符串对象

文章目录JavaScript String 字符串对象JavaScript 字符串字符串(String)在字符串中查找字符串内容匹配替换内容字符串大小写转换字符串转为数组特殊字符字符串属性和方法JavaScript String 字符串对象 String 对象用于处理已有的字符块。 JavaScript 字…...

Lazada如何做好店铺运营?产品定价是关键

1.东南亚各国状况一览(对比中国) 2.东南亚消费水平真的很低? 精准定价的意义:定价过高,失去核心竞争力;定价过低,亏本对市场失去信心;价格改动,流量下降 定价公式&#…...

空口协议Eapol、802.11 Action、802.11 BAR 和 802.11BA、802.11 Encrypted Data讲解

如下报文 可以看到,除了有之前开放认证的报文之外,还多了 EAPOL 次握手的报文。另外,还有其他几种类型的报文:802.11 Action、802.11 BAR 和 802.11BA、802.11 Encrypted Data ​ 密匙认证协议EAPOL: EAP是Extensible Authentication Protocol的缩写,EAPOL就是(EAP…...

C++类和对象

目录 一、C类定义 二、定义C对象 三、访问数据成员 四、类和对象详解 C 在 C 语言的基础上增加了面向对象编程,C 支持面向对象程序设计。类是 C 的核心特性,通常被称为用户定义的类型。 类用于指定对象的形式,它包含了数据表示法和用于处…...

Leetcode.面试题 05.02 二进制数转字符串

题目链接 面试题 05.02 二进制数转字符串 Mid 题目描述 二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”。…...

UDPTCP网络编程

udp编程接口 一个UDP程序的编写可以分为3步: 创建一个网络套接字: 它相当于文件操作时的文件描述符,是一个程序进行网络通讯的门户, 所有的网络操作都要基于它 绑定IP和端口: 需要为网络套接字填充IP和端口信息 但是…...

【微信小程序】-- 全局配置 -- tabBar(十七)

💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...

Cortex-A7中断控制器GIC

Cortex-A7中断控制器GIC 中断号 芯片内部的中断都会引起IRQ InterruptGIC将所有的中断源(最多1020个中断ID)分为三类: SPI(SharedPeripheralInterrupt)共享中断,外部中断都属于SPI中断 [ID32-1019]PPI(PrivatePeripheralInterrupt)私有中断 [ID16-31]SGI(Software-…...

JavaSE:常用类

前言从现在开始进入高级部分的学习,鼓励自己一下!画个大饼: 常用类->集合框架->IO流->多线程->网络编程 ->注解与反射->GUI很重要的东西,不能不会!Object类祖宗类,主要方法:t…...

Element中树形控件在项目中的实际应用

文章目录1、使用目的2、官网组件3、组合使用组件案例4、在项目中实际应用4.1 组合组件的使用4.1.2 代码落地4.1.3 后台接口数据4.1.4 实际效果官网连接直达&#xff1a;Tree树形控件的使用 1、使用目的 用清晰的层级结构展示信息&#xff0c;可展开或折叠。 2、官网组件 <…...

kaggle RSNA 比赛过程总结

引言 算算时间&#xff0c;有差不多两年多没在打kaggle了&#xff0c;自20年最后一场后&#xff08;其实之前也就打过两场&#xff0c;一场打铁&#xff0c;一场表格赛是金是银不太记得&#xff0c;当时相当于刺激战场&#xff0c;过拟合lb大赛太刺激了&#xff0c;各种trick只…...

51单片机入门————LED灯的控制

LED的电路图通过原理图看出&#xff0c;LED灯是接单片机芯片的P20~P27的一共有8个LED&#xff0c;51单片机也是8字节的P20x010xFE————1111 1110P20xFE可以表示把在P2端的第一个灯点亮1 表示高电平0表示低电平当为0的时候形成一个完整回路&#xff0c;电流从高电平流向低电平…...

J - 二进制与、平方和(线段树 + 维护区间1的个数)

2023河南省赛组队训练赛&#xff08;二&#xff09; - Virtual Judge (vjudge.net) 请你维护一个长度为 n 的非负整数序列 a1, a2, ..., an&#xff0c;支持以下两种操作&#xff1a; 第一种操作会将序列 al, al  1, ..., ar 中的每个元素&#xff0c;修改为各自和 x…...

BertTokenizer的使用方法(超详细)

导入 from transformers import BertTokenizer from pytorch_pretrained import BertTokenizer以上两行代码都可以导入BerBertTokenizer,transformers是当下比较成熟的库&#xff0c;pytorch_pretrained是google提供的源码(功能不如transformers全面) 加载 tokenizer BertT…...

深度学习编译器CINN(3):编译过程中遇到的问题总结

目录 问题一:No module named XXXX 问题描述 分析与解决方案 问题二:catastrophic error: cannot open source file "float16.h"...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

三体问题详解

从物理学角度&#xff0c;三体问题之所以不稳定&#xff0c;是因为三个天体在万有引力作用下相互作用&#xff0c;形成一个非线性耦合系统。我们可以从牛顿经典力学出发&#xff0c;列出具体的运动方程&#xff0c;并说明为何这个系统本质上是混沌的&#xff0c;无法得到一般解…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库&#xff0c;基于 mysql 库改进而来&#xff0c;具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点&#xff1a; 支持 Promise / async-await&#xf…...

Python学习(8) ----- Python的类与对象

Python 中的类&#xff08;Class&#xff09;与对象&#xff08;Object&#xff09;是面向对象编程&#xff08;OOP&#xff09;的核心。我们可以通过“类是模板&#xff0c;对象是实例”来理解它们的关系。 &#x1f9f1; 一句话理解&#xff1a; 类就像“图纸”&#xff0c;对…...

数据分析六部曲?

引言 上一章我们说到了数据分析六部曲&#xff0c;何谓六部曲呢&#xff1f; 其实啊&#xff0c;数据分析没那么难&#xff0c;只要掌握了下面这六个步骤&#xff0c;也就是数据分析六部曲&#xff0c;就算你是个啥都不懂的小白&#xff0c;也能慢慢上手做数据分析啦。 第一…...