
一、常用指令1.安装软件包sudo apt-get install packagename删除软件包sudo apt-get remove packagename获取新的软件包列表sudo apt-get update升级有可用更新的系统sudo apt-get upgrade2.安装 .deb 文件简单地双击它然後选择 安装软件包 即可。或者可以打开一个终端并输入sudo dpkg -i package_file.deb 来安装 .deb 文件。如需卸载 .deb 文件在您软件包管理器中反选它或输入 sudo dpkg -r package_name3.查看数据集的话题信息 rosbag info 数据集名称4. 查看节点的输入输出 rosnode info /map_building5.查看点云的坐标系名称rostopic echo -n1/sumcloud_test/robot_a/header6.运行bag包 rosbag play --clock 2025-06-16-15-38-44.bag7.记录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 /odometryb. 录制所有话题不推荐文件会很大rosbag record -0 all_data.bag -a8.查看点云话题的frame_idrostopic echo /points_raw | grep frame_id9.查看建立的点云地图命令pcl_viewer GlobalMap.pcd10.编译整个工作空间太慢时只需编译/src中修改过的功能包即可功能包的名字不是文件夹名而是package.xml中的名字只编译工作空间里名为liorf_localization的这个包以及它的依赖而不是全量编译所有包。注意命令里的引号要用普通 ASCII 双引号 不要用中文或花括号引号否则 CMake 可能解析失败。catkin_make -DCATKIN_WHITELIST_PACKAGES“liorf_localization”10.配置环境变量将环境变量写入~/.bashrc文件避免每次重启终端都要配置配置主机的IP地址,ctrlo保存enter确定ctrlx退出。nano ~/.bashrc退出后输入 source ~/.bashrc使更新的环境变量生效。11.需要在终端设置代理的原因Clash 你家门口开了一家快递站proxy 设置 你告诉所有程序寄东西去这家快递站快递站开了但你没告诉任何人 → 没人去寄快递站开了你也通知了所有人 → 才能正常收发export http_proxyhttp://127.0.0.1:7897 export https_proxyhttp://127.0.0.1:7897 export all_proxyhttp://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❌ 以为会影响 rosrun2src 目录src/workspace 下存放包固定名❌ 多套 src3ROS 包文件夹名lio_samsrc/lio_samcatkin 生成目标路径全小写 _❌ 使用-4package.xmlnamelio_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 实际逻辑rosrunpackageexecutable↓devel/lib/package/executable三、坐标msg消息/map一般为建图的起点/base_link:机器人坐标虽然是靠Topic通信机制发布的parent 坐标系到child坐标系的变换但并不是让每一对父子坐标系都发布一个话题实际上发布的唯一个话题是/topic该话题集合了所有发布的父子坐标系的变换关系查看TF树rosrun rqt_tf_tree rqt_tf_tree1.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_URIhttp://A_IP:11311export是 Linux 系统中设置环境变量的命令让该变量在当前终端会话中生效。ROS_MASTER_URIROS 的核心环境变量指定ROS 主节点Master的网络地址。A_IP主控机的 IP 地址。11311ROS Master 的默认端口号一般不需要修改。实际使用场景与示例假设你有两台设备主控机zhang-OMEN-Laptop-15-ek0xxx运行 ROS MasterIP 是192.168.0.111从机ras-NUC11PHi7IP 是192.168.0.110主机接收从机的消息1.临时起作用尽在当前端口可接受消息。export ROS_MASTER_URIhttp://192.168.0.110:113112.所有终端都生效需要将环境变量加入到终端的配置文件中echo export ROS_MASTER_URIhttp://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进入后用光标选中所添加的位置填写完毕后按ctrlo保存enter确定然后ctrlx离开。主机名查看命令hostname3. 在master_discovery.launch文件中修改ipparam nameinterface value192.168.0.111 /可让kie_multimaster找到自身的ip。4. 在master_discovery.launch文件中配置想要同步和不想同步的话题节点TF等。解释param namesync_topics_on_demand valueFalse /当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_multimastercd multimaster_ws source ./devel/setup.bash roslaunch fkie_master_discovery master_discovery.launch roslaunch fkie_master_sync master_sync.launch六、ros参数服务器