树莓派控制无人机实现定点降落(五)——设计地标以及gazebo导入模型方法

树莓派控制无人机实现定点降落(五)——设计地标以及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、改进地标

放弃上述方案后我使用的地标参照另一个人的博文链接在此
通过将它的方法改进,把矩形框设计成不均匀的,得到如下所示地标图像:
在这里插入图片描述
这样在降落过程中可以不停地进行矫正,如果使用二维码定位则只要拍不全就难以捕捉地标信息。
接下来就是识别地标和控制了,识别控制算法我将在下一篇博文里介绍。

发布了13 篇原创文章 · 获赞 21 · 访问量 800

猜你喜欢

转载自blog.csdn.net/qq_43414059/article/details/104721877