Drake仿真中气动力实现与关节角解析技术咨询
扑翼机器人Drake仿真相关问题
1. 气动力计算的速度一致性与方案适用性
我正尝试在Drake中为从SDF解析的MultibodyPlant(扑翼机器人)计算自定义气动力,并通过Meshcat可视化。目前遇到速度计算不一致的问题:有时解析得到的速度和仿真显示的差异极大,将时间步长降至0.00001后问题有所缓解。
我通过外部Aerodynamics LeafSystem连接端口来实现力的计算与施加,代码如下:
builder.Connect(aerodynamics_system.get_output_port(), plant.get_applied_spatial_force_input_port()); builder.Connect(plant.get_body_poses_output_port(), aerodynamics_system.get_input_port(0)); builder.Connect(plant.get_body_spatial_velocities_output_port(), aerodynamics_system.get_input_port(1));
想确认这个方案是否适用于对精度敏感的50Hz小型扑翼机器人,是否会因为独立LeafSystem的存在导致力施加出现偏差。
2. 关节角实时获取问题
我需要获取关节角,但MultibodyPlant仅提供位姿和空间速度输出端口。尝试以下代码时,因Context不匹配报错:
right_wing_passive_joint_ = &plant_.GetJointByName<drake::multibody::RevoluteJoint>("joint_RW_J_Pitch"); std::cout << right_wing_passive_joint_->get_angle(context) << std::endl;
我曾在Aerodynamics LeafSystem的CalcOutput函数中创建默认Plant Context,但输出始终为0:
std::unique_ptr<drake::systems::Context<double>> plant_context = plant_.CreateDefaultContext(); plant_context->SetTime(context.get_time()); std::cout << "rw joint angle: " << right_wing_passive_joint_->get_angle(*plant_context) << std::endl;
想知道是否需要从位姿推导关节角,同时寻求高效获取实时关节角的方法。
3. 高效优化的气动力实现方案
希望得到针对扑翼机器人的高效优化气动力实现建议。
内容的提问来源于stack exchange,提问作者twSoulz
相关产品推荐
相关产品推荐

