ROS(四)之创建工作空间和功能包


一、工作空间(workspace)

1.概念

  • src:代码空间(source space)
    放置功能包源码

  • build :编译空间(build space)
    放置编译过程中产生的中间文件

  • devel:开发空间(development space)
    编译完成后的可执行文件
    环境变量配置的脚本

  • install:安装空间(install space)
    和devel放置的东西差不多,在ros2中与devel合并

2.工作空间的覆盖

  • 工作空间的路径依次在ROS_PACKAGE_PACH环境变量中记录,用echo $ROS_PACKAGE_PATH查看。
  • 新设置的路径在ROS_PACKAGE_PACH中会自动放置在最前端
  • 运行时,ROS会优先查找最前端的工作空间是否存在指定的功能包
  • 如果不存在,就顺序向后查找其他的工作空间
  • 注意事项:注意其他的包是否依赖于被覆盖的包,因为依赖项会被从系统包改为我们的包。

二、创建工作空间的命令

1.初始化工作空间

在src代码空间下初始化工作空间

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

在这里插入图片描述
输入成功后会在src下看到一个CMakeLists.txt文件,src下的CMakeLists.txt文件用来告诉系统这是一个ros的工作空间。

2.编译工作空间

在根目录下make

cd ~/catkin_ws
catkin_make

会生成build编译空间和devel开发空间

3.设置环境变量

XXX功能包没有找到的问题就是因为没有配置好环境变量

只对当前终端生效,打开新的终端还要再设置一遍。

让环境变量生效

cd ~/catkin_ws
source devel/setup.bash

也可以直接配置~/.bashrc环境变量文件,对所有终端都生效

  1. 编辑~/.bashrc文件
sudo gedit ~/.bashrc
  1. 在最后一行添加
source ~/catkin_ws/devel/setup.bash

在这里插入图片描述

  1. .bashrc环境变量生效,这样之后打开新的就不用配置环境变量了。
source ~/.bashrc

4.检查环境变量

echo $ROS_PACKAGE_PATH

在这里插入图片描述

意思:
这条命令是查看ros工具包所在的路径,如果显示出来的路径中包含我们的项目的工作空间的路径,那就证明我们的项目的环境变量配置好了。

这里有两个路径

  • 前者是当前工作空间下的路径,证明ok
  • 后者是ros安装时工具包存储的路径

三、功能包

1.创建功能包

(1)创建

catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
  • package_name:功能包的名字。
    一般习俗是小写字母开头,只包含小写字母、数字、下划线和破折号。
    同一工作空间下不允许有同名的功能包,不同的工作空间可以。
  • depend:依赖。
    std_msgs(ros定义好的标准数据结构),roscpp(c++接口)rospy(python接口),一般这三个都要有(哪怕不用python,但加上不容易出错?)。

例子:
功能包是添加到src代码空间的,

cd ~/catkin_ws/src
catkin_create_pkg my_package std_msgs roscpp rospy

在这里插入图片描述
然后我们就可以看见在src代码空间下多一个文件夹my_package
在这里插入图片描述

(2)进入功能包my_package

在这里插入图片描述

  • src:具体功能包的代码
  • include:放置头文件
  • CMakeLists.txt:放置cmake如何编译这个功能包
    【精简CMakeLists.txt】
# project name,package.xml中的包名name也得同步改
project(my_package)

# using C++11
set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} -std=c++11 ")

# cmake version
cmake_minimum_required(VERSION 2.8.3)

# find catkin package需要的组件
find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
)

# 添加exec执行的依赖
catkin_package(
  CATKIN_DEPENDS roscpp rospy std_msgs
)

# link headers
include_directories(
  ${catkin_INCLUDE_DIRS}
)

之后可以将可执行文件部分加到include_directories后面。

# 生成可执行文件
add_executable(talker src/talker.cpp)

# after ADD_EXECUTABLE,为生成文件target添加库
target_link_libraries(talker ${catkin_LIBRARIES})
  • package.xml:放置描述功能包的具体信息:名字(CMakeLists.txt中的包名project()也得同步改)、版本、描述、依赖项
    其中重要的是依赖项,如果后续想要添加依赖项,要在这里修改添加。
    在这里插入图片描述

2.编译功能包:进入工作空间+设置环境变量+编译工作空间

启动roscore

roscore

编译

# 进入工作空间
cd ~/catkin_ws

# 设置环境变量
source devel/setup.bash

# 编译工作空间
catkin_make

在这里插入图片描述
可以看到找到我们的功能包my_package,并且成功编译没有报错。

注意:一定要打source devel/setup.bash或其他的设置环境变量方法,不然找不到功能包,rosrun运行不了。

3.运行功能包

运行功能包my_package中的某个可执行文件your_target_name

rosrun my_package your_target_name

比如:
运行功能包turtlesim中的某个可执行文件turtle_teleop_key

rosrun turtlesim turtle_teleop_key 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值