您正在阅读的是旧版本但仍受支持的 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.自旋直到未来完成(网站, 呼吸)