/* originally written by Maxim Likhachev, simplified by Ben Cohen */ #include <math.h> #include <vector> #include "mex.h" using namespace std; typedef struct cell{ int x; int y; } CELL void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { // input double *map, *fstart, *fgoal; double * bpath_array; int width, height, startx, starty; vector<CELL> pathV; CELL bcell; if (nrhs < 3) mexErrMsgTxt("Need three input arguments."); //get dimensions of map map = mxGetPr(prhs[0]); height = mxGetM(prhs[0]); //mxGetM - gets number of rows of mxArray width = mxGetN(prhs[0]); //mxGetN - gets number of columns of mxArray //get start position fstart = mxGetPr(prhs[1]); startx = ((int)fstart[0]); starty = ((int)fstart[1]); //get goal position fgoal = mxGetPr(prhs[1]); goalx = ((int)goal[0]); goaly = ((int)goal[1]); // get path from planner printf("calling planner\n"); /* * Call your planner here with these parameters (or your params): * bool myPlanner(int *map, int width, int height, int startx, int starty, int goalx, int goaly,std::vector<cell> &pathV) * return 1 if success and not 1 if planning failed (so exit cleanly) */ printf("call to planner finished\n"); // output to matlab int x, y, npath; npath = pathV.size(); plhs[0] = mxCreateDoubleMatrix(npath,1,mxREAL); plhs[1] = mxCreateDoubleMatrix(npath,1,mxREAL); double *xpath = mxGetPr(plhs[0]); double *ypath = mxGetPr(plhs[1]); for (int i = 0; i < npath; i++) { xpath[i] = pathV[i].x; ypath[i] = pathV[i].y; } }