ubuntu系统常用指令及ros学习笔记

📅 2026/7/10 16:35:12 👁️ 阅读次数 📝 编程学习
ubuntu系统常用指令及ros学习笔记

一、常用指令

1.安装软件包:
sudo apt-get install packagename
删除软件包:
sudo apt-get remove packagename
获取新的软件包列表:
sudo apt-get update
升级有可用更新的系统:
sudo apt-get upgrade


2.安装 .deb 文件
简单地双击它,然後选择 安装软件包 即可。
或者,可以打开一个终端并输入:
sudo dpkg -i package_file.deb 来安装 .deb 文件。
如需卸载 .deb 文件,在您软件包管理器中反选它
或输入: sudo dpkg -r package_name

3.查看数据集的话题信息: rosbag info 数据集名称

4. 查看节点的输入输出 :rosnode info /map_building

5.查看点云的坐标系名称:rostopic echo -n1/sumcloud_test/robot_a/header

6.运行bag包: rosbag play --clock 2025-06-16-15-38-44.bag

7.记录bag包:rosbag record -0 imu_data.bag /IMU_topic

-O imu_data.bag: 指定输出文件名(.bag扩展名会自动添加)

/IMU_topic: 你想要录制的特定IMU话题名称

a. 录制多个话题:rosbag record -O my_data.bag /IMU_topic /camera/image /odometry

b. 录制所有话题(不推荐,文件会很大):rosbag record -0 all_data.bag -a

8.查看点云话题的frame_id:rostopic echo /points_raw | grep frame_id

9.查看建立的点云地图命令:pcl_viewer GlobalMap.pcd

10.编译整个工作空间太慢时,只需编译/src中修改过的功能包即可(功能包的名字不是文件夹名,而是,package.xml中的名字)

只编译工作空间里名为liorf_localization的这个包(以及它的依赖),而不是全量编译所有包。注意命令里的引号要用普通 ASCII 双引号" ",,不要用中文或花括号引号,否则 CMake 可能解析失败。

catkin_make -DCATKIN_WHITELIST_PACKAGES=“liorf_localization”

10.配置环境变量:将环境变量写入~/.bashrc文件,避免每次重启终端都要配置

配置主机的IP地址,ctrl+o保存,enter确定,ctrl+x退出。

nano ~/.bashrc

退出后输入 :source ~/.bashrc,使更新的环境变量生效。

11.需要在终端设置代理的原因

Clash = 你家门口开了一家快递站
proxy 设置 = 你告诉所有程序"寄东西去这家快递站"

快递站开了,但你没告诉任何人 → 没人去寄
快递站开了,你也通知了所有人 → 才能正常收发

export http_proxy="http://127.0.0.1:7897" export https_proxy="http://127.0.0.1:7897" export all_proxy="http://127.0.0.1:7897"

二、ubuntu系统学习笔记

2.1. 正确 & 标准的目录结构

工作空间的src/和 功能包里的src/完全不是一回事,一句话总结:

workspace/src = ROS 世界
package/src = C++ 世界

zhr_ws/
├──src/ 【catkin 专用】:是“包容器”,用于catkin 扫描 ROS 包。
│ ├── CMakeLists.txt
│ ├── lio_sam/
│ │ ├── package.xml
│ │ ├── CMakeLists.txt
│ │ ├──src/ 【功能包src】:“源码容器”,存放该功能的C++ 代码,用于CMake 编译源码。
│ │ │ ├── terrain_map_building.cpp
│ │ │ └── semantic_mapping.cpp
│ │ ├── include/
│ │ │ └── lio_sam/
│ │ │ └── mapper.h
│ │ ├── launch/
│ │ └── config/
│ └── multi_robot_mapping/

2.2. 文件系统与工程层级命名

层级名称类型示例出现位置作用命名规则常见错误
1工作空间名zhr_wsLinux 文件夹仅路径容器任意,推荐_ws❌ 以为会影响 rosrun
2src 目录src/workspace 下存放包固定名❌ 多套 src
3ROS 包文件夹名lio_samsrc/lio_samcatkin 生成目标路径全小写 +_❌ 使用-
4package.xml<name>lio_sampackage.xmlrospack / rosrun 识别必须与文件夹一致❌ 不一致
5CMake project()lio_samCMakeLists.txt编译变量域建议一致❌ 随意命名

注:3、4、5 三处名字一致

2.3可执行文件(node 实体)命名规则

层级名称类型示例出现位置作用命名规则常见错误
6cpp 文件名terrain_map_building.cppsrc/源代码任意当成 node 名
7可执行文件名terrain_map_buildingadd_executable()生成二进制小写 +_与包名混
8生成路径devel/lib/lio_sam/terrain_map_buildingcatkinrosrun 搜索目标自动生成未编译

rosrun 实际逻辑

rosrun<package><executable>

devel/lib/<package>/<executable>

三、坐标msg消息

/map:一般为建图的起点

/base_link:机器人坐标

虽然是靠Topic通信机制发布的parent 坐标系到child坐标系的变换,但并不是让每一对父子坐标系都发布一个话题,实际上发布的唯一个话题是/topic,该话题集合了所有发布的父子坐标系的变换关系

查看TF树:rosrun rqt_tf_tree rqt_tf_tree

1.geometry_msgs/TransformStamped
命令行键入:rosmsg info geometry_msgs/TransformStampedstd_msgs/Header
header #头信息 uint32 seq #|-- 序列号 time stamp #|-- 时间戳 string frame_id #|-- 坐标 ID string child_frame_id #子坐标系的 id geometry_msgs/Transform transform #坐标信息 geometry_msgs/Vector3 translation #偏移量 float64 x #|-- X 方向的偏移量 float64 y #|-- Y 方向的偏移量 float64 z #|-- Z 方向上的偏移量 geometry_msgs/Quaternion rotation #四元数 float64 x float64 y float64 z float64 w

2.geometry_msgs/PointStamped

命令行键入:rosmsg info geometry_msgs/PointStamped
std_msgs/Header header #头 uint32 seq #|-- 序号 time stamp #|-- 时间戳 string frame_id #|-- 所属坐标系的 id geometry_msgs/Point point #点坐标 float64 x #|-- x y z 坐标 float64 y float64 z

四、ros master 通信(同一个ros master服务器)

export ROS_MASTER_URI=http://A_IP:11311
  1. export:是 Linux 系统中设置环境变量的命令,让该变量在当前终端会话中生效。
    • ROS_MASTER_URI:ROS 的核心环境变量,指定ROS 主节点(Master)的网络地址。
    • A_IP:主控机的 IP 地址。
    • 11311:ROS Master 的默认端口号,一般不需要修改。

实际使用场景与示例

假设你有两台设备:

  • 主控机(zhang-OMEN-Laptop-15-ek0xxx运行 ROS Master):IP 是192.168.0.111
  • 从机(ras-NUC11PHi7):IP 是192.168.0.110
主机接收从机的消息

1.临时起作用,尽在当前端口可接受消息。

export ROS_MASTER_URI=http://192.168.0.110:11311

2.所有终端都生效,需要将环境变量加入到终端的配置文件中

echo "export ROS_MASTER_URI=http://192.168.0.110:11311" >> ~/.bashrc

五、FKIE Multimaster工具包(用于不同ros master的通信,可自由配置所要隔离的内容)

5.1.介绍

OS协议栈fkie_multimaster为多ROS master提供了完整的解决方案。 此外,带有守护进程的节点管理器提供了基于图形界面的管理环境,非常适合管理ROS启动配置和控制运行中的节点,这些都适用于单核系统。

5.2.安装和使用步骤

安装:新建multimaster_ws工作空间

cd multimaster_ws/src git clone https://github.com/fkie/multimaster_fkie.git multimaster rosdep update rosdep install -i --as-root pip:false --reinstall --from-paths multimaster

使用方法:

注意:

a.两个ros master进行通信,需要连接同一局域网,否则无法连接。

b.以下操作需要在想要同步的主机B上进行相同操作。

c.同一个主机在同一个局域网下的ip地址是会变动的(路由器重启或者加入了新的主机时可能会变动),有时候连接不上的时候要看一下ip地址是否改变

1. 终端输入ifconfig查看,主机A和主机B所在局域网的ip地址。

ifconfig

由上图所示,主机A所在局域网那个的ip地址为 192.168.0.111,主机B同理

2.在主机的host上设置好想要连接的对方的主机的 IP地址和主机名,否则将连接失败。

sudo nano /etc/hosts

进入后用光标选中所添加的位置,填写完毕后,按ctrl+o保存,enter确定,然后ctrl+x离开

主机名查看命令:

hostname

3. 在master_discovery.launch文件中修改ip

<param name="interface" value="192.168.0.111" />,可让kie_multimaster找到自身的ip。

4. 在master_discovery.launch文件中配置想要同步和不想同步的话题,节点,TF等。

解释:<param name="sync_topics_on_demand" value="False" />

当sync_topics_on_demand =True(默认值),含义是:

如果我同步了某个 topic / node,
那么与它有关联的 publisher / subscriber 使用到的其它 topic
即使不在 sync_topics 列表里,也一起同步过来。

此时包含 除了所要同步的话题所在的机器人B的节点 以外,还包含 相关联的话题和节点

当sync_topics_on_demand =False, 含义变成:

只同步sync_topics(或 sync_nodes)中明确指定的内容
其它任何 topic / service / 连接关系
一律不管

此时只包含所要同步的话题所在的机器人B的节点

5. 按照前3步,设置好后,运行以下代码启动fkie_multimaster

cd multimaster_ws source ./devel/setup.bash roslaunch fkie_master_discovery master_discovery.launch roslaunch fkie_master_sync master_sync.launch

六、ros参数服务器