自动驾驶车辆控制算法之如何利用查表算法--获取目标车速和转角下的控制扭矩(C++开发)

一、开发思路

1.基于横向控制算法获取目标方向盘转角,基于纵向控制算法获取目标速度

2.创建二维数组,存放目标扭矩,行为目标速度,列为目标转角

3.计算获取的目标速度所在行的索引号x_index,目标转角所在列的索引号y_index

4.通过线性插值对x,y,z数组进行插值(一维和二维插值)

5.查表获取扭矩Torque[x_index][y_index]


二、基于C++的代码开发

测试数据:

#ifndef STRUCT_
#define STRUCT_
struct Vehicle_Parameters {
  float Speed[5] = {1.1, 2.2, 3.6, 7.2, 10.5}; // X
  float newSpeed[9] = {0.f};
  float Steer[5] = {1, 2, 3, 4, 5}; // Y
  float newSteer[9] = {0.f};
  float Torque[5][5] = {
  {0.2, 0.3, 0.4, 0.6, 0.8},
                        {0.3, 0.5, 0.6, 0.7, 0.8},
                        {0.4, 0.6, 0.7, 0.8, 0.9},
                        {1.1, 1.2, 1.3, 1.4, 1.5},
                        {1.2, 1.3, 1.5, 1.6, 1.9}}; // Z
  float newTorque[9][9] = {
  {0.f}};
  float v_target_value;
  float s_target_value;
  int v_length;
  int s_length;
  int v_newLength;
  int s_newLength;
  int v_index;
  int s_index;
};

#endif

接口 声明:

lookup_table.hpp

#ifndef LOOKUP_TABLE_
#define LOOKUP_TABLE_
#include "struct.hpp"
#include <cmath>
#include <iostream>
class Lookup_Table {
private:
  float v_target;
  float s_target;
  // int newWidth;
  // int newHeight;
  // float newTorque[][];
  Vehicle_Parameters vehicle_parameters_;

public:
  Lookup_Table();
  ~Lookup_Table();
  int CalculateIndex_v();
  int CalculateIndex_s();
  // Vehicle_Parameters vehicle_parameters_;
  int searchIndex(float *nums, int length, float target);
  void SetSpeedInfo(float v);
  void SetSteerINfo(float s);
  float ReadSpeedInfo();
  float ReadSteerInfo();
  float CalculateTorque(int x, int y);
  void InterSpeed(Vehicle_Parameters &vehicle_parameters_);
  void InterTarget(Vehicle_Parameters &vehicle_parameters_);
  void InterTorque(Vehicle_Parameters &vehicle_parameters_);
};

#endif

接口实现: 

lookup_table.cpp

#include "lookup_table.hpp"
Lookup_Table::Lookup_Table() {
  //   vehicle_parameters_.v_length =
  //       sizeof(vehicle_parameters_.Speed) /
  //       sizeof(vehicle_parameters_.Speed[0]);
  //   std::cout << "vehicle_parameters_.v_length = " <<
  //   vehicle_parameters_.v_length
  //             << std::endl;
  //   vehicle_parameters_.s_length =
  //       sizeof(vehicle_parameters_.Steer) /
  //    
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值