I used libpedsim 

It provides a framework to set waypoints and obstacles:
Ped::Tscene* pedscene;
Ped::Twaypoint* w1;
Ped::Tobstacle* o;
Waypoints were simply created by random sampling - we created a texture where red means it is blocked and otherwise the cell is free. The hacky implementation looked like this and worked pretty well:
// setup
pedscene = new Ped::Tscene(-200, -200, 400, 400);
loadMap();
srand(time(NULL));
int x;
int y;
for (int i = 0; i<agnentCount_/10; i++)
{
Ped::Tagent *a = new Ped::Tagent();
while(true)
{
x = rand() % 99;
y = rand() % 99;
if(texData[y * tex_->getWidth() + x][0]==255)
{
break;
}
}
a->setPosition(
x,
-y,
0.2);
while(true)
{
x = std::rand() % 99;
y = std::rand() % 99;
if(texData[y * tex_->getWidth() + x][0]==255)
{
break;
}
}
PathFind seeker(
a->getPosition().x,
-a->getPosition().y,
x,
y,
tex_->getWidth(),
tex_->getHeight(),
texData);
std::vector<buw::vector2i> path;
path = seeker.findPath();
for(std::vector<buw::vector2i>::iterator it = path.begin(); it!=path.end(); it++)
{
w1 = new Ped::Twaypoint( it->x(), -it->y(), 5);
a->addWaypoint(w1);
}
pedscene->addAgent(a);