ros2笔记

2024-06-07 05:20
文章标签 笔记 ros2

本文主要是介绍ros2笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Ros2

  • hello world c++
    • create package
    • helloworld.cpp
  • hello world python
    • helloworld.py
  • file explain
  • ros2 cmd
    • create
    • build
    • find
    • run
    • install
  • interfaces
    • msg file
    • srv file
    • action file
  • Topic

hello world c++

mkdir -p {your workspace name}/src
cd {your workspace name} #进入工作空间
colcon build #编译

create package

in {your workspace name}/src

ros2 pkg create {your package name} --build-type ament-cmake --dependencies rclcpp	 --node-name helloworld

在这里插入图片描述

helloworld.cpp

#include "rclcpp/rclcpp.hpp"int main(int argc,char ** argv)
{rclcpp::init(argc,argv);auto node = rclcpp::Node::make_shared("helloworld_node");RCLCPP_INFO(node->get_logger(),"hello world!");rclcpp::shutdown();return 0; 
}

if you want to add some dependencies you can like this
在这里插入图片描述
this is CMakeLists 's explain

# 引入外部依赖包
find_package(rclcpp REQUIRED)
# 映射源文件与可执行文件
add_executable(helloworld src/helloworld.cpp)# 设置目标依赖库
ament_target_dependencies(helloworld"rclcpp"
)
# 定义安装规则
install(TARGETS helloworldDESTINATION lib/${PROJECT_NAME})

build
in your workspace

colcon build

if you meet this situation
在这里插入图片描述you must use pip install catkin_pkg

pip swapping source

pip config set global.index-url --site https://pypi.tuna.tsinghua.edu.cn/simple

run
you must in your workspace

source ./install/setup.bash 
ros2 run {your package name} {your node name} 

在这里插入图片描述

hello world python

in {your workspace name}/src

ros2 pkg create {your package name} --build-type ament_python --dependencies rclpy --node-name {your node name}

在这里插入图片描述

helloworld.py

import rclpydef main():rclpy.init();node = rclpy.create_node("hello")node.get_logger().info("hello python")rclpy.shutdown()if __name__ == '__main___':main()

setup.py
在这里插入图片描述
run

colcon build
. install/setup.bash 
ros2 run {your paceage name} {your node name} 

operational optimization

echo "source /{your work space path}/install/setup.bash" >> ~/.bashrc

file explain

WorkSpace --- 自定义的工作空间。|--- build:存储中间文件的目录,该目录下会为每一个功能包创建一个单独子目录。|--- install:安装目录,该目录下会为每一个功能包创建一个单独子目录。|--- log:日志目录,用于存储日志文件。|--- src:用于存储功能包源码的目录。|-- C++功能包|-- package.xml:包信息,比如:包名、版本、作者、依赖项。|-- CMakeLists.txt:配置编译规则,比如源文件、依赖项、目标文件。|-- src:C++源文件目录。|-- include:头文件目录。|-- msg:消息接口文件目录。|-- srv:服务接口文件目录。|-- action:动作接口文件目录。|-- Python功能包|-- package.xml:包信息,比如:包名、版本、作者、依赖项。|-- setup.py:与C++功能包的CMakeLists.txt类似。|-- setup.cfg:功能包基本配置文件。|-- resource:资源目录。|-- test:存储测试相关文件。|-- 功能包同名目录:Python源文件目录。|-- C++或Python功能包|-- launch:存储launch文件。|-- rviz:存储rviz2配置相关文件。|-- urdf:存储机器人建模文件。|-- params:存储参数文件。|-- world:存储仿真环境相关文件。|-- map:存储导航所需地图文件。|-- ......

c++ template

#include "rclcpp/rclcpp.hpp"class MyNode: public rclcpp::Node{
public:MyNode():Node("node_name"){RCLCPP_INFO(this->get_logger(),"hello world!");}};int main(int argc, char *argv[])
{rclcpp::init(argc,argv);auto node = std::make_shared<MyNode>();rclcpp::shutdown();return 0;
}

python template

import rclpy
from rclpy.node import Nodeclass MyNode(Node):def __init__(self):super().__init__("node_name_py")self.get_logger().info("hello world!")
def main():rclpy.init()node = MyNode() rclpy.shutdown()

package.xml

1.根标签
<package>:该标签为整个xml文件的根标签,format属性用来声明文件的格式版本。

2.元信息标签
<name>:包名;

<version>:包的版本号;

<description>:包的描述信息;

<maintainer>:维护者信息;

<license>:软件协议;

<url>:包的介绍网址;

<author>:包的作者信息。

3.依赖项
<buildtool_depend>:声明编译工具依赖;

<build_depend>:声明编译依赖;

<build_export_depend>:声明根据此包构建库所需依赖;

<exec_depend>:声明执行时依赖;

<depend>:相当于<build_depend>、<build_export_depend>、<exec_depend>三者的集成;

<test_depend>:声明测试依赖;

<doc_depend>:声明构建文档依赖。

CMakeLists.txt

# 引入外部依赖包
find_package(rclcpp REQUIRED)# 映射源文件与可执行文件
add_executable(helloworld src/helloworld.cpp)
# 设置目标依赖库
ament_target_dependencies(helloworld"rclcpp"
)
# 定义安装规则
install(TARGETS helloworldDESTINATION lib/${PROJECT_NAME})

setup.py

from setuptools import setuppackage_name = 'pkg02_helloworld_py'setup(name=package_name, # 包名version='0.0.0',   # 版本packages=[package_name], # 功能包列表data_files=[ #需要被安装的文件以及安装路径('share/ament_index/resource_index/packages',['resource/' + package_name]),('share/' + package_name, ['package.xml']),],install_requires=['setuptools'], # 安装依赖zip_safe=True,maintainer='ros2', # 维护者maintainer_email='ros2@todo.todo', # 维护者 emaildescription='TODO: Package description', # 包描述license='TODO: License declaration', # 软件协议tests_require=['pytest'], # 测试依赖entry_points={'console_scripts': [# 映射源文件与可执行文件'helloworld = pkg02_helloworld_py.helloworld:main'],},
)

ros2 cmd

create

ros2 pkg create 包名 --build-type 构建类型 --dependencies 依赖列表 --node-name 可执行程序名称

格式解释:
–build-type:是指功能包的构建类型,有cmake、ament_cmake、ament_python三种类型可选;

–dependencies:所依赖的功能包列表;

–node-name:可执行程序的名称,会自动生成对应的源文件并生成配置文件。

build

build all

colcon build

build select

colcon build --packages-select 功能包列表

find

ros2 pkg executables [包名] # 输出所有功能包或指定功能包下的可执行程序。
ros2 pkg list # 列出所有功能包
ros2 pkg prefix 包名 # 列出功能包路径
ros2 pkg xml # 输出功能包的package.xml内容

run

ros2 run 功能包 可执行程序 参数

install

sudo apt install ros-ROS2版本代号-功能包名称

interfaces

msg file

int64 num1
int64 num2

srv file

int64 num1
int64 num2
---
int64 sum

upper part is used to declare request and the lower part is response

action file

int64 num
---
int64 sum
---
float64 progress

request response and feedback

Topic

ros2 pkg create cpp01_topic --build-type ament_cmake --dependencies rclcpp std_msgs base_interfaces_demo
ros2 pkg create py01_topic --build-type ament_python --dependencies rclpy std_msgs base_interfaces_demo

这篇关于ros2笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1038274

相关文章

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue:

操作系统实训复习笔记(1)

目录 Linux vi/vim编辑器(简单) (1)vi/vim基本用法。 (2)vi/vim基础操作。 进程基础操作(简单) (1)fork()函数。 写文件系统函数(中等) ​编辑 (1)C语言读取文件。 (2)C语言写入文件。 1、write()函数。  读文件系统函数(简单) (1)read()函数。 作者本人的操作系统实训复习笔记 Linux

LVGL快速入门笔记

目录 一、基础知识 1. 基础对象(lv_obj) 2. 基础对象的大小(size) 3. 基础对象的位置(position) 3.1 直接设置方式 3.2 参照父对象对齐 3.3 获取位置 4. 基础对象的盒子模型(border-box) 5. 基础对象的样式(styles) 5.1 样式的状态和部分 5.1.1 对象可以处于以下状态States的组合: 5.1.2 对象

DDS信号的发生器(验证篇)——FPGA学习笔记8

前言:第一部分详细讲解DDS核心框图,还请读者深入阅读第一部分,以便理解DDS核心思想 三刷小梅哥视频总结! 小梅哥https://www.corecourse.com/lander 一、DDS简介         DDS(Direct Digital Synthesizer)即数字合成器,是一种新型的频率合成技术,具有低成本、低功耗、高分辨率、频率转换时间短、相位连续性好等优点,对数字信

数据库原理与安全复习笔记(未完待续)

1 概念 产生与发展:人工管理阶段 → \to → 文件系统阶段 → \to → 数据库系统阶段。 数据库系统特点:数据的管理者(DBMS);数据结构化;数据共享性高,冗余度低,易于扩充;数据独立性高。DBMS 对数据的控制功能:数据的安全性保护;数据的完整性检查;并发控制;数据库恢复。 数据库技术研究领域:数据库管理系统软件的研发;数据库设计;数据库理论。数据模型要素 数据结构:描述数据库

【软考】信息系统项目管理师(高项)备考笔记——信息系统项目管理基础

信息系统项目管理基础 日常笔记 项目的特点:临时性(一次性)、独特的产品、服务或成果、逐步完善、资源约束、目的性。 临时性是指每一个项目都有确定的开始和结束日期独特性,创造独特的可交付成果,如产品、服务或成果逐步完善意味着分步、连续的积累。例如,在项目早期,项目范围的说明是粗略的,随着项目团队对目标和可交付成果的理解更完整和深入时,项目的范围也就更具体和详细。 战略管理包括以下三个过程

【软考】信息系统项目管理师(高项)备考笔记——信息化与信息系统

信息化与信息系统 最近在备考信息系统项目管理师软考证书,特记录笔记留念,也希望可以帮到有需求的人。 因为这是从notion里导出来的,格式上可能有点问题,懒的逐条修改了,还望见谅! 日常笔记 核心知识 信息的质量属性:1.精确性 2.完整性 3.可靠性 4.及时性 5.经济性 6.可验证下 7.安全性 信息的传输技术(通常指通信、网络)是信息技术的核心。另外,噪声影响的是信道

flex布局学习笔记(flex布局教程)

前端笔试⾯试经常会问到:不定宽⾼如何⽔平垂直居中。最简单的实现⽅法就是flex布局,⽗元素加上如下代码即 可: display: flex; justify-content: center; align-items :center; 。下⾯详细介绍下flex布局吧。   2009年,W3C提出了 Flex布局,可以简便⼂完整⼂响应式地实现各种页⾯布局。⽬前已得到了所有浏览器的⽀持,这意味着,现