ros创建catkin软件包

ros基本操作

rospack = ros + pack(age)
roscd = ros + cd
rosls = ros + ls

ros工作空间的层级关系

见下图

workspace_folder/        -- WORKSPACE
  src/                   -- SOURCE SPACE
    CMakeLists.txt       -- 'Toplevel' CMake file, provided by 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

创建工作空间

mkdir -p ~/workspacepath/src
cd ~/workspacepathpath/
catkin_make

然后保证工作区被安装脚本正确覆盖,需确定ROS_PACKAGE_PATH环境变量包含你当前的工作空间目录:

echo $ROS_PACKAGE_PATH
/home/<username>/catkin_ws/src:/opt/ros/<distro>/share

创建ros软件包

一个包要想称为catkin软件包,必须符合以下要求:

  • 这个包必须有一个符合catkin规范的package.xml文件
  • 这个package.xml文件提供有关该软件包的元信息
  • 这个包必须有一个catkin版本的CMakeLists.txt文件
  • 如果它是个Catkin元包的话,则需要有一个CMakeList.txt文件的相关样板
  • 每个包必须有自己的目录
    这意味着在同一个目录下不能有嵌套的或者多个软件包存在
cd ~/workspacepath/src
catkin_create_pkg firstpkg std_msgs rospy roscpp 
#使用catkin_create_pkg命令创建一个名为firstpkg的新软件包,这个软件包依赖于std_msgs、roscpp和rospy 
#(catkin_create_pkg <package_name> [depend1] [depend2] [depend3])

cd ~/workspacepath
catkin_make
. ~/workspacepath/devel/setup. Bash
#将这个工作空间添加到ROS环境中,需要source生成的配置文件
rospack depends1 firstpkg
#使用rospack命令工具来查看一级依赖包
roscd firstpkg
cat package.xml
# rospack列出在运行catkin_create_pkg命令时作为参数的依赖包,这些依赖关系存储在package.xml文件中。

package.xml的内部结构

# description标签
<description>The beginner_tutorials package</description>
# maintainer标签
<!-- One maintainer tag required, multiple allowed, one person per tag --> 
<!-- Example:  -->
<!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
<maintainer email="user@todo.todo">user</maintainer>
# license标签
<license>BSD</license>
<!-- One license tag required, multiple allowed, one license per tag -->
<!-- Commonly used license strings: -->
<!--   BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
<license>TODO</license>
# 依赖项标签
<!-- The *_depend tags are used to specify dependencies -->
<!-- Dependencies can be catkin packages or system dependencies -->
<!-- Examples: -->
<!-- Use build_depend for packages you need at compile time: -->
<!--   <build_depend>genmsg</build_depend> -->
<!-- Use buildtool_depend for build tool packages: -->
<!--   <buildtool_depend>catkin</buildtool_depend> -->
<!-- Use exec_depend for packages you need at runtime: -->
<!--   <exec_depend>python-yaml</exec_depend> -->
<!-- Use test_depend for packages you need only for testing: -->
<!--   <test_depend>gtest</test_depend> -->
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
# 除了catkin中默认提供的buildtool_depend,所有我们列出的依赖包都已经被添加到build_depend标签中。在本例中,因为在编译和运行时都需要用到所有指定的依赖包,因此还要将每一个依赖包分别添加到run_depend标签中:
<buildtool_depend>catkin</buildtool_depend>

<build_depend>roscpp</build_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>

<exec_depend>roscpp</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>std_msgs</exec_depend>
# 最终的样子
<?xml version="1.0"?>
<package format="2">
  <name>beginner_tutorials</name>
  <version>0.1.0</version>
  <description>The beginner_tutorials package</description>

  <maintainer email="you@yourdomain.tld">Your Name</maintainer>
  <license>BSD</license>
  <url type="website">http://wiki.ros.org/beginner_tutorials</url>
  <author email="you@yourdomain.tld">Jane Doe</author>

  <buildtool_depend>catkin</buildtool_depend>

  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>

  <exec_depend>roscpp</exec_depend>
  <exec_depend>rospy</exec_depend>
  <exec_depend>std_msgs</exec_depend>

</package>

构建catkin软件包

cd ~/workspacepath
catkin_make

和CMake操作差不多
到此,catkin软件包创建完毕

posted @ 2023-11-04 11:14  不想要名字  阅读(59)  评论(0编辑  收藏  举报