效果展示:
地形
法一:terrain_generator
由于我的项目需求是需要甘蔗地的地形模型,对于从卫星地图中获取高程图的办法明显不能达到要求,所以这里我选择采用World Creator 建模,然后导出成高程图:
然后使用opencv调整大小,这里转换了多张不同大小的图像:
#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char **argv)
{
// read image
Mat hmap = imread("heightmap.png", IMREAD_GRAYSCALE);
//Mat hmap = imread("mtsthelens_1025.tif", IMREAD_ANYDEPTH);
if (hmap.empty()) //如果没有读到图片,则为true
{
std::cout << "图片读取错误" << std::endl;
}
Mat rmap;
//把图片改成2^n-1大小的8位图片
for (int i = 7; i <= 12; i++)
{
int map_size = pow(2, i) + 1;
string addr = "hetmap_png2png" + to_string(map_size) + "_l.png";
resize(hmap, rmap, Size(map_size, map_size));
imwrite(addr, rmap);
}
/*
编译:
g++ test.cpp -o test `pkg-config --cflags --libs opencv4`
return 0;
}
然后采用资料2中的脚本https://github.com/Sarath18/terrain_generator,生成了.world文件,然后使用gazeo打开,得
查看文件,也找不到材质文件在哪,所以之后另寻他法。
法二:gdal
然而,在最后一步出错,并不能复现上面的文章里的效果
GAZEBO_RESOURCE_PATH="$GAZEBO_RESOURCE_PATH:/tmp" gazebo /tmp/volcano.world
也找不到原因:
更多参考文献:
在Gazebo中使用DEM構建起伏地形環境
gazebo仿真记事(二):gazebo里加载自己的DEM
Digital Elevation Models
gdal将16位的tif转为8位tif
gdalwarp
法三:blender(成功)
参考视频How to create terrain for Gazebo simulation with Blender 2.9了解到使用blender也可以建模(国内我已经转载到了B站)。
视频中的项目地址:Gazebo Terrain Tutorial,按照视频指导,成功建立地形模型并导入gazebo。
一些细节设置的资料:
Blender怎么快速建模一片绿树叶?Blender快速建模一片绿树叶教程
blender2.9怎么快速建模一颗树苗? blender树的建模技巧
最终效果图:
补充:
1.看到有网友说不知道blender如何导入gazebo以及导入后贴图丢失的问题,我做了各视频来演示解决这个问题。
简单点说就是删除model.sdf文件中的下图的内容即可
视频演示:
很用心的教程
您好,请问blender这个方法,视频中提到的model.sdf是怎么生成的?建模导出之后只有一个dae文件,是如何导入gazebo的呢?
您好,请问blender这个方法,视频中提到的model.sdf是怎么生成的?建模导出之后只有一个dae文件,是如何导入gazebo的呢?
在Gazebo中编辑模型,插入dae文件就行。具体的我接下来有视频