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

ros2创建一个工程

第一步:创建src目录

$ mkdir ros2-demo
$ cd ros2-demo/
$ mkdir src
$ cd src/

第二步:创建功能包

cd src$
ros2 pkg create --build-type ament_cmake ros2_demo --dependencies rclcpp std_msgsros2 pkg create --build-type ament_python learning_pkg_python # Python
ros2命令中:
pkg:表示功能包相关的功能;
create:表示创建功能包;
build-type:表示新创建的功能包是C++还是Python的,如果使用C++或者C,那这里就跟ament_cmake,如果使用Python,就跟ament_python
package_name:新建功能包的名字。比如在终端中分别创建C++和Python版本的功能包:

第三步:确定功能包

  1. c++/c功能包

  1. 首先看下C++类型的功能包,其中必然存在两个文件:package.xml和CMakerLists.txt。

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

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

2.python功能包

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

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

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

第四步:创建节点文件

cd ~/ros2-demo/src/ros2_demo
sudo gedit sub_node.cpp

sub_node.cpp代码具体如下:

#include <chrono>
#include "rclcpp/rclcpp.hpp"
using namespace std::chrono_literals;
/* This example creates a subclass of Node and uses a fancy C++11 lambda* function to shorten the timer syntax, at the expense of making the* code somewhat more difficult to understand at first glance if you are* unaccustomed to C++11 lambda expressions. */
class MinimalTimer : public rclcpp::Node
{
public:MinimalTimer(): Node("minimal_timer"){auto timer_callback = [this]() -> void { RCLCPP_INFO(this->get_logger(), "Hello, world!") };timer_ = create_wall_timer(500ms, timer_callback);}
private:rclcpp::TimerBase::SharedPtr timer_;
};
int main(int argc, char * argv[])
{rclcpp::init(argc, argv);rclcpp::spin(std::make_shared<MinimalTimer>());rclcpp::shutdown();return 0;
}

第五步:修改CMakeLists.txt和package.xml

  1. 修改CMakeLists.txt;

cd ~/ros2-demo/src/ros2_demo
sudo gedit CMakeLists.txt
  1. find_package(ament_cmake REQUIRED)下面添加

find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)
  1. 添加可执行文件的名字为ros2_demo

add_executable(ros2_demo src/sub_node.cpp)
ament_target_dependencies(ros2_demo rclcpp std_msgs)
  1. 添加 install(TARGETS…) 把可执行文件安装到install去

install(TARGETSros2_demoDESTINATION lib/${PROJECT_NAME})

第六步:编译和运行

  1. 编译节点

cd ~/ros2-demo
colcon build --packages-select ros2_demo
source install/setup.bash
  1. 运行节点

ros2 run ros2_demo sub_node
http://www.lryc.cn/news/27413.html

相关文章:

  • 【力扣】stack容器的探索之有效的括号
  • 【Elsevier出版社】中科院2区,SCIEEI 双检,已有发表案例,3个月左右录用
  • 基于明道云平台重建医院管理流程
  • 【蓝桥杯嵌入式】STM32定时器的配置,解析预分频系数和重装载值与时钟频率的关系
  • ChatGPT API 低价上线,开发者可以人手一个了?
  • 品牌营销策略 | 科学经营合作伙伴关系的5个要素
  • 【剑指offer-C++】JZ20:表示数值的字符串
  • 【NLP相关】深度学习领域不同编程IDE对比
  • 定制ubuntu的docker镜像
  • 我的 System Verilog 学习记录(8)
  • 详解JAVA字节码
  • 前端利用emailjs发送邮件
  • 16 Nacos服务端服务注册源码分析
  • Spring Boot2中如何优雅地个性化定制Jackson
  • 2023年全国最新食品安全管理员精选真题及答案11
  • 【脚本】用于得到某个文件/文件夹所有文件的存储大小(MB单位)
  • 19- CNN进行Fashion-MNIST分类 (tensorflow系列) (项目十九)
  • 【正点原子FPGA连载】第二十二章IP封装与接口定义实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
  • 【ElasticSearch8.X】学习笔记(二)
  • Ubuntu22.04安装、配置、美化、软件安装、配置开发环境
  • 企业电子招投标采购系统之系统的首页设计
  • Python爬虫-阿里翻译_csrf
  • C语言实现三子棋【详解+全部源码】
  • 双指针法将时间复杂度从 O(n^2) 优化到 O(n)
  • 【SpringBoot系列】 Spring中自定义Session管理,Spring Session源码解析
  • 【上位机入门常见问题】SQLServer2019 安装指导
  • RabbitMQ第一讲
  • 华为机试题:HJ100 等差数列(python)
  • 数据推荐 | 人体行为识别数据集
  • 667真题分析 | 2023年667真题简要分析和答题思路参考