基于 NVIDIA Isaac Sim 与 ROS2 的 Kaya 机器人全向运动控制
Kaya 机器人全向运动控制基于 NVIDIA Isaac Sim 仿真平台与 ROS2 框架。利用 OmniGraph 节点构建运动逻辑,结合 USD 定义物理属性。ROS2 端编写 Python 节点发布速度指令至/cmd_vel 话题,实现前进、停止、横向移动及旋转等动作序列。开发者可在此基础上集成传感器模块开发避障或自主导航应用。

Kaya 机器人全向运动控制基于 NVIDIA Isaac Sim 仿真平台与 ROS2 框架。利用 OmniGraph 节点构建运动逻辑,结合 USD 定义物理属性。ROS2 端编写 Python 节点发布速度指令至/cmd_vel 话题,实现前进、停止、横向移动及旋转等动作序列。开发者可在此基础上集成传感器模块开发避障或自主导航应用。

全向运动是现代机器人的核心能力之一,能够让机器人无需转向即可向任意方向移动,在仓储自动化、服务机器人等对精度和灵活性要求较高的场景中不可或缺。NVIDIA Kaya 机器人搭载全向驱动系统,可无缝对接 NVIDIA Isaac Sim 仿真平台与 ROS2 框架,实现高效的仿真与实机控制。
在进行 Isaac Sim 与 ROS2 的桥接前,需确保系统已正确安装适配的 ROS2 版本。
另外,需要在 Isaac Sim 中打开 ROS2 bridge:

1. 全向运动与 Kaya 机器人
全向运动机器人拥有三个自由度,分别为前进 / 后退、横向移动和旋转运动。这类机器人通常配备全向轮等特殊运动机构,无需调整自身朝向就能完成方向切换。
NVIDIA Kaya 机器人是一款小型多功能机器人,基于 Jetson Nano 平台构建,适配 AI 与机器人应用开发。它搭载 3 个全向轮组成的全向驱动系统,支持与 Isaac Sim 的无缝集成,可实现仿真与真实环境的统一部署。
2. Isaac Sim 与 ROS2 的核心协作组件
在 Isaac Sim 中,OmniGraph 是实现仿真逻辑的核心工具,其节点通信机制与 ROS2 的节点 - 话题模型类似。控制 Kaya 机器人的关键 OmniGraph 节点包括以下四类:
USD 文件则用于定义机器人的物理与视觉属性,包含轮子、传感器、执行器等关键部件的参数。OmniGraph 中的控制节点需要通过调用 USD 配置,才能实现对机器人运动的精准仿真。
这里 OmniGraph,具体我以 ActionGraph 作为实现形式,以 Isaac Sim 4.5.0 为例:

在配置 kaya 机器人时我使用了很多的官方节点,官方解释如下:

官方已经提供了大量的节点以供用户使用,节点库及介绍可见网址:OmniGraph 节点库 — Omniverse 扩展
Isaac Sim 中 Kaya 机器人的全向运动控制,是通过 OmniGraph 节点的有序连接实现的,具体流程分为四步:
ActionGraph 节点图示例:

要实现 ROS2 对 Kaya 机器人的控制,核心是编写节点程序,通过/cmd_vel 话题发布速度指令。
ROS2 编译并运行自定义功能包方法如下:
# 开启一个新的终端
cd ~/kaya_ws
# 切换到 kaya_ws 工作空间的根目录
colcon build --symlink-install
# 快速编译,适合代码修改后
source install/setup.bash
# 将编译后的工作空间'注册'到当前终端的 ROS 2 环境中
ros2 run kaya_control kaya_drive
# 启动 kaya_control 功能包中的 kaya_drive 节点(ROS 2 中'节点'是最小的可执行单元,对应一个功能模块)
其中 kaya_drive.py 代码核心功能为:循环发布预设的速度指令到/cmd_vel 话题,控制 Kaya 机器人按照固定序列完成'前进→停止→横向移动→停止→旋转→停止'的循环运动。
完整代码如下所示:
import rclpy
from rclpy.node import Node
from rclpy.logging import LoggingSeverity
from geometry_msgs.msg import Twist
class KayaControlNode(Node):
def __init__(self):
super().__init__('kaya_control_node')
# 设置日志级别为 DEBUG,确保所有调试信息都能显示
self.get_logger().set_level(LoggingSeverity.DEBUG)
self.cmd_vel_pub = self.create_publisher(Twist, '/cmd_vel', 10)
self.timer = self.create_timer(0.1, self.timer_callback) # 10Hz 更新
self.sequence_step = 0
self.sequence = [
# (linear.x, linear.y, angular.z, duration_sec)
(-0.5, 0.0, 0.0, 2.0), # 前进 2 秒
(0.0, 0.0, 0.0, 1.0), # 停止 1 秒
(0.0, 0.5, 0.0, 2.0), # 横向移动 2 秒
(0.0, 0.0, 0.0, 1.0), # 停止 1 秒
(, , , ),
(, , , ),
]
.start_time = .get_clock().now()
.get_logger().info()
.get_logger().info()
():
.get_logger().debug()
.sequence_step >= (.sequence):
.sequence_step =
.start_time = .get_clock().now()
.get_logger().info()
linear_x, linear_y, angular_z, duration = .sequence[.sequence_step]
current_time = .get_clock().now()
elapsed = (current_time - .start_time).nanoseconds /
.get_logger().debug(
)
elapsed < duration:
twist = Twist()
twist.linear.x = linear_x
twist.linear.y = linear_y
twist.angular.z = angular_z
.cmd_vel_pub.publish(twist)
.get_logger().info(
)
:
.sequence_step +=
.start_time = .get_clock().now()
.get_logger().info()
():
rclpy.init(args=args)
node = KayaControlNode()
:
rclpy.spin(node)
KeyboardInterrupt:
node.get_logger().info()
node.destroy_node()
rclpy.shutdown()
__name__ == :
main()
通过 NVIDIA Isaac Sim 与 ROS2 的协同,我们可以高效实现 Kaya 机器人的全向运动控制。Isaac Sim 的 OmniGraph 与 USD 配置为仿真提供了精准的物理模型支撑,ROS2 则为实时控制提供了灵活的通信框架。本文的 kaya_drive.py 脚本实现了基础的运动序列控制,在此基础上,开发者可以进一步集成激光雷达、视觉传感器等模块,开发避障、自主导航等更复杂的应用,适用于仓储、服务等多样化的机器人场景。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online