赞
踩
在~/.gazebo/model下,创建如下结构的文件
land_mark
model.sdf 文件
model.config 文件
materials 文件夹
| --scripts 文件夹
land_mark.material 纹理信息
| --textures 文件夹
h.png 地标图像
各文件的文件格式在我的另一篇博文里有链接在此
在这里,各文件内容如下:
model.sdf文件
<?xml version='1.0'?> <sdf version='1.4'> <model name="land_mark"> <link name='link'> <pose>0 0 0.115 0 0 0</pose> <inertial> <mass>0.390</mass> <inertia> <ixx>0.00058</ixx> <ixy>0</ixy> <ixz>0</ixz> <iyy>0.00058</iyy> <iyz>0</iyz> <izz>0.00019</izz> </inertia> </inertial> <collision name='collision'> <geometry> <box> <size>.496 .496 .01</size> </box> </geometry> </collision> <visual name='visual'> <geometry> <box> <size>.496 .496 .01</size> </box> </geometry> <material> <script> <uri>model://land_mark/materials/scripts</uri> <uri>model://land_mark/materials/textures</uri> <name>Mark/Diffuse</name> </script> </material> </visual> </link> </model>
文件model.config
<?xml version="1.0"?>
<model>
<name>land_mark</name>
<version>1.0</version>
<sdf version="1.4">model.sdf</sdf>
<author>
<name>chow</name>
</author>
<description>
Landing Mark
</description>
</model>
其中<name>land_mark</name>即为之后在gazebo里的模型名称
文件land_mark.material
material Mark/Diffuse
{
receive_shadows off
technique
{
pass
{
texture_unit
{
texture ../textures/h.png
}
}
}
}
之后在gazebo中insert模型即可,如下:

我一开始准备使用二维码定位,后来觉得树莓派运行能力不足,所以使用了自己设计的地标,下面先介绍二维码定位的方法。
1、下载ar-track-alvar
sudo apt-get install ros-kinetic-ar-track-alvar
该包可以用于二维码定位
2、获得二维码
rosrun ar_track_alvar createMarker [number]
将[number]替换成你要的数字,图片就会在当前路径下生成。
3、创建gazebo二维码模型,使用上述方法。
4、ar_track_alvar下有很多功能包(官网链接)包括findMakerBundles,findMakerBundlesNoKinect,trainMakerBundle,createMarker(可以在/opt/ros/kinetic/lib/ar_track_alvar下找到)我们用到的二维码识别与定位的是individualMakersNoKinect,注意不要用成individualMakers,后者是默认摄像头为kinect,它读取图片的格式为点云。
放弃上述方案后我使用的地标参照另一个人的博文链接在此
通过将它的方法改进,把矩形框设计成不均匀的,得到如下所示地标图像:

这样在降落过程中可以不停地进行矫正,如果使用二维码定位则只要拍不全就难以捕捉地标信息。
接下来就是识别地标和控制了,识别控制算法我将在下一篇博文里介绍。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。