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基础---创建工作空间和软件包的主要内容,如果未能解决你的问题,请参考以下文章