精华内容
下载资源
问答
  • iOS仿雷达扫描界面 XHRadarView ,XHRadarView 是一个 iOS 仿雷达扫描界面。使用objC语言编写
  • 本文针对这一问题,提出了一种基于高层体系结构(HLA)[1]和VC++6.0[2-3]开发工具的仿真雷达对抗系统的设计方法,并搭建了实验平台,对所开发的雷达对抗原型系统进行功能和性能测试。测试结果表明,该系统能满足模型...
  • LabVIEW FPGA仿真雷达系统的数据实时传输.pdf
  • 用于探地雷达仿真,生成模型文件.geo以及输出回波文件.out
  • 仿真雷达组网方案生成方法.pdf 仿真雷达组网方案生成方法.pdf
  • 利用已有的仿真雷达数据生成仿真雷达扫描图像,通过阈值分割提取风切变区域,之后对其进行二层小波分解,求取各子带小波系数的均值和标准差作为特征向量?最后利用BP神经网络对特征向量进行识别分类?仿真结果比较理想...
  • Android 仿真雷达搜索时的旋转动画,打开界面,中心圆形的旋转动画,两个圆环动画,最外围环形动画,透明度变化等。
  • 基于SystemVue仿真雷达软件进行自主开发c++模块 国内用SystemVue软件做雷达仿真的人比较少,网上关于这个软件的介绍也不多,在学习的过程中碰了很多壁。所以整理一下遇到的问题,方便和大家交流。 #一、SystemVue的...

    基于SystemVue仿真雷达软件进行自主开发c++模块

    国内用SystemVue软件做雷达仿真的人比较少,网上关于这个软件的介绍也不多,在学习的过程中碰了很多壁。所以整理一下遇到的问题,方便和大家交流。

    #一、SystemVue的下载安装
    网上有很多安装的方法,唯一注意的一点就是安装之前先检查自己的windows用户名是不是中文,如果是,安装的时候可能会报错。解决方法如下:
    1.同时按win+R,输入sysdm.cpl,点击确定。或者我的电脑---->右键---->属性;
    2.点击高级选项卡,点击右下角的环境变量;
    3.在任意一个盘中新建文件夹Temp,比如D:\Temp;
    4.分别将用户变量里面的TMP和TEMP修改为刚才新建的文件夹;
    5.点击确定,关闭环境变量对话框;
    6.点击确定,关闭系统属性对话框;
    7.然后再安装即可顺利安装成功,如果第一次没安装成功,先卸载,再安装即可。

    #二、利用SystemVue自主开发c++模块
    首先是环境的配置,因为需要跨平台的编译,中间还涉及到cmake的安装,cmake的安装可以直接在网上找教程,根据自己电脑的配置安装合适的Cmake。
    在这一块刚开始用的时候遇到了创建工程不成功的情况,查了一下,发现很多在刚开始的时候都遇到了这个问题。具体报错如下:
    在这里插入图片描述
    打开cmakeerror文件错误提示如下:
    在这里插入图片描述
    尝试了很多解决方法,但是都没有找到具体原因,最后使用了VS2015才成功创建工程。

    成功创建工程以后就可以自主开发模块了。具体步骤如下:
    以加法器为例说明此类模块制作过程,该加法器带有增益控制,有两个输入口,有一个可改变的参数Gain:output=(input1+input2)*Gain
    1、打开systemVue 菜单栏–>Action–>选择Create Model Builder Project
    在这里插入图片描述
    2、选择Create Model Builder Project,为工程取个名字,注意这里是工程名字不是模块名字。比如这里取名为Myproject1,选好模块存放路径,比如下面放在D:\SystemVue_64bit\project\Myproject1,这个可以随便放。点击Create,等待一会,VisualStudio会自动打开。
    在这里插入图片描述
    3、VisualStudio打开了然后切换到。

    在这里插入图片描述
    4、打开刚才建立的过程所在的目录(D:\SystemVue_64bit\project\Myproject1),找到刚才建立的工程。
    在这里插入图片描述
    4、打开依次打开如下文件夹:找到CMakeLists.txt
    Myproject1—>source—>SystemVue—>CMakeLists.txt

    在这里插入图片描述

    5、打开CMakeLists.txt,做如下修改:

    在这里插入图片描述
    6、保存,然后关闭CMakeLists.txt,回到刚才自动打开的VisualStudio。切换到解决方案资源管理器

    在这里插入图片描述

    右键SystemVue-Myproject1,选择生成:
    在这里插入图片描述
    中间过程会出现什么文件被改变啊之类的,一路点重新加载,点OK就行。一直到生成完。
    7、展开SystemVue-Myproject1,会多出两个文件,ADD1.h以及ADD1.cpp,模块的功能由这两个文件共同定义。这两个可能没有出现在vs资源管理方案里面, 但是出现在了工程文件里面,可以手动添加进去。

    在这里插入图片描述
    8、先点开ADD1.h,里面定义的是输入,输出端口以及模块用到的变量。
    加法器有两个输入,一个输出,有一个可改变的参数Gain,我们把输入定义为In1,In2,输出定义为Out,因为Out=(In1+In1)*Gain,所以定义一个模块的传输变量Gain,如果你的模块有更多的输入输出口以及可变参数,以同样的方式依次在该.h文件下添加。

    在这里插入图片描述

    9、点开ADD1.cpp,做如下修改
    在这里插入图片描述

    (1)添加IO口In1,In2,Out,添加模块参数Gain。
    (2)在构造函数ADD1::ADD1()里边初始化参数
    (3)在Run函数里面完成模块要完成的功能,算法。

    10、在解决方案资源管理器里右键ALL_BUILD,选择生成,只要没有语法错误,就能生成成功,生成成功后,模块ADD1就做好了。下面要在systemVue里面使用该模块

    在这里插入图片描述
    在这里插入图片描述

    11、模块在 \ Myproject1\build-win64-vs2010\SystemVue\Debug\Myproject1.dll里面,找到刚才生成的Myproject1.dll,注意这个并不是模块名!!这个是工程名,我们的模块名字叫ADD1,Myproject1.dll下可以找到ADD1
    12、往systemVue里添加模块:打开systemVue,添加模块:
    Tools—>Library Manager
    在这里插入图片描述
    然后点Add From File…

    在这里插入图片描述

    找到刚才的Myproject1.dll添加进来

    在这里插入图片描述

    可以看到加进来了,接下来点close添加成功,接下来是使用

    在这里插入图片描述
    13、在systemVue的Part Select A的Algorithm Design里面找到Myproject1.dll

    在这里插入图片描述
    可以看到我们做好的模块ADD1

    在这里插入图片描述
    可以使用了,可以看到输入在这里插入图片描述口是In1,In2,输出口是Out,参数试Gain,和我们定义的名字一样。

    展开全文
  • android仿雷达扫描

    2014-08-06 10:01:53
    资源含两种实现雷达方式,一种采用动画模拟,一种使用画布绘制!
  • 仿雷达搜索界面

    2015-01-24 10:11:46
    实用,有需要的赶紧下载吧!android系统开发中的搜索和加载功能呢
  • Android自定义View—仿雷达扫描效果

    万次阅读 热门讨论 2015-09-21 08:48:33
    最近在翻以前写的代码,翻到几个月以前做的一个仿雷达扫描的效果,现在拿出来和大家分享一下,在进入分析和代码之前,我们先来看看效果吧,…录屏质量较差,凑活着看吧。看到这样的效果,肯定是用自定义view的方式去...

    最近在翻以前写的代码,翻到几个月以前做的一个仿雷达扫描的效果,现在拿出来和大家分享一下,在进入分析和代码之前,我们先来看看效果吧,

    …录屏质量较差,凑活着看吧。看到这样的效果,肯定是用自定义view的方式去实现的。通过观察效果,我们先来列一列要用的知识吧。

    1. 整个过程是一个不断绘制的过程,所以我们需要一个Handler。
    2. 核心的效果是一个扇形,所以我们还需要会绘制扇形。
    3. 绘制的扇形的颜色有一个梯度变化的效果,所以我们需要知道Shader的使用。
    4. 整个过程中扇形是不断变化位置的,我们还需要知道如何去旋转canvas。

    ok,知道了这些,我们就一一来看一下上面的知识点。

    一. 首先这个不断绘制的过程,我们说用handler去实现,其实方式很多,只不过我个人比较喜欢用handler的方式去实现,至于怎么使用,思路就是在Handler的handleMessage方法中继续send一个message。
    例如下面代码:

    private Handler mHandler = new Handler() {
            public void handleMessage(Message msg) {
                if(msg.what == MSG_RUN) {
                    ...
                    postInvalidate();
                    sendEmptyMessage(MSG_RUN);
                }
            }
        };

    二. 绘制扇形,如何利用canvas去绘制扇形,这都是最基本的知识了,这里仅仅提一下就ok啦,

    canvas.drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)

    简单说一下参数吧,第一个参数是指的这个扇形所在圆的一个外接矩形。

    第二个参数是扇形开始的位置,这里需要注意的是这个开始的位置是从坐标系的正东方向开始算起的。
    如图,

    第三个参数,指的是扇形的角度。

    第四个参数如果设置false,绘制的是一段圆弧,true的话,绘制的才是一个实体的扇形。

    三. Android提供了不少的Shader,我们这里需要一个梯度的变化,这就需要SweepGradient这个类了。
    来看看这个类的构造方法,

    public SweepGradient (float cx, float cy, int color0, int color1)

    这里只看一个它的一个构造方法,前两个参数是指梯度的圆心位置,后两个参数指的是梯度开始的颜色和结束的颜色。

    四. 旋转canvas很容易,只需要调用canvas.rotate方法就ok,但是要记住在旋转之前要保存现场,完毕之后要恢复现场。

    除此之外,我们还需要绘制两个圆和两条线。

    梳理完这些之后,下面我们正式开始编写代码实现这个效果了。
    首先,我们先来初始化一些东西,

    public class MyView extends View {
    
        private static final int MSG_RUN = 1;
    
        private Paint mCirclePaint; // 绘制圆形
        private Paint mArcPaint; // 绘制扇形
        private Paint mLinePaint; // 绘制线条
    
        private RectF mRectF;
    
        private int mSweep; // 扇形角度
    
        public MyView(Context context, AttributeSet attrs) {
            super(context, attrs);
    
            mCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
            mArcPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    
            mCirclePaint.setColor(Color.BLACK);
            mCirclePaint.setStyle(Style.STROKE);
            mCirclePaint.setStrokeWidth(1.f);
    
            mArcPaint.setColor(Color.GRAY);
            mArcPaint.setStyle(Style.FILL);
    
            mLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
            mLinePaint.setColor(Color.BLACK);
            mLinePaint.setStrokeWidth(1.f);
    
            mRectF = new RectF();
        }
    }

    这里定义了3个Paint,分别用来绘制圆形、线条和扇形,并且在构造中初始化这些Paint。

    因为我们需要的是一个正方形的区域,所以我们还需要重写onMeasure方法,并且在这里面设置Rect的值。

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    
        int size = getMeasuredWidth();
        setMeasuredDimension(size, size);
        mRectF.set(0, 0, getMeasuredWidth(), getMeasuredHeight());
    
        mArcPaint.setShader(new SweepGradient(size/2, size/2, Color.GRAY, Color.BLACK));
    }

    这里我们设置我们的view大小是一个正方形,而且初始化了mRectF,这个我们在绘制的时候要用到。
    最后,我们给绘制扇形的Paint设置了一个shader,这里正是使用了SweepGradient,关于它的构造方法的在上面已经说明了。
    继续代码,就到了绘制的时候了,怎么绘制呢? 我们先来看代码,

    @Override
    protected void onDraw(Canvas canvas) {
        int centerX = getMeasuredWidth() / 2;
        int centerY = getMeasuredHeight() / 2;
    
        canvas.save();
        canvas.rotate(mSweep, centerX, centerY);
        canvas.drawArc(mRectF, 0, mSweep, true, mArcPaint);
        canvas.restore();
    
        canvas.drawLine(0, centerY, getMeasuredWidth(), centerY, mLinePaint);
        canvas.drawLine(centerX, 0, centerX, getMeasuredHeight(), mLinePaint);
    
        canvas.drawCircle(centerX, centerY, centerX / 2, mCirclePaint);
        canvas.drawCircle(centerX, centerY, centerX, mCirclePaint);
    }

    这里分为三个部分,后两个部分很容易,就是绘制了两条横竖的线条和两个大小不一样的圆。最重要的还是看第一部分,首先我们保存现场,因为我们在这里要去旋转画布。接下来果然是去旋转了画布,旋转的角度是mSweep,这个值在后面我们会不断的去改变它,最后使用drawArc方法去绘制出了我们需要的扇形,可以看到这里的绘制的开始位置一直是0,那我们在效果图中看到的开始位置不断变化是怎么回事?答案正式我们旋转了画布角度的结果!最后的最后,别忘了去恢复现场。

    现在整个绘制的流程就走完了,也可见看到这样一个效果是如此的简单,接下来就是如何开始这个动画,并且不断的去绘制。

    public void start() {
        mHandler.sendEmptyMessage(MSG_RUN);
    }
    
    private Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            if(msg.what == MSG_RUN) {
                mSweep+=2;
                if(mSweep > 360) mSweep = 0;
                postInvalidate();
                sendEmptyMessage(MSG_RUN);
            }
        }
    };

    我们公开了一个start方法用来开启动画,在start中是调用了handler的sendEmptyMessage去发送一个效果,接下来我们来看看handler中的逻辑。在handler的handleMessage中,我们去改变mSweep的值,如果他的值大于360度,则重新置0,最后再次发送出一个效果,这样就达到了一个不断改变mSweep的值的目的,而且它的值是在0~360度之间。

    ok,到现在这个简单的效果就完成了,我们只需要在xml布局中使用这个view,然后在activity中调用它的start方法,就可以显示出这个绚丽的效果了。

    最后是demo的源码下载: 代码下载,戳这里

    展开全文
  • 工作空间与功能包的创建 2)Gazebo配置文件 3)车体urdf建模与控制程序 4)launch文件 5)执行launch文件运行程序 使用Gazepo 实现雷达仿真 1)Launch文件 2) 执行 使用Gazepo 实现Kinect仿真 1)launch文件 2)执行 ...

     

    目录

    安装Gazebo

    1.添加源

    2.安装gazebo

    使用Gazepo 实现摄像头仿真

     1.工作空间与功能包的创建

     2)Gazebo配置文件

    3)车体urdf建模与控制程序

    4)launch文件

    5)执行launch文件运行程序

    使用Gazepo 实现雷达仿真

    1)Launch文件

    2) 执行

    使用Gazepo 实现Kinect仿真

    1)launch文件

    2)执行


    安装Gazebo

    Gazeop是一款仿真软件,和ROS有非常好的兼容性,通常来说使用rviz就可以满足绝大部分需求,但是要考虑真实世界的物理属性的话(比如摩擦力,空气阻力,湿度,地面凹凸程度等),就需要用到Gazepo

    1.添加源

    sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'

    wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -

    2.安装gazebo

    sudo apt-get update

    sudo apt-get install gazebo7

    sudo apt-get install libgazebo7-dev

     

    使用Gazepo 实现摄像头仿真

     1.工作空间与功能包的创建

    
    //创建工作空间
    $ source /opt/ros/kinetic/setup.zsh
    $ mkdir -p ~/catkin_ws/src
    $ cd ~/catkin_ws/src
    $ catkin_init_workspace
    $ cd ~/catkin_ws
    $ catkin_make 
    $ souce ~/catkiin_ws/devel/setup.zsh
    $ cd ~/catkin_ws/src
    
    //创建功能包
    $ catkin_create_pkg my_gazebo gazebo_plugins gazebo_ros gazebo_ros_control roscpp rospy
    $ cd ~/catkin_ws
    $ catkin_make
    $ source devel/setup.zsh
    
    //创建目录结构
    $ cd ~/catkin_ws/src/my_gazebo 
    $ mkdir worlds launch 
    

     2)Gazebo配置文件

    请按照下列方式命名,或修改launch文件

    $ cd world

    $ touch playground.world

    该文件由Gazebo界面配置后导出,非手动编写,复制即可

    <sdf version='1.4'>
      <world name='default'>
        <light name='sun' type='directional'>
          <cast_shadows>1</cast_shadows>
          <pose>0 0 10 0 -0 0</pose>
          <diffuse>0.8 0.8 0.8 1</diffuse>
          <specular>0.2 0.2 0.2 1</specular>
          <attenuation>
            <range>1000</range>
            <constant>0.9</constant>
            <linear>0.01</linear>
            <quadratic>0.001</quadratic>
          </attenuation>
          <direction>0.5 0.1 -0.9</direction>
        </light>
        <scene>
          <ambient>0.4 0.4 0.4 1</ambient>
          <background>0.7 0.7 0.7 1</background>
          <shadows>1</shadows>
        </scene>
        <physics type='ode'>
          <max_step_size>0.01</max_step_size>
          <real_time_factor>1</real_time_factor>
          <real_time_update_rate>100</real_time_update_rate>
          <gravity>0 0 -9.8</gravity>
        </physics>
        <model name='bookshelf'>
          <static>1</static>
          <link name='link'>
            <inertial>
              <mass>1</mass>
            </inertial>
            <collision name='back'>
              <pose>0 0.005 0.6 0 -0 0</pose>
              <geometry>
                <box>
                  <size>0.9 0.01 1.2</size>
                </box>
              </geometry>
              <max_contacts>10</max_contacts>
              <surface>
                <bounce/>
                <friction>
                  <ode/>
                </friction>
                <contact>
                  <ode/>
                </contact>
              </surface>
            </collision>
            <visual name='visual1'>
              <pose>0 0.005 0.6 0 -0 0</pose>
              <geometry>
                <box>
                  <size>0.9 0.01 1.2</size>
                </box>
              </geometry>
              <material>
                <script>
                  <uri>file://media/materials/scripts/gazebo.material</uri>
                  <name>Gazebo/Wood</name>
                </script>
              </material>
            </visual>
            <collision name='left_side'>
              <pose>0.45 -0.195 0.6 0 -0 0</pose>
              <geometry>
                <box>
                  <size>0.02 0.4 1.2</size>
                </box>
              </geometry>
              <max_contacts>10</max_contacts>
              <surface>
                <bounce/>
                <friction>
                  <ode/>
                </friction>
                <contact>
                  <ode/>
                </contact>
              </surface>
            </collision>
            <visual name='visual2'>
              <pose>0.45 -0.195 0.6 0 -0 0</pose>
              <geometry>
                <box>
                  <size>0.02 0.4 1.2</size>
                </box>
              </geometry>
              <material>
                <script>
                  <uri>file://media/materials/scripts/gazebo.material</uri>
                  <name>Gazebo/Wood</name>
                </script>
              </material>
            </visual>
            <collision name='right_side'>
              <pose>-0.45 -0.195 0.6 0 -0 0</pose>
              <geometry>
                <box>
                  <size>0.02 0.4 1.2</size>
                </box>
              </geometry>
              <max_contacts>10</max_contacts>
              <surface>
                <bounce/>
                <friction>
                  <ode/>
                </friction>
                <contact>
                  <ode/>
                </contact>
              </surface>
            </collision>
            <visual name='visual3'>
              <pose>-0.45 -0.195 0.6 0 -0 0</pose>
              <geometry>
                <box>
                  <size>0.02 0.4 1.2</size>
                </box>
              </geometry>
              <material>
                <script>
                  <uri>file://media/materials/scripts/gazebo.material</uri>
                  <name>Gazebo/Wood</name>
                </script>
              </material>
            </visual>
            <collision name='bottom'>
              <pose>0 -0.195 0.03 0 -0 0</pose>
              <geometry>
                <box>
                  <size>0.88 0.4 0.06</size>
                </box>
              </geometry>
              <max_contacts>10</max_contacts>
              <surface>
                <bounce/>
                <friction>
                  <ode/>
                </friction>
                <contact>
                  <ode/>
                </contact>
              </surface>
            </collision>
            <visual name='visual4'>
              <pose>0 -0.195 0.03 0 -0 0</pose>
              <geometry>
                <box>
                  <size>0.88 0.4 0.06</size>
                </box>
              </geometry>
              <material>
                <script>
                  <uri>file://media/materials/scripts/gazebo.material</uri>
                  <name>Gazebo/Wood</name>
                </script>
              </material>
            </visual>
            <collision name='top'>
              <pose>0 -0.195 1.19 0 -0 0</pose>
              <geometry>
                <box>
                  <size>0.88 0.4 0.02</size>
                </box>
              </geometry>
              <max_contacts>10</max_contacts>
              <surface>
                <bounce/>
                <friction>
                  <ode/>
                </friction>
                <contact>
                  <ode/>
                </contact>
              </surface>
            </collision>
            <visual name='visual5'>
              <pose>0 -0.195 1.19 0 -0 0</pose>
              <geometry>
                <box>
                  <size>0.88 0.4 0.02</size>
                </box>
              </geometry>
              <material>
                <script>
                  <uri>file://media/materials/scripts/gazebo.material</uri>
                  <name>Gazebo/Wood</name>
                </script>
              </material>
            </visual>
            <collision name='low_shelf'>
              <pose>0 -0.195 0.43 0 -0 0</pose>
              <geometry>
                <box>
                  <size>0.88 0.4 0.02</size>
                </box>
              </geometry>
              <max_contacts>10</max_contacts>
              <surface>
                <bounce/>
                <friction>
                  <ode/>
                </friction>
                <contact>
                  <ode/>
                </contact>
              </surface>
            </collision>
            <visual name='visual6'>
              <pose>0 -0.195 0.43 0 -0 0</pose>
              <geometry>
                <box>
                  <size>0.88 0.4 0.02</size>
                </box>
              </geometry>
              <material>
                <script>
                  <uri>file://media/materials/scripts/gazebo.material</uri>
                  <name>Gazebo/Wood</name>
                </script>
              </material>
            </visual>
            <collision name='high_shelf'>
              <pose>0 -0.195 0.8 0 -0 0</pose>
              <geometry>
                <box>
                  <size>0.88 0.4 0.02</size>
                </box>
              </geometry>
              <max_contacts>10</max_contacts>
              <surface>
                <bounce/>
                <friction>
                  <ode/>
                </friction>
                <contact>
                  <ode/>
                </contact>
              </surface>
            </collision>
            <visual name='visual7'>
              <pose>0 -0.195 0.8 0 -0 0</pose>
              <geometry>
                <box>
                  <size>0.88 0.4 0.02</size>
                </box>
              </geometry>
              <material>
                <script>
                  <uri>file://media/materials/scripts/gazebo.material</uri>
                  <name>Gazebo/Wood</name>
                </script>
              </material>
            </visual>
            <velocity_decay>
              <linear>0</linear>
              <angular>0</angular>
            </velocity_decay>
            <self_collide>0</self_collide>
            <kinematic>0</kinematic>
            <gravity>1</gravity>
          </link>
          <pose>0 1.53026 0 0 -0 0</pose>
        </model>
        <model name='jersey_barrier'>
          <static>1</static>
          <link name='link'>
            <visual name='visual'>
              <geometry>
                <mesh>
                  <uri>model://jersey_barrier/meshes/jersey_barrier.dae</uri>
                </mesh>
              </geometry>
            </visual>
            <collision name='upright'>
              <pose>0 0 0.5715 0 -0 0</pose>
              <geometry>
                <box>
                  <size>4.06542 0.3063 1.143</size>
                </box>
              </geometry>
              <max_contacts>10</max_contacts>
              <surface>
                <bounce/>
                <friction>
                  <ode/>
                </friction>
                <contact>
                  <ode/>
                </contact>
              </surface>
            </collision>
            <collision name='base'>
              <pose>0 0 0.032258 0 -0 0</pose>
              <geometry>
                <box>
                  <size>4.06542 0.8107 0.064516</size>
                </box>
              </geometry>
              <max_contacts>10</max_contacts>
              <surface>
                <bounce/>
                <friction>
                  <ode/>
                </friction>
                <contact>
                  <ode/>
                </contact>
              </surface>
            </collision>
            <collision name='base2'>
              <pose>0 0 0.1 0 -0 0</pose>
              <geometry>
                <box>
                  <size>4.06542 0.65 0.1</size>
                </box>
              </geometry>
              <max_contacts>10</max_contacts>
              <surface>
                <bounce/>
                <friction>
                  <ode/>
                </friction>
                <contact>
                  <ode/>
                </contact>
              </surface>
            </collision>
            <collision name='base3'>
              <pose>0 0 0.2 0 -0 0</pose>
              <geometry>
                <box>
                  <size>4.06542 0.5 0.1</size>
                </box>
              </geometry>
              <max_contacts>10</max_contacts>
              <surface>
                <bounce/>
                <friction>
                  <ode/>
                </friction>
                <contact>
                  <ode/>
                </contact>
              </surface>
            </collision>
            <collision name='left-angle'>
              <pose>0 -0.224 0.2401 0.9 -0 0</pose>
              <geometry>
                <box>
                  <size>4.06542 0.5 0.064516</size>
                </box>
              </geometry>
              <max_contacts>10</max_contacts>
              <surface>
                <bounce/>
                <friction>
                  <ode/>
                </friction>
                <contact>
                  <ode/>
                </contact>
              </surface>
            </collision>
            <collision name='right-angle'>
              <pose>0 0.224 0.2401 -0.9 0 0</pose>
              <geometry>
                <box>
                  <size>4.06542 0.5 0.064516</size>
                </box>
              </geometry>
              <max_contacts>10</max_contacts>
              <surface>
                <bounce/>
                <friction>
                  <ode/>
                </friction>
                <contact>
                  <ode/>
                </contact>
              </surface>
            </collision>
            <velocity_decay>
              <linear>0</linear>
              <angular>0</angular>
            </velocity_decay>
            <self_collide>0</self_collide>
            <kinematic>0</kinematic>
            <gravity>1</gravity>
          </link>
          <pose>-4 -1 0 0 -0 -0.7</pose>
        </model>
        <model name='ground_plane_0'>
          <static>1</static>
          <link name='link'>
            <collision name='collision'>
              <geometry>
                <plane>
                  <normal>0 0 1</normal>
                  <size>100 100</size>
                </plane>
              </geometry>
              <surface>
                <friction>
                  <ode>
                    <mu>100</mu>
                    <mu2>50</mu2>
                  </ode>
                </friction>
                <bounce/>
                <contact>
                  <ode/>
                </contact>
              </surface>
              <max_contacts>10</max_contacts>
            </collision>
            <visual name='visual'>
              <cast_shadows>0</cast_shadows>
              <geometry>
                <plane>
                  <normal>0 0 1</normal>
                  <size>100 100</size>
                </plane>
              </geometry>
              <material>
                <script>
                  <uri>file://media/materials/scripts/gazebo.material</uri>
                  <name>Gazebo/Grey</name>
                </script>
              </material>
            </visual>
            <velocity_decay>
              <linear>0</linear>
              <angular>0</angular>
            </velocity_decay>
            <self_collide>0</self_collide>
            <kinematic>0</kinematic>
            <gravity>1</gravity>
          </link>
          <pose>0.497681 0 0 0 -0 0</pose>
        </model>
        <state world_name='default'>
          <sim_time>0 0</sim_time>
          <real_time>0 44986</real_time>
          <wall_time>1377677575 940727583</wall_time>
          <model name='Dumpster'>
            <pose>1 -3.44458 0 0 -0 0</pose>
            <link name='link'>
              <pose>1 -3.44458 0 0 -0 0</pose>
              <velocity>0 0 0 0 -0 0</velocity>
              <acceleration>0 0 0 0 -0 0</acceleration>
              <wrench>0 0 0 0 -0 0</wrench>
            </link>
          </model>
          <model name='cube_20k'>
            <pose>1.41131 -1 0 0 -0 0.9</pose>
            <link name='link'>
              <pose>1.41131 -1 0.5 0 -0 0.9</pose>
              <velocity>0 0 0 0 -0 0</velocity>
              <acceleration>0 0 0 0 -0 0</acceleration>
              <wrench>0 0 0 0 -0 0</wrench>
            </link>
          </model>
          <model name='unit_cylinder_1'>
            <pose>-2 -3.4888 0.5 0 -0 0</pose>
            <link name='link'>
              <pose>-2 -3.4888 0.5 0 -0 0</pose>
              <velocity>0 0 0 0 -0 0</velocity>
              <acceleration>0 0 0 0 -0 0</acceleration>
              <wrench>0 0 0 0 -0 0</wrench>
            </link>
          </model>
        </state>
        <gui fullscreen='0'>
          <camera name='user_camera'>
            <pose>1.33336 -0.422442 27.6101 3e-06 1.5698 3.04015</pose>
            <view_controller>orbit</view_controller>
          </camera>
        </gui>
        <model name='unit_cylinder_1'>
          <pose>-2 -3.4888 0.5 0 -0 0</pose>
          <link name='link'>
            <inertial>
              <mass>1</mass>
              <inertia>
                <ixx>1</ixx>
                <ixy>0</ixy>
                <ixz>0</ixz>
                <iyy>1</iyy>
                <iyz>0</iyz>
                <izz>1</izz>
              </inertia>
            </inertial>
            <collision name='collision'>
              <geometry>
                <cylinder>
                  <radius>0.5</radius>
                  <length>1</length>
                </cylinder>
              </geometry>
              <max_contacts>10</max_contacts>
              <surface>
                <bounce/>
                <friction>
                  <ode/>
                </friction>
                <contact>
                  <ode/>
                </contact>
              </surface>
            </collision>
            <visual name='visual'>
              <geometry>
                <cylinder>
                  <radius>0.5</radius>
                  <length>1</length>
                </cylinder>
              </geometry>
              <material>
                <script>
                  <uri>file://media/materials/scripts/gazebo.material</uri>
                  <name>Gazebo/Grey</name>
                </script>
              </material>
            </visual>
            <velocity_decay>
              <linear>0</linear>
              <angular>0</angular>
            </velocity_decay>
            <self_collide>0</self_collide>
            <kinematic>0</kinematic>
            <gravity>1</gravity>
          </link>
          <static>0</static>
        </model>
        <model name='Dumpster'>
          <link name='link'>
            <collision name='collision'>
              <geometry>
                <mesh>
                  <uri>model://dumpster/meshes/dumpster.dae</uri>
                </mesh>
              </geometry>
              <max_contacts>10</max_contacts>
              <surface>
                <bounce/>
                <friction>
                  <ode/>
                </friction>
                <contact>
                  <ode/>
                </contact>
              </surface>
            </collision>
            <visual name='visual'>
              <geometry>
                <mesh>
                  <uri>model://dumpster/meshes/dumpster.dae</uri>
                </mesh>
              </geometry>
              <material>
                <script>
                  <uri>model://dumpster/materials/scripts</uri>
                  <uri>model://dumpster/materials/textures</uri>
                  <name>Dumpster/Diffuse</name>
                </script>
              </material>
            </visual>
            <velocity_decay>
              <linear>0</linear>
              <angular>0</angular>
            </velocity_decay>
            <self_collide>0</self_collide>
            <inertial>
              <inertia>
                <ixx>1</ixx>
                <ixy>0</ixy>
                <ixz>0</ixz>
                <iyy>1</iyy>
                <iyz>0</iyz>
                <izz>1</izz>
              </inertia>
              <mass>1</mass>
            </inertial>
            <kinematic>0</kinematic>
            <gravity>1</gravity>
          </link>
          <pose>1 -3.44458 0 0 -0 -0.3</pose>
          <static>0</static>
        </model>
        <model name='cube_20k'>
          <link name='link'>
            <pose>0 0 0.5 0 -0 0</pose>
            <collision name='collision'>
              <geometry>
                <mesh>
                  <uri>model://cube_20k/meshes/cube_20k.stl</uri>
                  <scale>0.5 0.5 0.5</scale>
                </mesh>
              </geometry>
              <max_contacts>10</max_contacts>
              <surface>
                <bounce/>
                <friction>
                  <ode/>
                </friction>
                <contact>
                  <ode/>
                </contact>
              </surface>
            </collision>
            <visual name='visual'>
              <geometry>
                <mesh>
                  <uri>model://cube_20k/meshes/cube_20k.stl</uri>
                  <scale>0.5 0.5 0.5</scale>
                </mesh>
              </geometry>
            </visual>
            <velocity_decay>
              <linear>0</linear>
              <angular>0</angular>
            </velocity_decay>
            <self_collide>0</self_collide>
            <inertial>
              <inertia>
                <ixx>1</ixx>
                <ixy>0</ixy>
                <ixz>0</ixz>
                <iyy>1</iyy>
                <iyz>0</iyz>
                <izz>1</izz>
              </inertia>
              <mass>1</mass>
            </inertial>
            <kinematic>0</kinematic>
            <gravity>1</gravity>
          </link>
          <pose>1.41131 -1 0 0 -0 0.9</pose>
          <static>0</static>
        </model>
      </world>
    </sdf>

     

    3)车体urdf建模与控制程序

    非常建议阅读该篇文章后再阅读下面内容

    ROS ArbotiX控制+xacro机器人仿真模型设计 实现初级建模与车体控制

    或下载

    urdf描述包:https://gitee.com/alen2020/mbot_description.git

    车体控制包:https://gitee.com/alen2020/mbot_teleop.git

     

    4)launch文件

    在加载机器人模型描述参数这里引入了功能包,若没有该功能包需要看上一节给出的链接文件,里面介绍到xacro文件的编写,或有自己的一套车体模型,则引入自己的,注意命名。

    <launch>
    
        <!-- 设置launch文件的参数 -->
        <arg name="world_name" value="$(find mbot_gazebo)/worlds/playground.world"/>
        <arg name="paused" default="false"/>
        <arg name="use_sim_time" default="true"/>
        <arg name="gui" default="true"/>
        <arg name="headless" default="false"/>
        <arg name="debug" default="false"/>
    
        <!-- 运行gazebo仿真环境 -->
        <include file="$(find gazebo_ros)/launch/empty_world.launch">
            <arg name="world_name" value="$(arg world_name)" />
            <arg name="debug" value="$(arg debug)" />
            <arg name="gui" value="$(arg gui)" />
            <arg name="paused" value="$(arg paused)"/>
            <arg name="use_sim_time" value="$(arg use_sim_time)"/>
            <arg name="headless" value="$(arg headless)"/>
        </include>
    
        <!-- 加载机器人模型描述参数 -->
        <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/gazebo/mbot_with_camera_gazebo.xacro'" /> 
    
        <!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
        <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node> 
    
        <!-- 运行robot_state_publisher节点,发布tf  -->
        <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"  output="screen" >
            <param name="publish_frequency" type="double" value="50.0" />
        </node>
    
        <!-- 在gazebo中加载机器人模型-->
        <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
              args="-urdf -model mrobot -param robot_description"/> 
    
    </launch>



    5)执行launch文件运行程序

    开启三个终端,执行下三条指令

    $ roslaunch test1 view_mbot_with_camera_gazebo.launch
    $ roslaunch mbot_teleop mbot_teleop.launch
    $ rqt_image_view

     在rqt_image_view中选择订阅/camera/image_raw话题,移动车体,即可看到实时视图

     

    使用Gazepo 实现雷达仿真

    1)Launch文件

    使用雷达仿真修改launch文件即可,前提是有车体urdf建模这个包,我在上一节给出

    与摄像头不同的是xacro的引入文件

     <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/gazebo/mbot_with_laser_gazebo.xacro'" />

    <launch>
    
        <!-- 设置launch文件的参数 -->
        <arg name="world_name" value="$(find mbot_gazebo)/worlds/playground.world"/>
        <arg name="paused" default="false"/>
        <arg name="use_sim_time" default="true"/>
        <arg name="gui" default="true"/>
        <arg name="headless" default="false"/>
        <arg name="debug" default="false"/>
    
        <!-- 运行gazebo仿真环境 -->
        <include file="$(find gazebo_ros)/launch/empty_world.launch">
            <arg name="world_name" value="$(arg world_name)" />
            <arg name="debug" value="$(arg debug)" />
            <arg name="gui" value="$(arg gui)" />
            <arg name="paused" value="$(arg paused)"/>
            <arg name="use_sim_time" value="$(arg use_sim_time)"/>
            <arg name="headless" value="$(arg headless)"/>
        </include>
    
        <!-- 加载机器人模型描述参数 -->
        <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/gazebo/mbot_with_laser_gazebo.xacro'" /> 
    
        <!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
        <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node> 
    
        <!-- 运行robot_state_publisher节点,发布tf  -->
        <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"  output="screen" >
            <param name="publish_frequency" type="double" value="50.0" />
        </node>
    
        <!-- 在gazebo中加载机器人模型-->
        <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
              args="-urdf -model mrobot -param robot_description"/> 
    
    </launch>

    2) 执行

    开启三个终端,执行下三条指令

    $ roslaunch test1 view_mbot_with_laser_gazebo.launch
    $ roslaunch mbot_teleop mbot_teleop.launch
    $ rviz

    可以看到单线激光雷达的点云数据,控制车体移动,点云数据实时变动

     

    使用Gazepo 实现Kinect仿真

    1)launch文件

    使用Kinect仿真修改launch文件即可,前提是有车体urdf建模这个包,我在第一节给出

    与摄像头和激光雷达不同的是xacro的引入文件

    <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/gazebo/mbot_with_kinect_gazebo.xacro'" />

    <launch>
    
        <!-- 设置launch文件的参数 -->
        <arg name="world_name" value="$(find mbot_gazebo)/worlds/playground.world"/>
        <arg name="paused" default="false"/>
        <arg name="use_sim_time" default="true"/>
        <arg name="gui" default="true"/>
        <arg name="headless" default="false"/>
        <arg name="debug" default="false"/>
    
        <!-- 运行gazebo仿真环境 -->
        <include file="$(find gazebo_ros)/launch/empty_world.launch">
            <arg name="world_name" value="$(arg world_name)" />
            <arg name="debug" value="$(arg debug)" />
            <arg name="gui" value="$(arg gui)" />
            <arg name="paused" value="$(arg paused)"/>
            <arg name="use_sim_time" value="$(arg use_sim_time)"/>
            <arg name="headless" value="$(arg headless)"/>
        </include>
    
        <!-- 加载机器人模型描述参数 -->
        <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/gazebo/mbot_with_kinect_gazebo.xacro'" /> 
    
        <!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
        <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node> 
    
        <!-- 运行robot_state_publisher节点,发布tf  -->
        <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"  output="screen" >
            <param name="publish_frequency" type="double" value="50.0" />
        </node>
    
        <!-- 在gazebo中加载机器人模型-->
        <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
              args="-urdf -model mrobot -param robot_description"/> 
    
    </launch>

    2)执行

    $ roslaunch test1 view_mbot_with_laser_gazebo.launch
    $ roslaunch mbot_teleop mbot_teleop.launch
    $ rqt_image_view
    $ rviz

    kinect既可以看到点云数据,也可以看到摄像头信息,相对于激光雷达来说,Kinect的点云扫射访问很窄(通常不超过180度)

    展开全文
  • 高仿雷达扫描效果和仿水波纹中心扩散效果,手把手教你撸一个炫酷的自定义view。 于亚豪的博客地址: http://blog.csdn.net/androidstarjack 我们先看效果图吧对于仿水波纹中心扩脉冲效果思路大家一看就应该知道...

    高仿雷达扫描效果和仿水波纹中心扩散效果,手把手教你撸一个炫酷的自定义view。

    于亚豪的博客地址:

    http://blog.csdn.net/androidstarjack

    我们先看效果图吧

    Markdown

    Markdown

    对于仿水波纹中心扩脉冲效果

    思路

    大家一看就应该知道,一张图片在不断的放大,且颜色渐变。那不就是自定义属性动画吗

    没错就是这么神奇。ScaleAnimation+AlphaAnimation

    • 缩放动画:

        //创建一个AnimationSet对象,参数为Boolean型,
      //true表示使用Animation的interpolator,false则是使用自己的
      animationSet = new AnimationSet(true);
      //参数1:x轴的初始值
      //参数2:x轴收缩后的值
      //参数3:y轴的初始值
      //参数4:y轴收缩后的值
      //参数5:确定x轴坐标的类型
      //参数6:x轴的值,0.5f表明是以自身这个控件的一半长度为x轴
      //参数7:确定y轴坐标的类型
      //参数8:y轴的值,0.5f表明是以自身这个控件的一半长度为x轴
      ScaleAnimation scaleAnimation = new ScaleAnimation(
             1, animation_size,1,animation_size,
             Animation.RELATIVE_TO_SELF,0.5f,
             Animation.RELATIVE_TO_SELF,0.5f);
      scaleAnimation.setDuration(3000);
      animationSet.addAnimation(scaleAnimation);
      
    • 渐变动画

      //创建一个AlphaAnimation对象,参数从完全的透明度,到完全的不透明
      AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
      //设置动画执行的时间
      alphaAnimation.setDuration(3000);
      //将alphaAnimation对象添加到AnimationSet当中
      animationSet.addAnimation(alphaAnimation);
      //使用ImageView的startAnimation方法执行动画
      animationSet.setFillAfter(true);
      animationSet.setInterpolator(new AccelerateInterpolator());
      animationSet.setAnimationListener(new AnimationListener() {
          public void onAnimationStart(Animation animation) {
          }
          public void onAnimationRepeat(Animation animation) {
          }
          public void onAnimationEnd(Animation animation) {
              imageview_01.startAnimation(animationSet);
          }
      });
      imageview_01.startAnimation(animationSet);
      

    高仿雷达扫描效果

    思路

    • 首先我们要确认要用什么方式去实现

    • 布局的摆放

    • 利用属性动画一张图片或者是一个view在绕着中心点

    • 自定义View进行矩阵旋转

    Markdown

    效果实现

    • 自定义RelativeLayout进行摆设布

       protected void onDraw(Canvas canvas) {
              super.onDraw(canvas);   
              canvas.drawBitmap(bitmap, getWidth() / 2 - bitmap.getWidth() / 2, getHeight() / 2 - bitmap.getHeight() / 2, null);
              canvas.drawBitmap(bitmap1,  getWidth() / 2 - bitmap1.getWidth() / 2, getHeight() / 2 - bitmap1.getHeight() / 2, null);
              if(isSearching) invalidate();
          }
      
    • 动画

      Rect rMoon = new Rect(getWidth()/2-bitmap2.getWidth(),getHeight()/2,getWidth()/2,getHeight()/2+bitmap2.getHeight());
                  canvas.rotate(offsetArgs,getWidth()/2,getHeight()/2);
                  canvas.drawBitmap(bitmap2,null,rMoon,null);
                  offsetArgs = offsetArgs + 3;
      

    自定义CircleWaveDivergenceView:

    /**
     * 类功能描述:</br>
     * 仿雷达扫描View
     * 博客地址:http://blog.csdn.net/androidstarjack
     * 公众号:终端研发部
     * @author yuyahao
     * @version 1.0 </p> 修改时间:</br> 修改备注:</br>
     */
    public class CircleWaveDivergenceView extends RelativeLayout{
    
        public static final String TAG = "SearchDevicesView";
        public static final boolean D  = BuildConfig.DEBUG;
        public Context context;
        @SuppressWarnings("unused")
        private long TIME_DIFF = 1500;
        private float offsetArgs = 0;
        private boolean isSearching = false;
        private Bitmap bitmap;
        private Bitmap bitmap1;
        private Bitmap bitmap2;
    
    
        public boolean isSearching() {
            return isSearching;
        }
    
        public void setSearching(boolean isSearching) {
            this.isSearching = isSearching;
            offsetArgs = 0;
            invalidate();
        }
    
        public CircleWaveDivergenceView(Context context) {
            super(context);
            this.context = context;
            initBitmap();
        }
    
        public CircleWaveDivergenceView(Context context, AttributeSet attrs) {
            super(context, attrs);
            this.context = context;
            initBitmap();
        }
    
        public CircleWaveDivergenceView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            this.context = context;
            initBitmap();
        }
    
        private void initBitmap(){
            if(bitmap == null){
                bitmap = Bitmap.createBitmap(BitmapFactory.decodeResource(context.getResources(), R.drawable.gplus_search_bg));
            }
            if(bitmap1 == null){
                bitmap1 = Bitmap.createBitmap(BitmapFactory.decodeResource(context.getResources(), R.drawable.locus_round_click));
            }
            if(bitmap2 == null){
                bitmap2 = Bitmap.createBitmap(BitmapFactory.decodeResource(context.getResources(), R.drawable.gplus_search_args));
            }
        }
    
        @SuppressLint("DrawAllocation")
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);   
            canvas.drawBitmap(bitmap, getWidth() / 2 - bitmap.getWidth() / 2, getHeight() / 2 - bitmap.getHeight() / 2, null);
            if(isSearching){
                Rect rMoon = new Rect(getWidth()/2-bitmap2.getWidth(),getHeight()/2,getWidth()/2,getHeight()/2+bitmap2.getHeight());
                canvas.rotate(offsetArgs,getWidth()/2,getHeight()/2);
                canvas.drawBitmap(bitmap2,null,rMoon,null);
                offsetArgs = offsetArgs + 3;
            }else{
                canvas.drawBitmap(bitmap2,  getWidth() / 2  - bitmap2.getWidth() , getHeight() / 2, null);
            }
            canvas.drawBitmap(bitmap1,  getWidth() / 2 - bitmap1.getWidth() / 2, getHeight() / 2 - bitmap1.getHeight() / 2, null);
            if(isSearching) invalidate();
        }
    
        @Override
        public boolean onTouchEvent(MotionEvent event) {    
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:       
                handleActionDownEvenet(event);
                return true;
            case MotionEvent.ACTION_MOVE: 
                return true;
            case MotionEvent.ACTION_UP:
                return true;
            }
            return super.onTouchEvent(event);
        }
    
        private void handleActionDownEvenet(MotionEvent event){
            RectF rectF = new RectF(getWidth() / 2 - bitmap1.getWidth() / 2, 
                                    getHeight() / 2 - bitmap1.getHeight() / 2, 
                                    getWidth() / 2 + bitmap1.getWidth() / 2, 
                                    getHeight() / 2 + bitmap1.getHeight() / 2);
    
            if(rectF.contains(event.getX(), event.getY())){
                if(D) Log.d(TAG, "click search device button");
                if(!isSearching()) {
                    setSearching(true);
                }else{
                    setSearching(false);
                }
            }
        }
    }
    

    最终实现效果:

    image

    代码并没有很多,需要的同学可以下载github Demo体验和学习。

    项目Github链接地址

    https://github.com/androidstarjack/MyCircleWaveDiverge

    下载慢?CSDN下载链接:

    http://download.csdn.net/detail/androidstarjack/9892366

    相信自己,没有做不到的,只有想不到的

    如果你觉得此文对您有所帮助,欢迎入群 QQ交流群 :232203809
    微信公众号:终端研发部

    Markdown

    (这里 学到的不仅仅是技术)

    展开全文
  • 高仿雷达扫描效果和仿水波纹中心扩散效果,手把手教你撸一个炫酷的自定义view。 于亚豪的博客地址: http://blog.csdn.net/androidstarjack 我们先看效果图吧对于仿水波纹中心扩脉冲效果思路大家一看就应该知道...
  • 使用Matlab-仿真雷达信号处理系统

    千次阅读 2020-12-30 19:46:13
     %目标位置向量,相对于雷达 RCS=[1 1 1 1 1 1]; %目标相对有效反射面 end %参数设置 R=R-Rmin; %目标位置向量,相对距离门下限Rmin C=3e8; %光速 K=B/T; %调频斜率 Rrec=Rmax-Rmin; %接收门宽/m Trec=2*Rrec/...
  • 用 VML 实现仿雷达扫描效果

    千次阅读 2010-05-12 15:48:00
    解决思路: 用VML渲染出几个同心圆,然后利用 Light 滤镜的方法在上面添加环境光(作背景颜色)、锥形光(作扫描光速)和点光... 代码示例: VML & Light实现的仿雷达扫描效果 <!-- var cX,cY var pX = 10 var pY = 20
  • gazebo中仿真雷达模型系列

    千次阅读 2017-08-29 10:23:22
    1.雷达文件 在~/.gazebo/models/下新建文件中添加如下文件 model.config <name>Noisy laser <version>1.0 <sdf version='1.6'>model.sdf</sdf> <name>My N
  • 蓝牙连接,搜索设备,扫描到设备后弹出圆形头像,点击头像连接设备,设备消失后头像隐藏。
  • 点目标成像程序,对于SAR成像初学者非常有用。里面包含多点目标成像(用RD算法),包含距离徙动矫正,最后结果的评价

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,876
精华内容 3,950
关键字:

仿雷达