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    # 最后是其他工作空间
相关推荐
testpassportcn1 小时前
UiPath-ADPV1 認證介紹|Automation Developer Professional v1
网络·学习·改行学it
Root_Hacker2 小时前
include文件包含个人笔记及c底层调试
android·linux·服务器·c语言·笔记·安全·php
Gorgous—l4 小时前
数据结构算法学习:LeetCode热题100-动态规划篇(下)(单词拆分、最长递增子序列、乘积最大子数组、分割等和子集、最长有效括号)
数据结构·学习·算法
窗边鸟5 小时前
小白日记之java方法(java复习)
java·学习
burning_maple6 小时前
redis笔记
数据库·redis·笔记
魔芋红茶6 小时前
Spring Security 学习笔记 4:用户/密码认证
笔记·学习·spring
googleccsdn6 小时前
ENSP Pro Lab笔记:配置BGP VXLAN双栈(3)
网络·笔记
爱宁~6 小时前
UnityShader学习笔记[二百九十九]UGUI中的Mask遮罩半透明Shader
笔记·学习
啦哈拉哈8 小时前
【Python】知识点零碎学习4
python·学习·算法