我想还原机器人中每个实体节点的状态(包括每个实体节点的位置和速度),并尝试使用supervisor .I API获取和设置节点的字段来设置位置,并使用wb_supervisor_node_get_velocity和wb_supervisor_node_set_velocity来设置速度。但我发现,通过上述API将中间状态复制到机器人后,使用控制回路和设置转矩的结果是不同的。我应该怎么做才能纠正这个问题呢?
发布于 2020-09-15 14:51:33
有许多方法可以重置模拟的状态,您可以在此处找到这些不同可能性的完整演示:https://cyberbotics.com/doc/guide/using-numerical-optimization-methods#resetting-the-robot
特别是,第一个解决方案看起来与您正在尝试做的事情完全一样:
// get handles to the robot's translation and rotation fields
WbNodeRef robot_node = wb_supervisor_node_get_from_def("MY_ROBOT");
WbFieldRef trans_field = wb_supervisor_node_get_field(robot_node, "translation");
WbFieldRef rot_field = wb_supervisor_node_get_field(robot_node, "rotation");
// reset the robot
const double INITIAL_TRANS[3] = { 0, 0.5, 0 };
const double INITIAL_ROT[4] = { 0, 1, 0, 1.5708 };
wb_supervisor_field_set_sf_vec3f(trans_field, INITIAL_TRANS);
wb_supervisor_field_set_sf_rotation(rot_field, INITIAL_ROT);
wb_supervisor_node_reset_physics(robot_node);https://stackoverflow.com/questions/63893912
复制相似问题