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

相关文章

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个