资源简介
最近在学路径规划,学到人工势场法,在参考了matlab版(中文注释)的程序后,自己写了个C++的版本,并利用opencv画出规划好的路径,对于没安装opencv的朋友,也可以把路径打印出来,复制到matlab的命令行窗口,利用plot来查看。里面有5个文件,compute_angle.m,compute_Attract.m,compute_repulsion.m,main.m和C++版的APF.cpp
代码片段和文件信息
#include
#include
#include
#include
#include
using namespace std;
using namespace cv;
double obs[14]={11.232.544.536625.55.588.5};
double sum(double *p1int n);
class APF
{
public:
double Attraction_K;
double Repulsion_K;
double Obstacles_dis;
double a;
double step;
double *start_point;
double *goal_point;
double *obstacles;
void APF_init(double Attraction_Kdouble Repulsion_Kdouble Obstacles_dis double adouble stepdouble *start_pointdouble *goal_pointdouble *obstacles)
{
this->Attraction_K=Attraction_K;
this->Repulsion_K=Repulsion_K;
this->Obstacles_dis=Obstacles_dis;
this->a=a;
this->step=step;
this->start_point=start_point;
this->goal_point=goal_point;
this->obstacles=obstacles;
}
double * compute_angle(double *start_pointint n);
double *compute_attraction(double *start_pointdouble *att_angle);
double *compute_repulsion(double *start_pointdouble *angleint n);
};
double * APF::compute_angle(double *start_pointint n)
{
// static double Y[8];
double *Y=new double[n+1];
double deltaxdeltayr;
for(int i=0;i {
if(i!=0)
{
deltax=this->obstacles[(i-1)*2]-start_point[0];
deltay=this->obstacles[(i-1)*2+1]-start_point[1];
}
else
{
deltax=this->goal_point[0]-start_point[0];
deltay=this->goal_point[1]-start_point[1];
}
r=sqrt(deltax*deltax+deltay*deltay);
if(deltay>0)
Y[i]=acos(deltax/r);
else
Y[i]=-acos(deltax/r);
}
return Y;
};
double *APF::compute_attraction(double *start_pointdouble *att_angle)
{
double R=(this->goal_point[0]-start_point[0])*(this->goal_point[0]-start_point[0])+(this->goal_point[1]-start_point[1])*(this->goal_point[1]-start_point[1]);
double r=sqrt(R);
static double Yatt[2];
Yatt[0]=this->Attraction_K*r*cos(att_angle[0]);
Yatt[1]=this->Attraction_K*r*sin(att_angle[0]);
return Yatt;
}
double *APF::compute_repulsion(double *start_pointdouble *angleint n)
{
double *YY=new double[4];
double Rat=(start_point[0]-this->goal_point[0])*(start_point[0]-this->goal_point[0])+(start_point[1]-this->goal_point[1])*(start_point[1]-this->goal_point[1]);
double rat=sqrt(Rat);
double RrerreYrerYata;
double *Yrerx=new double[n]*Yrery=new double[n]*Yatax=new double[n]*Yatay=new double[n];
for(int i=0;i {
Rre=(start_point[0]-this->obstacles[i*2+0])*(start_point[0]-this->obstacles[i*2+0])+(start_point[1]-this->obstacles[i*2+1])*(start_point[1]-this->obstacles[i*2+1]);
rre=sqrt(Rre);
if(rre>this->Obstacles_dis)
{
Yrerx[i]=0;
Yrery[i]=0;
Yatax[i]=0;
Yatay[i]=0;
}
else if(rre>this->Obstacles_dis/2)
{
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1285 2018-04-18 13:17 compute_angle.m
文件 922 2018-04-18 13:17 compute_Attract.m
文件 3323 2018-04-18 13:17 compute_repulsion.m
文件 8186 2018-04-18 13:18 main.m
文件 6531 2018-04-18 13:40 APF.cpp
- 上一篇:HZK16 C语言 字库
- 下一篇:广工操作系统课设:多道批处理系统两级调度的模拟
相关资源
- Effective C++中文版 超清pdf
- 相位解卷绕unwrap
- Floyd算法C++
- C++进程优先级调度进程优先级调度进
- BP神经网络VC++实现
- 基于C++的图书馆管理系统
- c++五子棋人机对战源程序
- vc知识库大讲堂c++教程.txt
- C++实现通用链表
- c++成语接龙代码.rar
- 银行储蓄系统c++
- OpenCV+C++图像处理项目14个
- 山大C++实验
- 四变量遗传算法求最小值程序C++
- 用VS2015+opencv3.4.2+C++编写Yolov3目标检测
- funcode太空战机c++
- ntripclient-c++
- c++ 课程设计报告 可直接交作业版
- C++算法编程视频
- 格雷码等结构光条纹的生成C++
- SLIC算法做superpixel实现C++
- c++程序设计》第二版高等教育出版社
- 光线追踪算法C++实现
- C++课程设计报告-科学计算器加强版
- 拓扑排序C++代码
- zxing库c++)
- 基于C++实现DFT和IDFT——数字信号处理
- c++程序图的遍历深度优先,广度优先
- 时空上下文视觉跟踪STC含有matlab和c
- 华为C++笔试题全部汇总
评论
共有 条评论