ROS与Python入门教程-制作Makefile文件
来源:互联网 发布:熔炉的真实事件 知乎 编辑:程序博客网 时间:2024/06/04 20:02
ROS与Python入门教程-制作Makefile文件
说明
- 介绍如果制作Makefile文件
介绍
这两个关于构建包的文件(CMakeLists.txt,Makefile)很简单,但提供非常重要的功能:
- 自动生成message和service代码
- 运行测试
测试功能非常重要,因为它可以测试你的包和相关依赖的包(rospack pkg test)
使用catkin, 你只需要一个CMakefile,它在你的build目录可以生成Makefile文件
创建包
- 在catkin的工作空间,创建新包:
$ cd ~/catkin_ws/src$ catkin_create_pkg my_pkg message_generation rospy
上面命令创建my_pkg,它依赖rospy包和message_generation包。
message_generation包可以定义message(消息)和service(服务)。
在package.xml文件,需包含:
<buildtool_depend>catkin</buildtool_depend>
- 在CMakeLists.txt文件,最少包含:
cmake_minimum_required(VERSION 2.8.3)project(my_pkg)find_package(catkin REQUIRED COMPONENTS message_generation rospy ...)catkin_package()
添加message和service
- 添加message或service 需要更改 package.xml and CMakeLists.txt文件
- 在package.xml文件,添加:
<build_depend>message_generation</build_depend>
- 在CMakelists.txt文件, 添加:
cmake_minimum_required(VERSION 2.8.3)project(my_pkg)find_package(catkin REQUIRED COMPONENTS message_generation rospy)add_message_files( FILES # e.g. Floats.msg HeaderString.msg)add_service_files( DIRECTORY srv FILES AddTwoInts.srv BadTwoInts.srv)## Generate services in the 'srv' folder# add_service_files(# FILES # e.g. Floats.srv HeaderString.srv#)## Generate added messages and services with any dependenciesgenerate_messages()catkin_package( CATKIN_DEPENDS message_runtime)
安装脚本和导出模块
- 使用catkin,ROS包有一个安装目标。这使得其他软件包管理器自动创建安装包比apt-get容易得多,也适用于MacOS,拱,BSD,窗户,等。
- 开发者的责任就是描述需要安装什么,如果在你的源代码树上的每一个文件都安装在其他人的电脑上,这样不是十分好。
- 所以对于Python项目,我想安装脚本和python模块在其他的电脑上作为库来使用(其他资源目前还没有支持在setup.py声明,可以使用CMakeLists.txt代替)
- 在教程里,创建一个作为例子的Python包:
$ cd ~/catkin_ws/src/my_pkg # new catkin package, in the workspace$ mkdir bin$ mkdir src$ mkdir src/tutorial_package$ touch src/tutorial_package/__init__.py
- 这里定义一个python包,叫tutorial_package。通常定义一个名称应该跟catkin包相同名称(如my_pkg),为了避免冲突,我们命名为不一样的名称,这样容易辨别。
- 在my_pkg,新建src/tutorial_package/hello.py文件
def say(name): print('Hello ' + name)
- 再创建bin/hello文件:
#! /usr/bin/env pythonimport tutorial_package.helloif __name__ == '__main__': tutorial_package.hello.say('my friend!')
- 设置可执行
$ chmod u+x bin/hello
- 如果尝试执行,会报错
$ bin/hello Traceback (most recent call last): File "bin/hello", line 3, in <module> import tutorial_package.helloImportError: No module named tutorial_package.hello
- 解决1:更改 PYTHONPATH,但只能在你本地执行
- 解决2:如果要普遍适用,就要定义一个安装程序,移动文件到PYTHONPATH。
- 对于python包和脚本,catkin提供cmake macro来提取来自setup.py的相关信息。
- 在my_pkg根目录下创建setup.py,内容如下:
## ! DO NOT MANUALLY INVOKE THIS setup.py, USE CATKIN INSTEADfrom distutils.core import setupfrom catkin_pkg.python_setup import generate_distutils_setup# fetch values from package.xmlsetup_args = generate_distutils_setup( packages=['tutorial_package'], package_dir={'': 'src'},)setup(**setup_args)
- 记住: setup.py是catkin使用的,而不是用户调用。catkin将确保setup.py文件安装到正确的位置。如果你手动调用setup.py,你可能会破坏你的ROS安装。
- 第一行,使用distutils (不推荐setuptools,因为它会在src生成文件)
- 使用generate_distutils_setup函数读取package.xml文件的值,同时也执行一些转换,例如漂亮地列出作者和维护者。
- 所有我们需要的不在package.xml的信息,如:
- 想要安装的脚本名称
- python包的名称
- 那里可以找到这些包
- python包的依赖
- 相比那些在package.xml使用的,以上的会有不同的名称,需要单独列出。
- 为了catkin能使用到setup.py, 需要去掉在CMakeLists.txt文件注释:
## Uncomment if the package has a setup.pycatkin_python_setup()
- 最后,如果用户安装你的包,你需要修改CMakeLists.txt这一行:
catkin_install_python(PROGRAMS bin/hello DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
- 编译包
$ cd ~/catkin_ws$ catkin_make
- 让环境包含新的devel空间
$ . devel/setup.bash
- 现在你的脚本和模块可通过rosrun来运行,其他用户安装你的包,也同样有效。
$ rosrun my_pkg hello Hello my friend!
在beginner_tutorials包里测试
- 在beginner_tutorials包,新建bin,src,src/tutorial_package目录,新建init.py
$ roscd beginner_tutorials$ mkdir bin$ mkdir src$ mkdir src/tutorial_package$ touch src/tutorial_package/__init__.py$ chmod +x src/tutorial_package/__init__.py
- 和src/tutorial_package/hello.py文件
$ touch src/tutorial_package/hello.py$ chmod +x src/tutorial_package/hello.py
- 手工输入如下代码:
def say(name): print('Hello' + name)
- 创建bin/hello文件
$ roscd beginner_tutorials/bin$ touch hello$ chmod +x hello$ rosed beginner_tutorials hello
- 手工输入代码:
#! /usr/bin/env pythonimport tutorial_package.helloif __name__ == '__main__': tutorial_package.hello.say('my friend!')
- 在beginner_tutorials目录下,新建setup.py
$ roscd beginner_tutorials$ touch setup.py$ chmod +x setup.py$ rosed beginner_tutorials setup.py
- 手工输入代码:
## ! DO NOT MANUALLY INVOKE THIS setup.py, USE CATKIN INSTEADfrom distutils.core import setupfrom catkin_pkg.python_setup import generate_distutils_setup# fetch values from package.xmlsetup_args = generate_distutils_setup( packages=['tutorial_package'], package_dir={'': 'src'},)setup(**setup_args)
- 在CMakeLists.txt文件找到下面行,并去掉注释。让catkin使用setup.py
## Uncomment if the package has a setup.pycatkin_python_setup()
- 在CMakeLists.txt文件找到下面行,并去掉注释。让用户安装到正确目录:
catkin_install_python(PROGRAMS bin/helloDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
- 编译代码
$ cd ~/catkin_ws$ catkin_make
- 让环境识别
$ . devel/setup.bash
- 测试调用
$ rosrun beginner_tutorials hello Hello my friend!
阅读全文
0 0
- ROS与Python入门教程-制作Makefile文件
- ROS与Python入门教程-构建Catkin包
- ros 编译 Python 文件
- Makefile文件制作
- makefile文件的制作
- makefile文件的制作
- 简单制作Makefile 文件
- makefile文件制作
- ROS与Python入门教程-写简单发布器和订阅器(2)
- ROS与python学习
- Linux C 2.制作Makefile文件与使用make命令
- python egg 文件安装与制作
- ros与深度相机入门教程-在ROS使用奥比中光Orbbec Astra Pro
- 用autotools制作Makefile 和configure文件。
- Linux 环境下 Makefile 文件制作
- Linux 环境下 Makefile 文件制作浅谈
- Linux 环境下 Makefile 文件制作浅谈
- Linux环境下Makefile文件制作浅谈
- android 修改应用图标简例
- 数据类型和 Java 基础面试问题(一)
- Linux Unit16--系统的分区
- HDU3966 Aragorn's Story(树链剖分+线段树)
- phandle
- ROS与Python入门教程-制作Makefile文件
- Android 判断当前系统语言
- Ubuntu 16.04中安装Sublime Text 3并安装Package Control插件
- UNIX网络编程(unp)源码下载和编译
- 洛谷 2898 [USACO08JAN]haybale猜测Haybale Guessing
- 第八周 【项目8-稀疏矩阵的三元组表示的实现及应用】
- 数据库表索引创建脚本
- 判断网络状态
- 第十周项目1-验证算法(1)