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_ws | Linux 文件夹 | 仅路径容器 | 任意,推荐_ws | ❌ 以为会影响 rosrun |
| 2 | src 目录 | src/ | workspace 下 | 存放包 | 固定名 | ❌ 多套 src |
| 3 | ROS 包文件夹名 | lio_sam | src/lio_sam | catkin 生成目标路径 | 全小写 +_ | ❌ 使用- |
| 4 | package.xml<name> | lio_sam | package.xml | rospack / rosrun 识别 | 必须与文件夹一致 | ❌ 不一致 |
| 5 | CMake project() | lio_sam | CMakeLists.txt | 编译变量域 | 建议一致 | ❌ 随意命名 |
注:3、4、5 三处名字一致
2.3可执行文件(node 实体)命名规则
| 层级 | 名称类型 | 示例 | 出现位置 | 作用 | 命名规则 | 常见错误 |
|---|---|---|---|---|---|---|
| 6 | cpp 文件名 | terrain_map_building.cpp | src/ | 源代码 | 任意 | 当成 node 名 |
| 7 | 可执行文件名 | terrain_map_building | add_executable() | 生成二进制 | 小写 +_ | 与包名混 |
| 8 | 生成路径 | devel/lib/lio_sam/terrain_map_building | catkin | rosrun 搜索目标 | 自动生成 | 未编译 |
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/Headerheader #头信息 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 w2.geometry_msgs/PointStamped
命令行键入:rosmsg info geometry_msgs/PointStampedstd_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:11311export:是 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:113112.所有终端都生效,需要将环境变量加入到终端的配置文件中
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离开。
主机名查看命令:
hostname3. 在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参数服务器
