介绍
ROS的功能功能包可以用C++来写,也可以用python来写,有的功能通过python实现比较简单,所以就通过python来编写功能包,这里记录一下我编写python版的ROS功能包的方法
参考博客:原文链接
创建功能包
在自己的工作空间下面,创建功能包:
cd catkin_ws/src
catkin_create_pkg pc_connect rospy
cd pc_connect
touch setup.py
mkdir -p src/connect
touch setup.py
cd src/connect
touch __init__.py
touch pc_pub.py pc_sub.py connect.py
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
我这里就着我做的网路通信上位机这个功能来举例子了,ROS功能包叫pc_connect,在这个功能包下面,其中有订阅ROS话题,有发布ROS话题,有网络通信这几个功能,我把这几个功能模块封装成一个python包,叫做connect
配置__init__.py
在__init__.py中加入:
__all__=['pc_pub.py' 'pc_sub.py' 'connect.py']
- 1
这样其他外部模块就可以通过from pc_connect import*来导入这个python包了
配置ROS编译环境
修改pc_connect功能包的CMakeList.txt文件:
cmake_minimum_required(VERSION 3.0.2)
project(py_pkg_1)
find_package(catkin REQUIRED COMPONENTS
rospy
)
catkin_python_setup()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
这里其实就是将功能包创建时生成的默认文件中catkin_python_setup()取消注释而已。这一行是告诉catkin编译工具这里面有python的包要安装,这样catkin在编译时就会在这个功能包的根目录下自动寻找setup.py文件并执行了。
编辑setup.py
setup.py文件用于将python包安装到ROS环境,这个setup.py经过了catkin的一层封装变得更为简洁了,其实它的底层调用的是python的distutils包实现安装的。关于使用distutils进行python包的安装及发布可以参考这篇文章
from distutils.core import setup
from catkin_pkg.python_setup import generate_distutils_setup
d = generate_distutils_setup(
packages=['connect'],
package_dir={'': 'src'}
)
setup(**d)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
packages代表你想要安装的python包
package_dir描述的是python包的存放路径,这个必须得写否则你的python包只能放在setup.py的同级目录
setup(**d)其实就是调用distutils包的setup模块
编译工作空间
catkin_make -j8
- 1
建一个可执行的python文件,导入模块
在其中加入:
#!/usr/bin/env python
# coding=utf-8
# -*- coding: utf-8 -*-
import rospy
from pc_connect import*
- 1
- 2
- 3
- 4
- 5
- 6
这样这个pytho程序就可以使用connect中的功能功能了