ROS1学习笔记(二)

1.ROS工作空间结构

bash 复制代码
ros_ws/                    # 工作空间根文件夹
├── src/                   # 源代码空间(放置功能包)
│   ├── CMakeLists.txt     # 顶层CMake文件(必需,自动生成)
│   ├── package_1/         # 功能包1
│   │   ├── CMakeLists.txt # package_1中有C++代码时才需要
│   │   ├── package.xml    #
│   │   ├── src/				   # 存放C++文件
│   │   │   ├── node1.cpp  # C++节点需要编译生成二进制可执行文件
│   │   │   └── node2.cpp
│   │   ├── include/package_1/  # C++节点需要的头文件
│   │   │   └── my_header_1.h
│   │   ├── scripts/			 # 存放python文件
│   │   │   ├── node3.py   # python节点无需编译直接作为脚本复制
│   │   │   └── node4.py
│   │   └── ...            # 还可以有launch,config,msg等文件夹,按需创建
│   ├── package_2/         # 功能包2
│   │   ├── CMakeLists.txt
│   │   ├── package.xml
│   │   └── ...
│   └── ...
├── build/                 # 编译空间(自动生成)
│   ├── CMakeCache.txt
│   ├── CMakeFiles/
│   └── ...
├── devel/                 # 开发空间(自动生成)
│   ├── setup.bash         # 环境配置脚本
│   ├── lib/               # 编译生成的库文件
│   └── ...
└── install/               # 安装空间(调试时一般不用)
    ├── setup.bash
    └── ...

2.创建工作空间步骤

bash 复制代码
mkdir -p ./ros_ws/src		#建立工作空间文件夹
cd ./ros_ws/src && catkin_init_workspace		#会在src下创建CMakeLists.txt文件
cd ../ && catkin_make		#会在ros_ws下创建build和devel两个(含文件的)文件夹
source ./devel/setup.bash		#更新环境变量

3.创建功能包步骤

bash 复制代码
cd ~/ros_ws/src		#进入代码空间创建功能包
catkin_create_pkg <package_name> [depend1] [depend2] [depend3]		
#example:catkin_create_pkg camera_yolo_result std_msgs rospy roscpp
#只会创建最基本的include和src两个空文件夹,其他文件夹自己手动创建
cd ../ && catkin_make		#退回到工作空间重新编译
source ./devel/setup.bash		#更新环境变量

4.注意事项

4.1可以把source ~/ros_ws/devel/setup.bash这行指令写到.bashrc中去,这样每次打开终端都会自动重新加载环境变量,可以避免每打开一个终端就要执行一次该指令的麻烦。

bash 复制代码
#对于User状态下的工作空间
vim ~/.bashrc
#在~/.bashrc中添加如下类似指令后保存退出(根据实际路径修改)
source ~/ros_ws/devel/setup.bash

#对于Root状态下的工作空间
vim /root/.bashrc
#在~/.bashrc中添加如下类似指令后保存退出(根据实际路径修改)
source /home/li/ros_ws/devel/setup.bash

4.2一般建议在User状态下进行ROS工作空间的构建,在Root状态下的工作空间在修改时几乎只能通过命令行,并且.bashrc文件在User状态和Root状态下各有一个且互不影响。

4.3多工作空间的覆盖机制

ROS允许多个工作空间并存,可在不同项目的工作空间创建所需要的功能包。不同的工作空间中若存在同名的功能包,根据ROS的工作空间覆盖机制,所有工作空间的路径会依次在ROS_PACKAGE_PATH环境变量中记录,当设置多个工作空间的环境变量后,新设置的路径在ROS_PACKAGE_PATH中会自动放置在最前端,在运行时ROS会优先查找在最前端的工作空间中是否存在指定的功能包,如果不存在就顺序向后查找其他工作空间,直到最后一个工作空间为止,即.bashrc文件中越靠下的路径在ROS_PACKAGE_PATH中越靠前。

4.4如果需要运行多个工作空间中的节点互相通信,可以使用overlay机制实现,注意工作空间叠加顺序。

bash 复制代码
# 终端中执行
source /opt/ros/noetic/setup.bash				 # 首先是ROS系统本身
source ~/ros_ws_vision/devel/setup.bash     # 其次是主工作空间
source ~/ros_ws_control/devel/setup.bash    # 最后是其他工作空间
相关推荐
ouliten12 分钟前
cuda编程笔记(36)-- 应用Tensor Core加速矩阵乘法
笔记·cuda
孞㐑¥1 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法
Gary Studio2 小时前
rk芯片驱动编写
linux·学习
mango_mangojuice2 小时前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
工程师老罗2 小时前
YOLOv1 核心知识点笔记
笔记·yolo
lingggggaaaa2 小时前
安全工具篇&动态绕过&DumpLsass凭据&Certutil下载&变异替换&打乱源头特征
学习·安全·web安全·免杀对抗
PP东3 小时前
Flowable学习(二)——Flowable概念学习
java·后端·学习·flowable
学电子她就能回来吗3 小时前
深度学习速成:损失函数与反向传播
人工智能·深度学习·学习·计算机视觉·github
半壶清水4 小时前
[软考网规考点笔记]-软件开发、项目管理与知识产权核心知识与真题解析
网络·笔记·压力测试
tq10864 小时前
先探索,后设计
笔记