Drake 中的真实模拟:将真实世界传感器数据导入 Drake MultibodyPlant 的正确方法是什么
Real-To-Sim in Drake: What's The Proper Way to Get Real-World Sensor Data Into a Drake MultibodyPlant
我一直在通读 Drake 文档和我找到的任何教程,但我还没有看到关于此的任何详细信息problem/goal,所以我想我会试着在这里问一下。
目标:
我目前的项目是我有一个带有传感器的真实世界的古田摆,以获得状态向量 q_sim = [x, theta, xdot, thetadot]
.
的 cartpole 等效值
我希望能够拥有一个真实世界的状态向量 q_real
,它“覆盖”模拟的 cartpole 状态向量 q_sim
(从 Parser(plant=cart_pole).AddModelFromFile(sdf_path)
派生的 MBP 获取)。因此,由此产生的行为将是这样的:垂直移动真实世界的钟摆将(实时)反映在垂直移动的模拟钟摆中。最终,我的目标是让 furuta 钟摆能够通过反映状态向量的手推车模拟实时进行摆动和平衡行为,q_real
。
我的想法About/Tried:
- 扩展
leafsystem
以读取真实世界的传感器和 return 状态向量,就好像它是一个建模的动力系统一样,它自己的 actuator_port
用于控制器输出。我对这种方法的问题是,我不是 sure/know 如果有可能做到这一点,同时仍然可视化具有相同状态向量的 cart_pole MBP。通过阅读 MultiBodyPlant 文档 [ https://drake.mit.edu/doxygen_cxx/classdrake_1_1multibody_1_1_multibody_plant.html#details ],我走到了这个死胡同。我没看到有什么函数可以replace/overwrite模拟MBP的state_output_vector
.
- 我还考虑过使用两个独立的 MBP 的可能性,一个是从
.sdf
文件派生的 cart_pole,另一个是接受执行器输入的扩展 leafsystem
,阅读传感器,以及 return 状态向量输出。但是,通过这种设置,我不相信我能够实现“垂直移动真实世界的钟摆并让模拟钟摆实时垂直移动”的预期行为
额外:
我还注意到在 drake github https://github.com/RobotLocomotion/drake/issues/12912about 上有一个关于 2020 年 drake MBP 的官方教程。有人知道除了 Doxygen 之外该教程是否有任何更新吗?
我认为您不想用模拟数据覆盖您的 MBP 设备。正常的工作流程是提供一个不同的系统来读取您的传感器并提供与您的 MBP 相同的端口。
在极端情况下,您甚至可以将所有传感器和执行器驱动程序封装到一个它们自己的系统中,就像 MBP 的“模拟”一样。这就是我在 ManipulationStation
和 ManipulationStationHardwareInterface
中提供的模式。除了 doxygen,您还可以看这里:https://manipulation.csail.mit.edu/robot.html#section4
我一直在通读 Drake 文档和我找到的任何教程,但我还没有看到关于此的任何详细信息problem/goal,所以我想我会试着在这里问一下。
目标:
我目前的项目是我有一个带有传感器的真实世界的古田摆,以获得状态向量 q_sim = [x, theta, xdot, thetadot]
.
的 cartpole 等效值
我希望能够拥有一个真实世界的状态向量 q_real
,它“覆盖”模拟的 cartpole 状态向量 q_sim
(从 Parser(plant=cart_pole).AddModelFromFile(sdf_path)
派生的 MBP 获取)。因此,由此产生的行为将是这样的:垂直移动真实世界的钟摆将(实时)反映在垂直移动的模拟钟摆中。最终,我的目标是让 furuta 钟摆能够通过反映状态向量的手推车模拟实时进行摆动和平衡行为,q_real
。
我的想法About/Tried:
- 扩展
leafsystem
以读取真实世界的传感器和 return 状态向量,就好像它是一个建模的动力系统一样,它自己的actuator_port
用于控制器输出。我对这种方法的问题是,我不是 sure/know 如果有可能做到这一点,同时仍然可视化具有相同状态向量的 cart_pole MBP。通过阅读 MultiBodyPlant 文档 [ https://drake.mit.edu/doxygen_cxx/classdrake_1_1multibody_1_1_multibody_plant.html#details ],我走到了这个死胡同。我没看到有什么函数可以replace/overwrite模拟MBP的state_output_vector
. - 我还考虑过使用两个独立的 MBP 的可能性,一个是从
.sdf
文件派生的 cart_pole,另一个是接受执行器输入的扩展leafsystem
,阅读传感器,以及 return 状态向量输出。但是,通过这种设置,我不相信我能够实现“垂直移动真实世界的钟摆并让模拟钟摆实时垂直移动”的预期行为
额外:
我还注意到在 drake github https://github.com/RobotLocomotion/drake/issues/12912about 上有一个关于 2020 年 drake MBP 的官方教程。有人知道除了 Doxygen 之外该教程是否有任何更新吗?
我认为您不想用模拟数据覆盖您的 MBP 设备。正常的工作流程是提供一个不同的系统来读取您的传感器并提供与您的 MBP 相同的端口。
在极端情况下,您甚至可以将所有传感器和执行器驱动程序封装到一个它们自己的系统中,就像 MBP 的“模拟”一样。这就是我在 ManipulationStation
和 ManipulationStationHardwareInterface
中提供的模式。除了 doxygen,您还可以看这里:https://manipulation.csail.mit.edu/robot.html#section4