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

ROS2基础

1.helloworld案例

1.创建功能包(C++)

终端下,进入ws00_helloworld/src目录,使用如下指令创建一个C ++ 功能包:

ros2 pkg create pkg01_helloworld_cpp --build-type ament_cmake --dependencies rclcpp --node-name helloworld

执行完毕,在src目录下将生成一个名为pkg01_helloworld_cpp的目录,且目录中已经默认生成了一些子级文件与文件夹。

2.编辑源文件

进入pkg01\_helloworld\_cpp/src目录,该目录下有一helloworld.cpp文件,修改文件内容如下:

#include "rclcpp/rclcpp.hpp"int main(int argc, char ** argv)
{// 初始化 ROS2rclcpp::init(argc,argv);// 创建节点auto node = rclcpp::Node::make_shared("helloworld_node");// 输出文本RCLCPP_INFO(node->get_logger(),"hello world!");// 释放资源rclcpp::shutdown();return 0;
}

3.编译执行

在终端进入ws_helloworld下,执行:

colcon build
. install/setup.bash
ros2 run pkg01_helloworld_cpp helloworld

程序执行,在终端下将输出文本:"hello world!"。

4.创建功能包(Python)

ros2 pkg create pkg02_helloworld_py --build-type ament_python --dependencies rclpy --node-name helloworld

5.编辑源文件

进入pkg02_helloworld_py/pkg02_helloworld_py目录,该目录下有一helloworld.py文件,修改文件内容如下:

import rclpydef main():# 初始化 ROS2rclpy.init()# 创建节点node = rclpy.create_node("helloworld_py_node")# 输出文本node.get_logger().info("hello world!")# 释放资源rclpy.shutdown()if __name__ == '__main__':main()

6.编译执行

终端下进入到工作空间,执行如下指令:

colcon build
. install/setup.bash
ros2 run pkg02_helloworld_py helloworld

7.运行优化

每次终端中执行工作空间下的节点时,都需要调用. install/setup.bash指令,使用不便,优化策略是,可以将该指令的调用添加进~/setup.bash,操作格式如下:

echo "source /{工作空间路径}/install/setup.bash" >> ~/.bashrc

示例:

echo "source /home/ros2/ws00_helloworld/install/setup.bash" >> ~/.bashrc

以后再启动终端时,无需手动再手动刷新环境变量。

8.定向构建

colcon build --packages-select 文件名

9.功能包

功能包是ROS2应用程序的核心,但是功能包不能直接构建,必须依赖于工作空间,一个ROS2工作空间的目录结构如下:

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源文件目录。

另外,无论是Python功能包还是C++功能包,都可以自定义一些配置文件相关的目录。

|-- C++或Python功能包|-- launch:存储launch文件。|-- rviz:存储rviz2配置相关文件。|-- urdf:存储机器人建模文件。|-- params:存储参数文件。|-- world:存储仿真环境相关文件。|-- map:存储导航所需地图文件。|-- ......

10.操作命令

ROS2的文件系统核心是功能包,我们可以通过编译指令colcon和ROS2内置的工具指令ros2来实现功能包的创建、编译、查找与执行等相关操作。

1.创建

新建功能包语法如下:

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

格式解释:

  • --build-type:是指功能包的构建类型,有cmake、ament_cmake、ament_python三种类型可选,默认ament_camke;
  • --dependencies:所依赖的功能包列表;
  • --node-name:可执行程序的名称,会自动生成对应的源文件并生成配置文件。

2.编译

编译功能包语法如下:

colcon build

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

前者会构建工作空间下的所有功能包,后者可以构建指定功能包。

3.查找

ros2 pkg命令下包含了多个查询功能包相关信息的参数。

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

4.执行

执行命令语法如下:

ros2 run 功能包 可执行程序 参数
http://www.dtcms.com/a/336685.html

相关文章:

  • C语言零基础第19讲:自定义类型—联合体和枚举
  • 解锁Java开发神器:XXL-Job从入门到精通
  • BT_LE_ADV_CONN_ONE_TIME 参数详解
  • Spring 创建 Bean 的 8 种主要方式
  • [创业之路-556]:创新的本质是赚不确定性带来的潜在价值,把不确定性逐步转化确定性,周而复始。
  • 产品设计.Ai产品经理
  • 48.Seata认识、部署TC服务、微服务集成
  • 网络中的一些基本概念
  • Conda 环境 在AI 私有化部署 有怎么用?
  • 微信小程序 小白gps工具v0.01 使用说明
  • react echarts图表监听窗口变化window.addEventListener(‘resize’)与ResizeObserver()
  • python -基础(5)组合数据类型
  • 每日两道算法题:DAY3
  • java常见的数据加密
  • 当 AI 开始 “理解” 情感:情感计算技术正在改写人机交互规则
  • Linux 服务:iSCSI 存储服务配置全流程指南
  • 廖雪峰-Java教程-Part02
  • C#高级语法_委托
  • 力扣第463场周赛
  • 17-线程
  • uC/OS - III 系统DEBUG时内核对象统计信息
  • 模拟实现 useEffect 功能
  • 配置 NVIDIA RTX 5090 + sm_120 + flashattention,已跑通一个大模型 ~~
  • clion 如何调试 redis(在 mac 上)
  • AMBA-AXI and ACE协议详解(三)
  • 期望分位数回归模型
  • 利用pypy加速pyxlsbwriter生成xlsb文件
  • 五、redis入门 之 客户端连接redis
  • 日语学习-日语知识点小记-进阶-JLPT-N1阶段蓝宝书,共120语法(3):21-30语法
  • 雷卯针对香橙派Orange Pi Kunpeng Pro开发板防雷防静电方案