目录

 
  • 树莓派控制无人机实现定点降落(五)——设计地标以及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模型即可,如下:   微信图片_20201124223512  

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、改进地标

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