ROS学习--第3篇:ROS基础---创建工作空间和软件包

Posted loongembedded

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ROS学习--第3篇:ROS基础---创建工作空间和软件包相关的知识,希望对你有一定的参考价值。

1.创建工作空间 catkin_ws

创建src文件,放置功能包源码:

mkdir -p ~/catkin_ws/src
进入src文件夹:

cd ~/catkin_ws/src
初始化文件夹:

catkin_init_workspace
这样就在src文件中创建了一个 CMakeLists.txt 的文件,目的是告诉系统,这个是ROS的工作空间。

2.编译工作空间 catkin_make

所有编译工作都要在catkin_ws文件夹下编译:

cd ~/catkin_ws/
编译,编译完成后,会发现catkin_ws中多了两个文件 build 和 devel

catkin_make

3.设置环境变量

在第1篇中,我们介绍了设置环境变量,那个是将整个ros系统的环境变量设置到bash脚本中,现在我们需要把我们工作空间的环境变量设置到bash中。

echo “source ~/catkin_ws/devel/setup.bash” >> ~/.bashrc
让上面的配置在当前的终端生效:

source ~/.bashrc
我们用 vi 编辑器打开 ~/.bashrc 文件,就可以看到最后两行,第一行是我们第1篇添加的ros系统的环境变量,第2行是我们创建的catkin_ws工作空间的环境变量:

如果想要查看环境变量:

echo $ROS_PACKAGE_PATH
终端会输出:

/home/wdd/catkin_ws/src : /opt/ros/kinetic/share 第一个是我们刚才创建的catkin_ws的,第二个是ros系统的。

4.创建功能包

在src中创建:

cd ~/catkin_ws/src/
功能包格式:

catkin_create_pkg package_name depend1 depend2 depend2
package_name:功能表名称

depend1、2、3:依赖项

创建功能包:

catkin_create_pkg learning_communication std_msgs roscpp rospy
std_msgs:包含常见消息类型

roscpp:使用C++实现ROS各种功能

rospy:使用python实现ROS各种功能

5. catkin工作空间中的软件包

开发catkin软件包的推荐方法是使用catkin工作空间,但是你也可以单独开发catkin软件包。一个简单的工作空间如下所示:

workspace_folder/ – WORKSPACE:工作空间
src/ – SOURCE SPACE:代码空间
CMakeLists.txt – ‘Toplevel’ CMake file, provided by catkin:最顶层CMake文件,由catkin提供
package_1/
CMakeLists.txt – CMakeLists.txt file for package_1
package.xml – Package manifest for package_1

package_n/
CMakeLists.txt – CMakeLists.txt file for package_n
package.xml – Package manifest for package_n

6. 软件包依赖关系

6.1 一级依赖

使用catkin_create_pkg命令时提供了几个软件包作为依赖关系,现在可以使用rospack命令工具查看这些一级依赖包。

rospack depends1 beginner_tutorials
返回的结果:
std_msgs
rospy
roscpp

rospack列出了在运行catkin_create_package命令时作为参数的依赖包,这些依赖包存储在package.xml文件中。

6.2 间接依赖

在很多种情况下,一个依赖包还会有它自己的依赖关系,比如,rospy就有其他依赖包关系

kandi@ubuntu:~/catkin_ws/src/study$ rospack depends rospy
catkin
genmsg
genpy
cpp_common
rostime
roscpp_traits
roscpp_serialization
message_runtime
gencpp
geneus
gennodejs
genlisp
message_generation
rosbuild
rosconsole
std_msgs
rosgraph_msgs
xmlrpcpp
roscpp
rosgraph
ros_environment
rospack
roslib
kandi@u

7.编译功能包

cd ~/catkin_ws
catkin_make
这行这边后,工作空间构建完成,在devel子目录下创建一个与你通常在/opt/ros/$ROSDISTRO_NAME下看到的目录结构类似的结构,比如我们下载的是noetic版本,其目录结构如下:

工作空间目录说明如下:

要将这个工作空间添加到ROS环境中,你需要source 一下生成的配置文件:

$ . ~/catkin_ws/devel/setup.bash

显示如下说明编译成功:


[ 0%] Built target nav_msgs_generate_messages_eus
[ 0%] Built target nodelet_generate_messages_lisp
[ 33%] Built target slam_gmapping_nodelet
[ 44%] Linking CXX executable /home/kandi/catkin_ws/devel/lib/gmapping/slam_gmapping_replay
[ 55%] Linking CXX executable /home/kandi/catkin_ws/devel/lib/gmapping/slam_gmapping
[ 77%] Built target slam_gmapping
[100%] Built target slam_gmapping_replay

在工作空间根目录下(比如/home/kandi/catkin_ws)编译生成可执行文件slam_gmapping和slam_gmapping_replay位于/home/kandi/catkin_ws/devel/lib/gmapping/目录下。

8.执行可执行文件

命令行终端先运行roscore启动master阶段,再在另一个终端执行可执行文件。

kandi@ubuntu:~/catkin_ws$ cd /home/kandi/catkin_ws/devel/lib/gmapping/
kandi@ubuntu:~/catkin_ws/devel/lib/gmapping$ ./slam_gmapping

标准的做法:

$ rosrun [package_name] [node_name]

这里的包名package_name通过软件包文件catkin_ws\\src\\slam_gmapping\\gmapping\\package.xml

gmapping
中name知道package_name为gmapping.

节点名node_name通过

add_executable(slam_gmapping src/slam_gmapping.cpp src/main.cpp)
target_link_libraries(slam_gmapping $Boost_LIBRARIES $catkin_LIBRARIES)
if(catkin_EXPORTED_TARGETS)
add_dependencies(slam_gmapping $catkin_EXPORTED_TARGETS)
endif()

set(LOCAL_DEPENDENCIES gmapping-rtest $PROJECT_NAME_basic_localization_stage_indexed.bag
$PROJECT_NAME_test_replay_crash.bag
$PROJECT_NAME_test_turtlebot.bag
$PROJECT_NAME_test_upside_down.bag
$PROJECT_NAME_hallway_slow_2011-03-04-21-41-33.bag
$PROJECT_NAME_basic_localization_stage_groundtruth.pgm
slam_gmapping
slam_gmapping_replay
)

通过

add_executable(slam_gmapping src/slam_gmapping.cpp src/main.cpp)

add_executable()使用指定的源文件来生成目标可执行文件slam_gmapping,slam_gmapping也就是上面的节点名node_name。

catkin_create_pkg命令生成的CMakeLists.txt文件也非常重要,详见wiki的链接:
添加链接描述

以上是关于ROS学习--第3篇:ROS基础---创建工作空间和软件包的主要内容,如果未能解决你的问题,请参考以下文章

ROS2学习笔记11--工作空间的创建

探索之路机器人篇-ROS系统并创建工作空间和项目

创建ROS消息和服务---ROS学习第8篇

ROS入门 文件结构篇

ROS学习记录9——urdf文件的创建与使用

[ROS基础] --- 创建工作空间