(二)ROS学习
一.工作空间
- 创建工作空间:存放工程开发相关文件的文件夹
mkdir -p ~/catkin_ws/src //创建文件夹
cd ~/catkin_ws/src //src文件夹放置具体功能包源码
catkin_init workspace //创建工作空间
-
CMake是对make工具的生成器,是更高层的工具,他简化了编译构建过程,能够管理大型项目,具有良好的扩展性。ROS采用的就是CMake,并且ROS对CMake进行了扩展,于是便有了Catkin编译系统。
-
CMake是对make工具的生成器,是更高层的工具,他简化了编译构建过程,能够管理大型项目,具有良好的扩展性。ROS采用的就是CMake,并且ROS对CMake进行了扩展,于是便有了Catkin编译系统。
-
Catkin就是讲cmake与make指令做了一个封装从而完成整个编译过程的工具。要用catkin编译一个工程或软件包,只需用
catkin_make
指令进行编译,调用系统自动完成编译和链接过程,构建生成目标文件。注:catkin编译之前需要回到工作空间目录,catkin_make 在其他路径下编译不会成功。编译完成后,一定要用source命令刷新环境,使系统能找到新生成的ROS可执行文件,否则会出现无法找到可执行文件等错误
Catkin突出优点:操作更加简单;一次配置,多次使用;跨依赖项目编译。
- 编译工作空间
cd ~/catkin_ws/
catkin_make //编译,需要在工作空间的根目录下即catkin_ws的根目录下完成操作
//build:编译空间; devel:开发空间; install:安装空间
- 设置环境变量
source devel/setup.bash //使系统知晓功能包位置在catkin_ws文件夹里面;setup.bash为脚本名字,若使用的为zsh,则为setup.zsh
- 设置完只会在该终端生效,若打开一个新的终端则不会生效,需重新设置。
- 解决方法:将该命令放入整个终端的配置文件中
1. vi ~/.bashrc
2. 在.bashrc最后一行加入:
source ~/catkin_ws/devel/setup.bash
3. 保存退出后输入命令使其生效
source ~/.bashrc
- 检查环境变量
echo $ROS_PACKAGE_PATH
二.功能包
功能包:放置机器人某个功能的单元,在其中创建相应代码。在同一工作空间下,不允许存在同名功能包;不同工作空间下,允许存在同名功能包。
命令:catkin_create_pkg<package_name>[depend1][depend2][depend3]
## depend为该功能包所需要依赖的其他功能包
- 创建功能包
cd ~/catkin_ws/src //创建功能包需要在src目录下进行
catkin_create_pkg learning_communication std_msgs rospy roscpp //创建ros通讯机制功能包
# std_msgs:ros定义的一些标准的数据结构
# rospy:ros定义的一些Python接口
# roscpp:ros的c++的编程接口
# 创建完成后自动生成四个文件,CMakeLists.txt放置编译选项,package.xml里面为该功能包信息,
其中有依赖包的信息,后续若要加依赖则在里面修改,这两个文件是功能包必有的。
- 编译功能包
cd ~/catkin_ws
catkin_make //编译
source ~/catkin_ws/devel/setup.bash //前面已经配置环境过可省略该步骤
- 工作空间的覆盖
ROS工作空间的Overlaying机制,即工作空间的覆盖:
- 工作空间的路径依次在ROS-PACKAGE_PATH环境变量中记录
- 新设置的路径在ROS-PACKAGE_PATH中会自动放置在最前端
- 运行时,ROS会优先查找最前端的工作空间中是否存在指定的功能包
- 如果不存在,就顺序向后查找其他工作空间
查看ros空间的所有环境变量:env | grep ros