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

上位机知识篇---ROS2命令行命令静态链接库动态链接库


文章目录

  • 前言
  • 第一部分:ROS2命令行命令
    • 1. 基础命令
      • (1)ros2 run
      • (2)ros2 launch
      • (3)ros2 node
      • (4)ros2 topic
      • (5)ros2 service
      • (6)ros2 param
    • 2. 节点发现和通信
    • 3. 消息和服务操作
    • 4. 参数服务器操作
    • 5. 包管理
    • 6. 其他命令
    • 额外小知识
  • 第二部分:.so动态链接库
    • 1. 作用和目的
      • (1)代码重用
      • (2)动态加载
      • (3)节省资源
      • (4)易于更新
    • 2. 与其他库文件的区别
      • (1).a静态库文件
      • (2).dll动态链接库
    • 3. 创建和使用
      • (1)创建
      • (2)使用
    • 4. 依赖管理
      • (1)Idd命令
      • (2)Idconfig命令
    • 5. 版本控制
    • 6. 安全性和稳定性
      • (1)安全
      • (2)稳定性
    • 7. 常见问题
      • (1)缺少依赖
      • (2)兼容性问题
  • 第三部分:.a静态链接库
    • 1. 作用和目的
      • (1)代码重用
      • (2)静态链接
      • (3)简化分发
      • 2. 与动态库(.so 文件)的区别
    • 3. 创建和使用
      • (1)创建
      • (2)使用
    • 4. 文件结构
    • 5. 版本控制
    • 6. 安全性和稳定性
      • (1)安全
      • (2)稳定性
    • 7. 常见问题
      • (1)可执行文件大小
      • (2)更新困难
    • 8. 使用场景
  • 总结


前言

以上就是今天要讲的内容,本文简单介绍了ROS2的命令行命令。


第一部分:ROS2命令行命令

在ROS2中,命令行操作是管理和使用ROS2系统的主要方式之一。以下是一些常用的ROS2命令行操作:

1. 基础命令

(1)ros2 run

ros2 run: 运行一个ROS2节点。

ros2 run <package_name> <executable_name>

(2)ros2 launch

ros2 launch: 运行一个ROS2 launch文件

ros2 launch <package_name> <launch_file.py>

(3)ros2 node

ros2 node: 管理节点,如列出当前运行的节点。

ros2 node list
ros2 node info <node_name>

(4)ros2 topic

ros2 topic: 管理话题,如发布消息、订阅话题或列出当前的话题。

ros2 topic list
ros2 topic echo <topic_name>
ros2 topic pub <topic_name> <msg_type> '<args>'

(5)ros2 service

ros2 service: 管理服务,如调用服务或列出当前的服务。

ros2 service list
ros2 service call <service_name> <service_type> '<request>'

(6)ros2 param

ros2 param: 管理参数,如设置、获取或列出参数。

ros2 param list
ros2 param get <node_name> <parameter_name>
ros2 param set <node_name> <parameter_name> <value>

2. 节点发现和通信

ros2 node list: 列出当前运行的节点。
ros2 topic list: 列出当前活动的话题。
ros2 service list: 列出当前可用的服务。
ros2 action list: 列出当前可用的动作。

3. 消息和服务操作

ros2 topic echo <topic_name>: 打印话题上的消息。
ros2 topic pub <topic_name> <msg_type> '<args>': 发布一个话题消息。
ros2 service call <service_name> <service_type> '<request>': 调用一个服务。
ros2 action send_goal <action_name> <action_type> '<goal>': 发送一个动作目标。

4. 参数服务器操作

ros2 param list: 列出当前参数。
ros2 param get <node_name> <parameter_name>: 获取参数值。
ros2 param set <node_name> <parameter_name> <value>: 设置参数值。

5. 包管理

ros2 pkg list: 列出所有安装的包。
ros2 pkg executables <package_name>: 列出包中的可执行文件。
ros2 pkg dependencies <package_name>: 列出包的依赖。

6. 其他命令

ros2 interface show <interface_name>: 显示接口定义。
ros2 bag record -a: 记录所有话题到一个bag文件。
ros2 bag play <bag_file>: 播放一个bag文件。

这些命令是ROS2中最常用的操作,它们可以帮助用户在命令行界面中执行各种任务,从运行节点和启动launch文件到查看和修改参数,以及管理包和接口。要获取更详细的帮助,可以在每个命令后添加–help选项。

额外小知识

使用命令行命令时,注意使用tab键进行补全同时减少命令错误的概率

第二部分:.so动态链接库

.so 文件是 “shared object” 文件的缩写,在类Unix系统中(如 Linux、BSD、Solaris 等),它是动态链接库的一种形式。这些文件包含了可以在程序运行时被多个程序共享的代码和数据。以下是关于 .so 文件的详细介绍:

1. 作用和目的

(1)代码重用

代码重用:允许在不同的程序之间共享通用的代码,减少冗余,提高开发效率。

(2)动态加载

动态加载:程序可以在运行时加载和卸载 .so 文件,提供了更大的灵活性。

(3)节省资源

节省资源:多个程序可以共享同一个 .so 文件,减少了内存和磁盘空间的使用。

(4)易于更新

易于更新:更新 .so 文件后,所有使用该库的程序都可以在不重新编译的情况下获得更新。

2. 与其他库文件的区别

(1).a静态库文件

.a 文件:这是静态库文件,它们在编译时被链接到程序中,导致最终的可执行文件大小增加。

(2).dll动态链接库

.dll 文件:这是 Windows 系统中的动态链接库文件,与 .so 文件类似,但在文件格式和加载机制上有所不同。

3. 创建和使用

(1)创建

创建:使用编译器(如 gcc 或 clang)和相应的标志(如 -shared)来编译源代码,生成 .so 文件

(2)使用

使用:程序在编译时需要指定 .so 文件的路径,通常是通过 -L(库路径)和 -l(库名称,去掉前缀 lib 和后缀 .so)标志。

4. 依赖管理

(1)Idd命令

ldd 命令:可以用来查看一个可执行文件或另一个 .so 文件依赖的共享库。

(2)Idconfig命令

ldconfig 命令:用于配置动态链接器的运行时链接路径,通常在安装新的 .so 文件后运行。

5. 版本控制

.so 文件通常包含版本号,格式为 lib.so...,例如 libexample.so.1.0.0。
符号版本:.so 文件内部可以定义符号版本,允许库的内部接口在不同版本之间发生变化,同时保持向后兼容。

6. 安全性和稳定性

(1)安全

安全:由于 .so 文件可以在运行时被加载,因此需要严格控制对它们的访问权限,以防止恶意代码的注入。

(2)稳定性

稳定性:.so 文件的变化可能会影响到所有依赖它的程序,因此更新时需要谨慎。

7. 常见问题

(1)缺少依赖

缺失依赖:如果程序运行时找不到所需的 .so 文件,会报错,通常显示为 “error while loading shared libraries”。

(2)兼容性问题

兼容性问题:不同版本的 .so 文件可能不兼容,这可能导致程序崩溃或行为异常。
.so 文件是Linux和其他类Unix操作系统中软件开发的重要组成部分,理解它们的工作原理对于系统管理员和软件开发者来说都是非常重要的。

第三部分:.a静态链接库

.a 文件是 “archive” 文件的缩写,它代表了一种在类Unix系统中使用的静态库格式。**静态库包含了编译后的代码和数据,它们可以在程序编译时被链接进最终的可执行文件中。**以下是关于 .a 文件的详细介绍:

1. 作用和目的

(1)代码重用

代码重用:允许开发者将常用的代码打包成库,以便在不同的项目中重复使用。

(2)静态链接

静态链接:在编译时,静态库的代码被直接包含在可执行文件中,这意味着运行时不需要额外的库文件。

(3)简化分发

简化分发:由于静态库的代码直接包含在可执行文件中,因此分发程序时不需要附带库文件。

2. 与动态库(.so 文件)的区别

  1. 动态库(.so 文件)是在程序运行时被加载的,而静态库(.a 文件)是在程序编译时被链接的
  2. 使用动态库可以减少可执行文件的大小,并允许库的更新不需要重新编译程序。而静态库会增加可执行文件的大小,并且每次库更新都需要重新编译程序。

3. 创建和使用

(1)创建

创建:使用 **ar(archive)**工具来创建 .a 文件,**通常是从编译后的目标文件(.o 文件)开始。

ar rcs libexample.a file1.o file2.o

(2)使用

使用:在编译程序时,通过 -l 和 -L 标志来指定链接的静态库。

gcc -o myprogram myprogram.c -L/path/to/library -lexample

4. 文件结构

.a 文件是一系列归档成员的集合,每个成员可以是目标文件、源文件或其他类型的文件
ar 工具可以用来列出 .a 文件的内容,添加或删除成员。

5. 版本控制

静态库通常没有内置的版本控制机制,但是可以通过文件名或目录结构来管理不同版本的库

6. 安全性和稳定性

(1)安全

安全:由于静态库的代码被包含在可执行文件中,因此它不依赖于外部文件,这在一定程度上减少了安全风险。

(2)稳定性

稳定性:使用静态库的程序在运行时不会受到库版本更新的影响,这可以提高程序的稳定性。

7. 常见问题

(1)可执行文件大小

可执行文件大小:静态库会增加最终可执行文件的大小,这可能导致分发和存储上的不便。

(2)更新困难

更新困难:如果静态库更新,所有使用该库的程序都需要重新编译和链接。

8. 使用场景

当你需要确保程序在运行时不会受到库版本变化的影响时。
当你希望简化程序的安装和分发过程时。
当你担心动态库可能带来的安全问题时。
总的来说,.a 文件是类Unix系统中静态链接库的一种常见格式,它们在软件开发中扮演着重要的角色,尤其是在需要高度控制和稳定性的场景中。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了ROS2的命令行命令。

相关文章:

上位机知识篇---ROS2命令行命令静态链接库动态链接库

文章目录 前言第一部分&#xff1a;ROS2命令行命令1. 基础命令&#xff08;1&#xff09;ros2 run&#xff08;2&#xff09;ros2 launch&#xff08;3&#xff09;ros2 node&#xff08;4&#xff09;ros2 topic&#xff08;5&#xff09;ros2 service&#xff08;6&#xff0…...

2025/1/21 学习Vue的第四天

睡觉。 --------------------------------------------------------------------------------------------------------------------------------- 11.Object.defineProperty 1.在我们之前学习JS的时候&#xff0c;普通得定义一个对象与属性。 <!DOCTYPE html> <h…...

云计算、AI与国产化浪潮下DBA职业之路风云变幻,如何谋破局启新途?

引言 在近日举办的一场「云和恩墨大讲堂」直播栏目中&#xff0c;云和恩墨联合创始人李轶楠、副总经理熊军和欧冶云商数据库首席薛晓刚共同探讨了DBA的现状与未来发展。三位专家从云计算、人工智能、国产化替代等多个角度进行了深入的分析和探讨&#xff0c;为从业者提供了宝贵…...

Linux内核编程(二十一)USB驱动开发-键盘驱动

一、驱动类型 USB 驱动开发主要分为两种&#xff1a;主机侧的驱动程序和设备侧的驱动程序。一般我们编写的都是主机侧的USB驱动程序。 主机侧驱动程序用于控制插入到主机中的 USB 设备&#xff0c;而设备侧驱动程序则负责控制 USB 设备如何与主机通信。由于设备侧驱动程序通常与…...

模拟算法习题篇

在算法中&#xff0c;模拟是一种通过计算机程序来模拟现实世界中的过程或系统行为的方法。它的核心思想是根据题目给定的规则和逻辑&#xff0c;按照步骤细致地重现事件的发展流程&#xff0c;从而获得最终结果。 解题时如何使用模拟算法&#xff1a; 理解题目规则&#xff1a;…...

蓝桥杯真题 - 翻转 - 题解

题目链接&#xff1a;https://www.lanqiao.cn/problems/3520/learning/ 个人评价&#xff1a;难度 1 星&#xff08;满星&#xff1a;5&#xff09; 前置知识&#xff1a;无 整体思路 贪心&#xff0c;除了第一位跟最后一位&#xff0c;其它字符&#xff0c;每当 S [ i ] ≠…...

IP属地与视频定位位置不一致:现象解析与影响探讨

在数字化时代&#xff0c;IP属地和视频定位位置已成为我们获取网络信息、判断内容真实性的重要依据。然而&#xff0c;有时我们会发现&#xff0c;某些视频内容中展示的定位位置与其发布者的IP属地并不一致。这种不一致现象引发了广泛的关注和讨论。本文旨在深入剖析IP属地与视…...

管道符、重定向与环境变量

个人博客站—运维鹿: http://www.kervin24.top CSDN博客—做个超努力的小奚&#xff1a; https://blog.csdn.net/qq_52914969?typeblog 一、重定向 将命令和文件结合 标准输入重定向&#xff08;STDIN&#xff0c;文件描述符为0&#xff09;&#xff1a;默认从键盘输入&am…...

可扩展性设计架构模式——开闭原则

1. 概述 在架构设计中&#xff0c;遵循开闭原则&#xff08;Open/Closed Principle, OCP&#xff09;,代码应该“对扩展开放&#xff0c;对修改关闭”是实现可扩展性的关键。这个原则指导我们设计系统时&#xff0c;应使其对新增功能开放&#xff0c;而对现有代码的修改封闭。这…...

算法随笔_17: 回文数

上一篇: 算法随笔_16: 找出第k小的数对距离-CSDN博客 题目描述如下: 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&…...

计算机的错误计算(二百一十九)

摘要 大模型能确定 sin(2.6^10) 的符号吗&#xff1f;实验表明&#xff0c;大模型的计算、推理均有问题。另外&#xff0c;结论也是错的。 前面讨论的内容为自变量是 2.6^100的正弦&#xff0c;本节讨论自变量为 2.6^10的正弦&#xff08;对于某些大模型&#xff0c;2.6^100似…...

React进阶之高阶组件HOC、react hooks、自定义hooks

React高级 高阶组件 HOC属性代理反向继承属性代理和反向继承的区别实例实例一实例二 HooksHooks APIuseState&#xff1a;useEffect&#xff1a;useLayoutEffect&#xff1a;useRef&#xff1a;useContext&#xff1a;useReducer:useMemouseCallback 自定义Hooks 拓展&#xff…...

【Pytest】基础到高级功能的理解使用

文章目录 第一部分&#xff1a;Pytest 简介1.1 什么是 Pytest&#xff1f;1.2 Pytest 的历史1.3 Pytest 的核心概念1.4 Pytest 的特点1.5 为什么选择 Pytest&#xff1f; 第二部分&#xff1a;Pytest 的基本使用2.1 安装 Pytest2.2 编写第一个测试用例2.2.1 创建一个简单的测试…...

RHCE实验详解

目录 实验分析 环境拓扑结构 项目需求 主机环境描述 实验步骤 一、密钥互信和主机名更改 二、DNS 三、NGINX 四、MARIADB 五、NFS 六、NTP 七、论坛服务 结果展示及痛点解答 实验分析 环境拓扑结构 项目需求 1. 172.25.250.101 主机上的 Web 服务要求提供 www.ex…...

备赛蓝桥杯之第十五届职业院校组省赛第二题:分享点滴

提示&#xff1a;本篇文章仅仅是作者自己目前在备赛蓝桥杯中&#xff0c;自己学习与刷题的学习笔记&#xff0c;写的不好&#xff0c;欢迎大家批评与建议 由于个别题目代码量与题目量偏大&#xff0c;请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…...

MyBatis 注解开发详解

MyBatis 注解开发详解 MyBatis 支持使用注解来进行数据库操作。注解方式将 SQL 语句直接写在 Java 接口中&#xff0c;通过注解来完成 CRUD&#xff08;增删改查&#xff09;操作&#xff0c;省去了使用 XML 配置的繁琐步骤。这种方式适合简单项目或快速原型开发&#xff0c;因…...

Kivy App开发之UX控件VideoPlayer视频播放

kivy使用VideoPlayer控件实现视频播放,可以控制视频的播放,暂停,音量调节等功能。 在使用VideoPlayer视频播放器时,可以参考下表属性来设置其样式和触发事件。 属性说明source视频路径,默认为空state视频状态,值play,pause,stop,默认为stopthumbnail显示视频的缩略图…...

简单排序算法

异或运算及异或运算实现的swap方法 ^(异或): ^运算是计算机中的位运算&#xff0c;运算规则为相同为0&#xff0c;不同为1&#xff08;也被称为无进位相加&#xff09;。位运算处理效率比常规运算符效率更高。 异或运算遵循的法则&#xff1a; 0^N N N^N 0 异或运算…...

C语言初阶牛客网刷题——JZ17 打印从1到最大的n位数【难度:入门】

1.题目描述 牛客网OJ题链接 题目描述&#xff1a; 输入数字 n&#xff0c;按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3&#xff0c;则打印出 1、2、3 一直到最大的 3 位数 999。 用返回一个整数列表来代替打印n 为正整数&#xff0c;0 < n < 5 示例1 输入&…...

基于springboot+vue的校园二手物品交易系统的设计与实现

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

BilibiliDown终极指南:3个专业技巧实现B站视频高效下载与无损音频提取

BilibiliDown终极指南&#xff1a;3个专业技巧实现B站视频高效下载与无损音频提取 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.c…...

如何高效构建雷达系统:Python雷达模拟的完整实战指南

如何高效构建雷达系统&#xff1a;Python雷达模拟的完整实战指南 【免费下载链接】radarsimpy Radar Simulator built with Python and C 项目地址: https://gitcode.com/gh_mirrors/ra/radarsimpy RadarSimPy是一个基于Python和C构建的开源雷达模拟器&#xff0c;为雷达…...

路径构建引擎:开源角色养成系统的架构解析与实践指南

路径构建引擎&#xff1a;开源角色养成系统的架构解析与实践指南 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding 一、价值定位&#xff1a;构建虚拟角色的数字孪生平台 …...

从双摄手机到自动驾驶:对极几何(Epipolar Geometry)在现实世界中的5个应用场景

从双摄手机到自动驾驶&#xff1a;对极几何在现实世界中的5个应用场景 当你用手机拍摄人像模式照片时&#xff0c;是否好奇过背景虚化效果如何精准识别主体&#xff1f;当自动驾驶汽车在复杂路况中穿行&#xff0c;又是如何判断前方障碍物的距离&#xff1f;这些看似神奇的技术…...

从理论到实践:快马ai生成proteus+arduino温湿度监测全仿真教学案例

今天想和大家分享一个特别实用的嵌入式学习案例——用Proteus和Arduino搭建温湿度监测仿真系统。这个项目特别适合刚接触硬件的同学&#xff0c;因为全程不需要真实设备&#xff0c;通过仿真就能直观理解传感器数据采集和显示的完整流程。 项目核心元件选择 这个仿真系统主要用…...

5分钟Mac本地跑通32B Qwen!免费GPT-4o替代,还能5分钟造个会开浏览器+执行Shell的AI Agent

1. 硬件与模型选择 配置&#xff1a;Apple M2 Pro&#xff08;19 核 GPU&#xff09;、32GB 统一内存。 推荐模型&#xff1a;mlx-community/Qwen2.5-Coder-32B-Instruct-4bit 4bit 量化后只占 18-22GB 内存专为代码和 Agent 优化&#xff0c;Tool Calling 能力强MLX 原生支持…...

当stm32遇上ai:利用快马平台辅助开发嵌入式语音关键词识别原型

最近在做一个嵌入式语音识别的小项目&#xff0c;用STM32F4开发板实现关键词唤醒功能。作为一个嵌入式开发者&#xff0c;第一次尝试把AI算法部署到资源有限的MCU上&#xff0c;整个过程踩了不少坑&#xff0c;也发现了一些高效开发的技巧&#xff0c;特别是借助InsCode(快马)平…...

用AI辅助编程踩坑记:CH32V003驱动WS2812B,PWM+DMA配置避雷指南

CH32V003驱动WS2812B避坑实战&#xff1a;当AI生成的PWMDMA代码遇到现实 第一次尝试用AI辅助编写CH32V003驱动WS2812B的代码时&#xff0c;我天真地以为只要把芯片手册扔给AI就能得到完美运行的代码。直到LED灯带显示出诡异的彩虹乱码&#xff0c;我才意识到自己掉进了AI挖的多…...

如何解决多显示器壁纸管理的三大痛点:Superpaper跨平台解决方案实战指南

如何解决多显示器壁纸管理的三大痛点&#xff1a;Superpaper跨平台解决方案实战指南 【免费下载链接】superpaper A cross-platform multi monitor wallpaper manager. 项目地址: https://gitcode.com/gh_mirrors/su/superpaper 在多显示器工作环境中&#xff0c;你是否…...

C++ 编译器优化参数解析

C编译器优化参数解析&#xff1a;提升性能的关键 在C开发中&#xff0c;编译器优化是提升程序性能的重要手段。通过调整编译器的优化参数&#xff0c;开发者可以在不修改代码的情况下显著提高程序的运行效率、减少内存占用或缩短启动时间。不同的优化选项适用于不同的场景&…...