干货在最后或者另一篇博客https://mp.csdn.net/postedit/102992022
小白开始学习,来自官网或者他人博客欢迎指正。
0.安装ROS和配置ROS环境
安装ROS通过官网,如果新手可以考虑安装完整的,免得以后需要继续安装。
sudo apt-get install ros-kinetic-desktop-full
如果从apt这样的包管理器安装ROS,那么这些包将不能被写访问,也不应该被用户编辑。当从源代码使用ROS包或创建新的ROS包时,您应该始终在您有权访问的目录中工作,比如您的主文件夹。
管理环境:
在ROS的安装过程中,将看到提示从几个setup.*sh文件中选择一个作为源,甚至将此“源”添加到shell启动脚本中。这是必需的,因为ROS依赖于使用shell环境组合空间的概念。这使得针对不同版本的ROS或针对不同的包集进行开发变得更加容易。
如果在查找或使用ROS包时遇到问题,确保环境设置正确。检查的一个好方法是确保设置了诸如ROS_ROOT和ROS_PACKAGE_PATH之类的环境变量:
$ printenv | grep ROS
输出:
ROS_ROOT=/opt/ros/kinetic/share/ros
ROS_PACKAGE_PATH=/home/chen/mycatkin/src:/home/chen/px4_ws/src:/home/chen/catkin_ws/src/mavlink:/home/chen/catkin_ws/src/mavros/libmavconn:/home/chen/catkin_ws/src/mavros/mavros_msgs:/home/chen/catkin_ws/src/mavros/mavros:/home/chen/catkin_ws/src/mavros/mavros_extras:/home/chen/catkin_ws/src/mavros/test_mavros:/opt/ros/kinetic/share
ROS_MASTER_URI=http://localhost:11311
ROS_VERSION=1
ROSLISP_PACKAGE_DIRECTORIES=/home/chen/mycatkin/devel/share/common-lisp:/home/chen/px4_ws/devel/share/common-lisp:/home/chen/catkin_ws/devel/share/common-lisp
ROS_DISTRO=kinetic
ROS_ETC_DIR=/opt/ros/kinetic/etc/ros
如果没有显示,需要source~一下.bash,但只能在该shell窗口访问ROS命令。
$ source /opt/ros/kinetic/setup.bash
或者将该行加入系统.bashrc,可以不必在每个shell窗口中使用source~
1.ROS系统命令学习(来自:http://blog.sina.com.cn/s/blog_661159d50100och4.html)
参考ROS官网:http://www.ros.org/wiki/ROS/Tutorials/NavigatingTheFilesystem
2.创建新的工作空间(kinetic)
$ source /opt/ros/kinetic/setup.bash //配置环境。假设已经安装catkin,并且是在kinetic中通过apt-get的形式安装的catkin
创建工作空间:
$ mkdir -p ~/mycatkin/src //这里将新创建的工作空间命名为mycatkin $ cd ~/catkin_ws/ $ catkin_make //编译工作空间,自动生成build和devel目录,并在src目录中生成一个CMakelists.txt。在devel中有许多setup.*bash文件,source这些文件可以将此工作空间覆盖在环境之上。
$ source devel/setup.bash //在新创建的工作空间目录下执行该操作,确保安装脚本正确地覆盖该工作空间,确保ROS_PACKAGE_PATH环境变量包含您所在的目录。
$ echo $ROS_PACKAGE_PATH /home/youruser/catkin_ws/src:/opt/ros/kinetic/share
echo $ROS_PACKAGE_PATH /home/chen/mycatkin/src:/opt/ros/kinetic/share
接下来将继续如何使用工作空间。
3.创建简单的ROS package
The solution is before to do the command:
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
We need to be located in : ~/catkin_ws/src
For some reason I was in ~/catkin_ws and thought it was the right place to create the Package.
前面我们用roscreate-pkg建立package,这里我们根据系统关联来编译这些packages.
以下内容翻译自官网:https://wiki.ros.org/ROS/Tutorials/BuildingPackages
catkin_make是一个命令行工具,它为标准的catkin工作流增加了一些便利。您可以想象catkin_make将对cmake的调用与标准cmake工作流中的make结合起来:
# In a catkin workspace $ catkin_make [make_targets] [-DCMAKE_VARIABLES=...]
对于不熟悉标准CMake工作流程的人,可以将其分解如下:
注意:如果您运行以下命令,它将不工作,因为这只是一个例子,如何CMake一般工作。
# In a CMake project $ mkdir build $ cd build $ cmake .. $ make $ make install # (optionally)
此过程针对每个CMake项目运行。相反,catkin项目可以在工作区中一起构建。在工作空间中构建0到多个catkin包遵循以下工作流程:
# In a catkin workspace $ catkin_make $ catkin_make install # (optionally)
以上命令将构建在src文件夹中找到的所有catkin项目。如果你的源代码在不同的地方,如my_src,然后你会调用catkin_make这样:
注意:如果您运行以下命令,它将无法工作,因为目录my_src不存在。
# In a catkin workspace $ catkin_make --source my_src $ catkin_make install --source my_src # (optionally)
For more advanced uses of catkin_make see the documentation: catkin/commands/catkin_make
建立自己的package
如果您正在使用此页面构建自己的代码,请参阅后面的教程(c++)/(Python),因为您可能需要修改CMakeLists.txt。
你应该已经有了一个catkin工作空间和一个名为beginner_tutorials的新catkin包,它来自于前面的教程,创建了一个包。如果你还没有进入catkin的工作空间,请进入src文件夹:
#$ cd ~/catkin_ws/ $ cd ~/mycatkin/ //这是我自己创建的工作空间名字 $ ls src
显示:
beginner_tutorials CMakeLists.txt
您应该看到有一个名为beginner_tutorials的文件夹,它是您在前面的教程中使用catkin_create_pkg创建的。我们现在可以使用catkin_make来构建这个包:
$ catkin_make //在工作空间目录下,会自动对src目录下编译
编译结果不报错即成功:
chen@chen:~/mycatkin$ catkin_make
Base path: /home/chen/mycatkin
Source space: /home/chen/mycatkin/src
Build space: /home/chen/mycatkin/build
Devel space: /home/chen/mycatkin/devel
Install space: /home/chen/mycatkin/install
####
#### Running command: "cmake /home/chen/mycatkin/src -DCATKIN_DEVEL_PREFIX=/home/chen/mycatkin/devel -DCMAKE_INSTALL_PREFIX=/home/chen/mycatkin/install -G Unix Makefiles" in "/home/chen/mycatkin/build"
####
-- Using CATKIN_DEVEL_PREFIX: /home/chen/mycatkin/devel
-- Using CMAKE_PREFIX_PATH: /home/chen/mycatkin/devel;/home/chen/px4_ws/devel;/home/chen/catkin_ws/devel;/opt/ros/kinetic
-- This workspace overlays: /home/chen/mycatkin/devel;/home/chen/px4_ws/devel;/home/chen/catkin_ws/devel;/opt/ros/kinetic
-- Using PYTHON_EXECUTABLE: /usr/bin/python
-- Using Debian Python package layout
-- Using empy: /usr/bin/empy
-- Using CATKIN_ENABLE_TESTING: ON
-- Call enable_testing()
-- Using CATKIN_TEST_RESULTS_DIR: /home/chen/mycatkin/build/test_results
-- Found gmock sources under '/usr/src/gmock': gmock will be built
-- Found gtest sources under '/usr/src/gmock': gtests will be built
-- Using Python nosetests: /usr/bin/nosetests-2.7
-- catkin 0.7.18
-- BUILD_SHARED_LIBS is on
-- BUILD_SHARED_LIBS is on
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~ traversing 1 packages in topological order:
-- ~~ - beginner_tutorials
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- +++ processing catkin package: 'beginner_tutorials'
-- ==> add_subdirectory(beginner_tutorials)
-- Configuring done
-- Generating done
-- Build files have been written to: /home/chen/mycatkin/build
####
#### Running command: "make -j4 -l4" in "/home/chen/mycatkin/build"
####
注意,catkin_make首先显示它为每个“空间”使用的路径。这些空间在REP128和关于catkin工作空间的wiki: catkin/workspaces文档中进行了描述。需要注意的重要一点是,由于这些默认值,在catkin工作区中创建了几个文件夹。看看ls:
chen@chen:~/mycatkin$ ls
build devel src
build文件夹是构建空间的默认位置,是调用cmake和make来配置和构建包的地方。devel文件夹是devel空间的默认位置,在安装包之前,devel空间是您的可执行文件和库所在的位置。
现在您已经构建了ROS包,让我们进一步讨论ROS节点。
5.创建ROS msg 和 srv
参考网址:http://www.ros.org/wiki/ROS/Tutorials/CreatingMsgAndSrv
msg文件包括以上几种类型:
上面的示例.msg文件只包含一行。当然,您可以通过添加多个元素来创建更复杂的文件,每行一个元素,如下所示:
string first_name string last_name uint8 age uint32 score
不过,还有一步。我们需要确保msg文件被转换成c++、Python和其他语言的源代码:
打开package.xml,并确保这两行是在它里面和未注释:
message_generation message_runtime
注意,在构建时,我们需要“message_generation”,而在运行时,我们只需要“message_runtime”。
在您喜欢的文本编辑器中打开CMakeLists.txt(前一篇教程中的rosed是一个不错的选择)。
将message_generation依赖项添加到find_package调用中,该调用已经存在于您的CMakeLists.txt中,以便您可以生成消息。您可以通过简单地将message_generation添加到组件列表中来实现这一点,如下所示:
# Do not just add this to your CMakeLists.txt, modify the existing text to add message_generation before the closing parenthesis 不要只是将其添加到您的CMakeLists.txt中,修改现有的文本,在右括号之前添加message_generation find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation )
您可能会注意到,有时即使没有使用所有依赖项调用find_package,项目构建也很好。这是因为catkin将您的所有项目组合到一个项目中,所以如果前面的项目调用find_package,则您的项目将配置相同的值。但是忘记调用意味着您的项目在单独构建时很容易中断。-->啥子意思?
还要确保导出消息运行时依赖项。
catkin_package( ... CATKIN_DEPENDS message_runtime ... ...)
找到以下代码块:
# add_message_files( # FILES # Message1.msg # Message2.msg # )
通过删除#符号取消注释,然后用your .msg替换Message*.msg文件,这样它看起来像这样:
add_message_files( FILES Num.msg )
通过手动添加your.msg文件,我们可以确保CMake知道在您添加其他.msg文件之后何时需要重新配置项目。
现在我们必须确保调用了generate_messages()函数。
对于ROS Hydro及以后的版本,您需要取消注释这些行:
# generate_messages( # DEPENDENCIES # std_msgs # )
像这样:
generate_messages( DEPENDENCIES std_msgs )
现在可以从msg定义生成源文件了。如果您现在想这样做,请跳过下面的小节,转到msg和srv的常用步骤。
使用rosmsg
这就是创建.msg所需要做的全部工作。让我们确保ROS可以使用rosmsg show命令查看它。
$ rosmsg show [message type]
例如:
$ rosmsg show beginner_tutorials/Num
输出:
int64 num
在前面的例子中,消息类型由两部分组成:
beginner_tutorials——定义消息的包
Num——msg Num的名称。
如果您不记得.msg在哪个包中,您可以省略包名。试一试:
$ rosmsg show Num
输出:
[beginner_tutorials/Num]:
int64 num
使用 srv
让我们使用我们刚刚创建的包来创建一个srv:
$ roscd beginner_tutorials $ mkdir srv
我们将从另一个包中复制一个现有的srv定义,而不是手工创建一个新的srv定义。
为此,roscp是一个有用的命令行工具,用于将文件从一个包复制到另一个包。
$ roscp [package_name] [file_to_copy_path] [copy_path]
现在我们可以从rospy_tutorials包复制一个服务:
$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
不过,还有一步。我们需要确保srv文件被转换成c++、Python和其他语言的源代码。
除非你已经这样做了,否则打开package.xml,并确保这两行是在它和未注释:
message_generation message_runtime
和前面一样,注意在构建时,我们需要“message_generation”,而在运行时,我们只需要“message_runtime”。
除非您已经在前面的步骤中为消息做了这样的操作,否则添加message_generation依赖项来在CMakeLists.txt中生成消息:
# Do not just add this line to your CMakeLists.txt, modify the existing line find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation )
(尽管名为message_generation,但它同时适用于msg和srv。)
对于服务和消息,您需要对package.xml进行相同的更改,因此请查看上面的附加依赖项。(修正一下,这里是在CMakelists.txt中更改的)
删除#来取消以下行的注释:
# add_service_files( # FILES # Service1.srv # Service2.srv # )
现在可以从服务定义生成源文件了。如果您现在想这样做,请跳过下面的小节,转到msg和srv的常用步骤。
使用 rossrv
这就是创建srv所需要做的全部工作。让我们确保ROS可以使用rossrv show命令查看它。
$ rossrv show
例如:
$ rossrv show beginner_tutorials/AddTwoInts
输出:
int64 a
int64 b
---
int64 sum
与rosmsg类似,您可以找到这样的服务文件,而不需要指定包的名称:
$ rossrv show AddTwoInts [beginner_tutorials/AddTwoInts]: int64 a int64 b --- int64 sum [rospy_tutorials/AddTwoInts]: int64 a int64 b --- int64 sum
这里显示了两个服务。第一个是您刚刚在beginner_tutorials包中创建的,第二个是rospy_tutorials包中预先存在的。
msg和srv的常用步骤
除非您在前面的步骤中已经这样做了,否则更改CMakeLists.txt。:
# generate_messages( # DEPENDENCIES # # std_msgs # Or other packages containing msgs # )
取消注释并添加您所依赖的包含消息使用的.msg文件的任何包(在本例中为std_msgs),使它看起来像这样:
generate_messages( DEPENDENCIES std_msgs )
现在我们已经做了一些新的消息,我们需要再次使我们的包:
# In your catkin workspace $ roscd beginner_tutorials $ cd ../.. $ catkin_make install $ cd -
msg目录中的任何.msg文件都将生成用于所有受支持语言的代码。c++消息头文件将在~/catkin_ws/devel/include/beginner_tutorials/中生成。Python脚本将在~/catkin_ws/devel/lib/python2.7/dist-packages/beginner_tutorials/msg中创建。lisp文件出现在~/catkin_ws/devel/share/ commonlisp /ros/beginner_tutorials/msg/中。
类似地,srv目录中的任何.srv文件都将以支持的语言生成代码。对于c++,这将在与消息头文件相同的目录中生成头文件。对于Python和Lisp,在“msg”文件夹旁边会有一个“srv”文件夹。
消息格式的完整规范可从消息描述语言页面获得。
如果要构建使用新消息的c++节点,还需要声明节点和消息之间的依赖关系,如catkin msg/srv构建文档中所述。
寻求帮助
我们已经看到了不少ROS工具。跟踪每个命令需要的参数可能比较困难。幸运的是,大多数ROS工具都提供了它们自己的帮助。
$ rosmsg -h
可以看到一个列表不同的rosmsg子命令
Commands: rosmsg show Show message description rosmsg list List all messages rosmsg md5 Display message md5sum rosmsg package List messages in a package rosmsg packages List packages that contain messages
也可以从子命令中获得帮助:
$ rosmsg show -h
这显示了rosmsg show需要的参数:
Usage: rosmsg show [options]Options: -h, --help show this help message and exit -r, --raw show raw message text, including comments
回顾
1. 一些常用命令组合:
rospack = ros+pack(age): 提供与ros包相关的信息
roscd = ros+cd: 将目录更改为ros包或堆栈
rosls = ros+ls: 列出ros包中的文件
roscp = ros+cp: 从ros包中复制文件
rosmsg = ros+msg: 提供与ros消息定义相关的信息
rossrv = ros+srv:提供与ros服务定义相关的信息
catkin_make:生成(编译)一个ROS包
rosmake = ros+make:编译ros包(如果不使用catkin工作区)
2.这篇主要讲如何创建新的工作空间/mycatkin,在工作空间建立自己的ROS包/beginner_tutorials,然后在包/beginner_tutorials里定义消息msg和服务srv。
(1)创建工作空间:
$ source /opt/ros/kinetic/setup.bash //配置环境。假设已经安装catkin,并且是在kinetic中通过apt-get的形式安装的catkin
$ mkdir -p ~/mycatkin/src //这里将新创建的工作空间命名为mycatkin $ cd ~/catkin_ws/ $ catkin_make //编译工作空间,这里可能涉及到源码放在不同目录下,如my_src,如何编译,可以往上翻 //编译工作空间,自动生成build和devel目录,并在src目录中生成一个CMakelists.txt。在devel中有许多setup.*bash文件,source这些文件可以将此工作空间覆盖在环境之上。
(2)将工作空间加入ROS环境中
$ source devel/setup.bash
//在新创建的工作空间目录下执行该操作,确保安装脚本正确地覆盖该工作空间,确保ROS_PACKAGE_PATH环境变量包含 您所在的目录。(或者直接在.bashrc中写入配置路径,不用每次开一个新终端都需要手动输入)
(3)建立自己的ROS包
再啰嗦一下:ROS的软件以Package的方式组织起来。package包含节点(Node)、ROS依赖库、数据套、配置文件、第三方软件、或者任何其他逻辑构成。package的目标是提供一种易于使用的结构以便于软件的重复使用。总得来说,ROS的package遵从Goldilocks原则:短小精干。所有的ROS packages包括很多类似的文件:manifests, CMakeLists.txt, mainpage.dox, 和Makefiles.
a. 使用工具,例如roscreate-pkg(也可以使用其他工具,以后在慢慢研究)
$ roscreate-pkg [package_name]
The solution is before to do the command:
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
We need to be located in : ~/catkin_ws/src
For some reason I was in ~/catkin_ws and thought it was the right place to create the Package.
前面用roscreate-pkg建立package,这里我们根据系统关联来编译这些packages.
catkin_make是一个命令行工具,它为标准的catkin工作流增加了一些便利。您可以想象catkin_make将对cmake的调用与标准cmake工作流中的make结合起来:
# In a catkin workspace $ catkin_make [make_targets] [-DCMAKE_VARIABLES=...]
以上命令将构建在src文件夹中找到的所有catkin项目。如果你的源代码在不同的地方,如my_src,然后你会调用catkin_make这样:
注意:如果您运行以下命令,它将无法工作,因为目录my_src不存在。
# In a catkin workspace $ catkin_make --source my_src $ catkin_make install --source my_src # (optionally)
e. 查看建立的package
如果您正在使用此页面构建自己的代码,请参阅后面的教程(c++)/(Python),因为您可能需要修改CMakeLists.txt。
你应该已经有了一个catkin工作空间和一个名为beginner_tutorials的新catkin包,它来自于前面的教程,创建了一个包。如果你还没有进入catkin的工作空间,请进入src文件夹:
#$ cd ~/catkin_ws/ $ cd ~/mycatkin/ //这是我自己创建的工作空间名字 $ ls src
显示:
beginner_tutorials CMakeLists.txt
(4). 在自己的ROS包中创建ROS msg 和 srv
参考网址:http://www.ros.org/wiki/ROS/Tutorials/CreatingMsgAndSrv
msg文件包括以上几种类型:
上面的示例.msg文件只包含一行。当然,您可以通过添加多个元素来创建更复杂的文件,每行一个元素,如下所示:
string first_name string last_name uint8 age uint32 score
不过,还有一步。我们需要确保msg文件被转换成c++、Python和其他语言的源代码:(这里也可以在创建完服务srv后再添加也可以)
打开package.xml,并确保这两行是在它里面和未注释:
message_generation message_runtime
注意,在构建时,我们需要“message_generation”,而在运行时,我们只需要“message_runtime”。
将message_generation依赖项添加到find_package调用中,该调用已经存在于您的CMakeLists.txt中,以便您可以生成消息。您可以通过简单地将message_generation添加到组件列表中来实现这一点,如下所示:
# Do not just add this to your CMakeLists.txt, modify the existing text to add message_generation before the closing parenthesis 不要只是将其添加到您的CMakeLists.txt中,修改现有的文本,在右括号之前添加message_generation find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation )
您可能会注意到,有时即使没有使用所有依赖项调用find_package,项目构建也很好。这是因为catkin将您的所有项目组合到一个项目中,所以如果前面的项目调用find_package,则您的项目将配置相同的值。但是忘记调用意味着您的项目在单独构建时很容易中断。-->啥子意思?
还要确保导出消息运行时依赖项。(没找到,尴尬)
catkin_package( ... CATKIN_DEPENDS message_runtime ... ...)
找到以下代码块:(/beginner_tutorials/CMakelists.txt)
# add_message_files( # FILES # Message1.msg # Message2.msg # )
通过删除#符号取消注释,然后用your .msg替换Message*.msg文件,这样它看起来像这样:
add_message_files( FILES Num.msg )
通过手动添加your.msg文件,我们可以确保CMake知道在您添加其他.msg文件之后何时需要重新配置项目。
现在我们必须确保调用了generate_messages()函数。
对于ROS Hydro及以后的版本,您需要取消注释这些行:
# generate_messages( # DEPENDENCIES # std_msgs # )
像这样:
generate_messages( DEPENDENCIES std_msgs )
现在可以从msg定义生成源文件了。
使用rosmsg
这就是创建.msg所需要做的全部工作。让我们确保ROS可以使用rosmsg show命令查看它。
$ rosmsg show [message type]
例如:
$ rosmsg show beginner_tutorials/Num
输出:
int64 num
在前面的例子中,消息类型由两部分组成:
beginner_tutorials——定义消息的包
Num——msg Num的名称。
如果您不记得.msg在哪个包中,您可以省略包名。试一试:
$ rosmsg show Num
输出:
[beginner_tutorials/Num]:
int64 num
使用 srv
让我们使用我们刚刚创建的包来创建一个srv:
$ roscd beginner_tutorials $ mkdir srv
我们将从另一个包中复制一个现有的srv定义,而不是手工创建一个新的srv定义。
为此,roscp是一个有用的命令行工具,用于将文件从一个包复制到另一个包。
$ roscp [package_name] [file_to_copy_path] [copy_path]
现在我们可以从rospy_tutorials包复制一个服务:
$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
不过,还有一步。我们需要确保srv文件被转换成c++、Python和其他语言的源代码。(之前添加过不用重复添加)
除非你已经这样做了,否则打开package.xml,并确保这两行是在它和未注释:
message_generation message_runtime
和前面一样,注意在构建时,我们需要“message_generation”,而在运行时,我们只需要“message_runtime”。
除非您已经在前面的步骤中为消息做了这样的操作,否则添加message_generation依赖项来在CMakeLists.txt中生成消息:(前面操作过就不用再重复)
# Do not just add this line to your CMakeLists.txt, modify the existing line find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation )
(尽管名为message_generation,但它同时适用于msg和srv。)
对于服务和消息,您需要对package.xml进行相同的更改,因此请查看上面的附加依赖项。(修正一下,这里是在CMakelists.txt中更改的)
删除#来取消以下行的注释:
# add_service_files( # FILES # Service1.srv # Service2.srv # )
现在可以从服务定义生成源文件了。如果您现在想这样做,请跳过下面的小节,转到msg和srv的常用步骤。
使用(查看) rossrv
以上完成创建srv所需要做的全部工作。让我们确保ROS可以使用rossrv show命令查看它。
$ rossrv show
例如:
$ rossrv show beginner_tutorials/AddTwoInts
输出:
int64 a
int64 b
---
int64 sum
与rosmsg类似,您可以找到这样的服务文件,而不需要指定包的名称:
$ rossrv show AddTwoInts [beginner_tutorials/AddTwoInts]: int64 a int64 b --- int64 sum [rospy_tutorials/AddTwoInts]: int64 a int64 b --- int64 sum
这里显示了两个服务。第一个是您刚刚在beginner_tutorials包中创建的,第二个是rospy_tutorials包中预先存在的。
msg和srv的常用步骤
除非您在前面的步骤中已经这样做了,否则更改CMakeLists.txt。:
# generate_messages( # DEPENDENCIES # # std_msgs # Or other packages containing msgs # )
取消注释并添加您所依赖的包含消息使用的.msg文件的任何包(在本例中为std_msgs),使它看起来像这样:
generate_messages( DEPENDENCIES std_msgs )
现在我们已经做了一些新的消息,我们需要再次使我们的包:
# In your catkin workspace $ roscd beginner_tutorials $ cd ../.. $ catkin_make install $ cd -
msg目录中的任何.msg文件都将生成用于所有受支持语言的代码。c++消息头文件将在~/catkin_ws/devel/include/beginner_tutorials/中生成。Python脚本将在~/catkin_ws/devel/lib/python2.7/dist-packages/beginner_tutorials/msg中创建。lisp文件出现在~/catkin_ws/devel/share/ commonlisp /ros/beginner_tutorials/msg/中。
类似地,srv目录中的任何.srv文件都将以支持的语言生成代码。对于c++,这将在与消息头文件相同的目录中生成头文件。对于Python和Lisp,在“msg”文件夹旁边会有一个“srv”文件夹。
消息格式的完整规范可从消息描述语言页面获得。
如果要构建使用新消息的c++节点,还需要声明节点和消息之间的依赖关系,如catkin msg/srv构建文档中所述。
寻求帮助
我们已经看到了不少ROS工具。跟踪每个命令需要的参数可能比较困难。幸运的是,大多数ROS工具都提供了它们自己的帮助。
$ rosmsg -h
可以看到一个列表不同的rosmsg子命令
Commands: rosmsg show Show message description rosmsg list List all messages rosmsg md5 Display message md5sum rosmsg package List messages in a package rosmsg packages List packages that contain messages
也可以从子命令中获得帮助:
$ rosmsg show -h
这显示了rosmsg show需要的参数:
Usage: rosmsg show [options]Options: -h, --help show this help message and exit -r, --raw show raw message text, including comments