目录
- 树莓派控制无人机实现定点降落(五)——设计地标以及gazebo导入模型方法
- 1、将地标图像导入gazebo中的方法:
- 2、对于地标设计
- 3、改进地标
树莓派控制无人机实现定点降落(五)——设计地标以及gazebo导入模型方法
1、将地标图像导入gazebo中的方法:
在~/.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模型即可,如下:
2、对于地标设计
我一开始准备使用二维码定位,后来觉得树莓派运行能力不足,所以使用了自己设计的地标,下面先介绍二维码定位的方法。 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,它读取图片的格式为点云。
3、改进地标
放弃上述方案后我使用的地标参照另一个人的博文链接在此 通过将它的方法改进,把矩形框设计成不均匀的,得到如下所示地标图像:
这样在降落过程中可以不停地进行矫正,如果使用二维码定位则只要拍不全就难以捕捉地标信息。 接下来就是识别地标和控制了,识别控制算法我将在下一篇博文里介绍。