您正在阅读的是旧版本但仍受支持的 ROS 2 文档。 Jazzy.

迁移 Python 软件包

构建工具

而不是使用 catkin_make, catkin_make_isolated柔荑花序 构建 ROS 2 使用命令行工具 胶管 来构建和安装一组软件包。请参见 初学者教程 开始 胶管.

构建系统

对于纯 Python 软件包,ROS 2 使用标准的 setup.py 的安装机制。

更新文件以使用 setup.py

如果 ROS 1 软件包仅使用 CMake 来调用 setup.py 文件,且不包含 Python 代码以外的任何内容(如无消息、服务等),则应在 ROS 2 中转换为纯 Python 软件包:

  • package.xml 锉刀

    <export>;
      <构建类型>;ament_python</build_type>;
    </export>;
    
  • 取下 CMakeLists.txt 文件

  • 更新 setup.py 文件是一个标准的 Python 设置脚本

ROS 2 仅支持 Python 3。虽然每个软件包都可以选择同时支持 Python 2,但如果使用其他 ROS 2 软件包提供的任何 API,就必须使用 Python 3 来调用可执行文件。

更新源代码

节点初始化

在 ROS 1 中:

蟑螂.初始节点('asdf';)

蟑螂.登录信息('创建节点';)

在 ROS 2:

rclpy.启动(参数=系统.参数)
网站 = rclpy.创建节点('asdf';)

网站.get_logger().信息('创建节点';)

ROS 参数

在 ROS 1 中:

  = 蟑螂.get_param('端口';, '/dev/ttyUSB0')
 宣称 isinstance(, 字符串), '端口参数必须是字符串';

 波特率 = 蟑螂.get_param('波特率';, 115200)
 宣称 isinstance(波特率, int), '波特率参数必须是整数';

蟑螂.日志预警('端口:'; + )

在 ROS 2:

 = 网站.declare_parameter('端口';, '/dev/ttyUSB0').价值
宣称 isinstance(, 字符串), '端口参数必须是字符串';

波特率 = 网站.declare_parameter('波特率';, 115200).价值
宣称 isinstance(波特率, int), '波特率参数必须是整数';

网站.get_logger().警示('端口:'; + )

创建出版商

在 ROS 1 中:

酒吧 = 蟑螂.出版商('唠叨';, 字符串)
# 或
酒吧 = 蟑螂.出版商('唠叨';, 字符串, 队列大小=10)

在 ROS 2:

酒吧 = 网站.创建出版商(字符串, '唠叨';, rclpy.优先权.QoSProfile())
# 或
酒吧 = 网站.创建出版商(字符串, '唠叨';, 10)

创建订阅者

在 ROS 1 中:

字幕 = 蟑螂.订阅者('唠叨';, 字符串, 回调)
# 或
字幕 = 蟑螂.订阅者('唠叨';, 字符串, 回调, 队列大小=10)

在 ROS 2:

字幕 = 网站.创建订阅(字符串, '唠叨';, 回调, rclpy.优先权.QoSProfile())
# 或
字幕 = 网站.创建订阅(字符串, '唠叨';, 回调, 10)

创建服务

在 ROS 1 中:

服务 = 蟑螂.服务('add_two_ints', 添加两个字符, add_twoo_ints_callback)

在 ROS 2:

服务 = 网站.创建服务(添加两个字符, 'add_two_ints', add_twoo_ints_callback)

创建服务客户端

在 ROS 1 中:

蟑螂.等待服务('add_two_ints')
add_twoo_ints = 蟑螂.服务代理('add_two_ints', 添加两个字符)
呼吸 = add_twoo_ints(要求)

在 ROS 2:

add_twoo_ints = 网站.创建客户端(添加两个字符, 'add_two_ints')
虽然  add_twoo_ints.等待服务(超时秒数=1.0):
    网站.get_logger().信息('服务不可用,请再次等待...';)
呼吸 = add_twoo_ints.调用同步(要求)
rclpy.自旋直到未来完成(网站, 呼吸)