C++机器人控制:如何将三元组向量值传入循环类方法?
解决方案
首先,你需要从std::tuple里提取出位置、速度、加速度三个std::vector<QVector6>容器,再在循环中按索引逐个取出对应数据,传入ImpCtrlSet::getCommand函数即可。
步骤1:提取tuple中的轨迹容器
用std::get<索引>访问tuple成员,索引0对应位置、1对应速度、2对应加速度:
// 假设已获取生成好的轨迹 auto traj = pointTrajGenerator.generateTrajectory(); // 提取三个轨迹向量 const auto& pos_traj = std::get<0>(traj); const auto& vel_traj = std::get<1>(traj); const auto& acc_traj = std::get<2>(traj);
步骤2:循环迭代传递数据
先确认三个向量长度一致(轨迹生成时需保证这一点),再遍历索引取出对应值传入函数:
ImpCtrlSet impCtrl; // 实例化控制类对象 // 检查轨迹数据长度是否一致,避免越界 if (pos_traj.size() != vel_traj.size() || pos_traj.size() != acc_traj.size()) { std::cerr << "轨迹数据长度不匹配!" << std::endl; return -1; } // 遍历每个轨迹点 for (size_t idx = 0; idx < pos_traj.size(); ++idx) { // 获取当前索引的位置、速度、加速度 const QVector6& curr_pos = pos_traj[idx]; const QVector6& curr_vel = vel_traj[idx]; const QVector6& curr_acc = acc_traj[idx]; // 传入getCommand计算控制指令 auto ctrl_cmd = impCtrl.getCommand(curr_pos, curr_vel, curr_acc); // 后续处理控制指令(比如发送给机器人) // ... }
常见问题排查
- 编译报错:检查
std::get的索引是否正确,QVector6类型是否和getCommand的参数类型匹配。 - 运行越界:必须在循环前校验三个向量长度一致,轨迹生成模块要保证三个容器的元素数量相同。
- 参数不兼容:确认
ImpCtrlSet::getCommand的参数是const QVector6&或值传递,和传入的类型匹配。
内容的提问来源于stack exchange,提问作者MIKEL LASS
相关产品推荐
相关产品推荐

