当前位置: 首页 > 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代替。

http://www.lryc.cn/news/25987.html

相关文章:

  • 数据结构: 最小栈
  • STM32之PWM
  • 操作系统(1.1)--引论
  • Spring boot + mybatis-plus 遇到 数据库字段 创建不规范 大驼峰 下划线 导致前端传参数 后端收不到参数 解决方案
  • JavaScript String 字符串对象
  • Lazada如何做好店铺运营?产品定价是关键
  • 空口协议Eapol、802.11 Action、802.11 BAR 和 802.11BA、802.11 Encrypted Data讲解
  • C++类和对象
  • Leetcode.面试题 05.02 二进制数转字符串
  • UDPTCP网络编程
  • 【微信小程序】-- 全局配置 -- tabBar(十七)
  • Cortex-A7中断控制器GIC
  • JavaSE:常用类
  • Element中树形控件在项目中的实际应用
  • kaggle RSNA 比赛过程总结
  • 51单片机入门————LED灯的控制
  • J - 二进制与、平方和(线段树 + 维护区间1的个数)
  • BertTokenizer的使用方法(超详细)
  • 深度学习编译器CINN(3):编译过程中遇到的问题总结
  • yum 安装mysql8数据全过程
  • 内网vCenter部署教程一
  • java 进阶—线程的常用方法
  • hadoop的运行模式
  • 服务器(centos7.6)已经安装了宝塔面板,想在里面安装一个SVN工具(subversion),应该如何操作呢?
  • 从智能进化模型看用友BIP的AI平台化能力
  • 项目管理的主要内容包括哪些?盘点好用的项目管理系统软件
  • Allegro如何查看PCB上器件的库路径操作指导
  • 笔记【尚硅谷】大数据Canal教程丨Alibaba数据实时同步神器
  • 如何重定向命令行日志信息到指定txt文件?
  • 物理机不能访问虚拟机kali的web服务解决方案记录