Autolabor Simulation预备知识——坐标轴与坐标系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Autolabor Simulation预备知识——坐标轴与坐标系相关的知识,希望对你有一定的参考价值。

参考技术A

对于大多数用户来说坐标转换是一个“黑箱”,不了解这个部分并不影响用户愉快的使用模拟器,但理解ROS以及Autolabor Simulation的坐标转换机制能帮助用户更好的控制他们的机器人,也使他们能够更快的查找出编码中可能出现的问题。

在ROS中,坐标轴规定可以参考 ROS-REP 103 ,坐标系可以参考 ROS-REP 105 ,为了方便大家的理解,这里结合模拟器做简单的讲解

常规用来表示三维位置关系时,使用的是右手坐标系,何为右手坐标系呢?我们来看下图:

通常相对于我们的身体而言

举例:
坐标点 (3,4,5) 表示距原点 前3个单位 ,并向 左4个单位 以及向 上5个单位 的位置。

有了三维坐标轴的定义,那么对于旋转的定义也就比较容易了,对于一个三维空间里面的旋转,可以分解成绕着坐标轴的旋转。旋转的方向使用右手法则定义:

一般来说

举例:
我们通常用来表述小车运动的二维平面指的是 X-Y平面 ,也就是X轴和Y轴张成的平面,在这个平面中,用来描述 小车转弯的角 就是绕Z轴的旋转,也就是经常说的 航向角 。Z轴朝上,所以按照右手法则可以知道小车向 左转为正,右转为负

空间中的同一位置,在不同坐标系下,其坐标值也不相同。

在上图中,有两个坐标系,分别为坐标系A和坐标系B,其中 橘红色坐标轴 表示 X轴 (朝前), 蓝色坐标轴 表示 Y轴 (朝左)。对于 坐标系A 中,粉色的圆点的坐标为 (3, -3) ,对于 坐标系B 中,粉色的圆点的坐标为 (5, 1)

在ROS中,定义了许多坐标系,这里介绍几个常见的坐标系,为了比较直观的解释这几个坐标系,我们使用一个小例子来说明。

在刚开始的时候,按照之前坐标轴的定义,将小车的朝向方向作为X轴,正左方标识为Y轴,并将小车所在的位置定义为原点,如图(1-1)。

如图(1-2),在原点插一面小旗子,并控制小车行驶一段距离,这个时候我们能得到三个位置信息

在上面的例子中,三个坐标值都相同。但真实情况下,三个坐标值由于测量误差或者其他原因导致坐标值并不相同,然而这三个坐标都用来表示小车中心在空间中的位置,这就引出了不同坐标系

假设对于上面描述的三种测量是以下结果

那么坐标系表示如图(1-3)

模拟器除了沿袭上面讲述的两个坐标系(odom, map)之外,同时还引入了真实坐标系(real_map)。

由于是模拟器,所以可以精确的知道小车的真实位置,在autolabor_simulation_base模块中,会发布两种坐标系的坐标

对于map坐标系下的坐标,并不由模拟器产生,而是通过上层的定位算法得到的,这部分在后面的讲解中可以看到。

我们往往希望找到一种量化的方法去评价算法的优劣,这样对于调整算法或者某些参数有很大的帮助。在使用真实机器人去测试,需要借助外界测量工具去测量,并且需要想一些巧妙的办法让这些测量合理并且准确。但使用模拟器就能够比较方便的解决这个问题。

模拟器能对传感器数据添加噪声,从而来模拟真实情况。将有噪音的数据带入算法中,如果得到的数据很接近“真实数据”,那么我们就能认为这个算法比较好。

比如我们使用AMCL算法对小车进行定位,其中里程计和激光雷达数据都带有噪音,这个时候我们可以得到在map坐标系下的坐标,同时我们能得到小车在real_map坐标系下的坐标,我们就可以使用这两个坐标的距离来判断定位的准确性。

在后面的实验中,我们可以使用这个特性对一些算法进行评测。

django框架预备知识

内容:

1.web预备知识

2.django介绍

3.web框架的本质及分类

4.django安装与基本设置

 

 

 

1.web预备知识

HTTP协议:https://www.cnblogs.com/wyb666/p/9383077.html

关于web的本质:http://www.cnblogs.com/wyb666/p/9034042.html

如何自定义web框架:http://www.cnblogs.com/wyb666/p/9038644.html

了解cookie和session:https://www.cnblogs.com/wyb666/p/9068853.html

 

 

2.django介绍

(1)django介绍

Python的WEB框架有Django、Tornado、Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。在Python各种web框架中,Django的文档最完善、市场占有率最高、招聘职位最多!

 

(2)MVC和MTV

MVC是众所周知的模式,即:将应用程序分解成三个组成部分:model(模型),view(视图),和 controller(控制 器)。其中:

  • M——管理应用程序的状态(通常存储到数据库中),并约束改变状态的行为(或者叫做“业务规则”)
  • C——接受外部用户的操作,根据操作访问模型获取数据,并调用“视图”显示这些数据。控制器是将“模型”和“视图”隔离,并成为二者之间的联系纽带
  • V——负责把数据格式化后呈现给用户

Django也是一个MVC框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式:

  • M 代表模型(Model),即数据存取层。 该层处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等
  • T 代表模板(Template),即表现层。 该层处理与表现相关的决定: 如何在页面或其他类型文档中进行显示
  • V 代表视图(View),即业务逻辑层。 该层包含存取模型及调取恰当模板的相关逻辑。 你可以把它看作模型与模板之间的桥梁

 

(3)django的优缺点

优点:

  • 完美的文档,Django的成功很大一部分原因要归功于Django近乎完美的官方文档(包括Djangobook)
  • 全套的解决方案,Django象Rails一样,提供全套的解决方案(full-stackframework + batteries included),基本要什么有什么(比如:cache、session、feed、orm、geo、auth),而且全部Django自己造,开发网站应手的工具Django基本都给你做好
  • 强大的URL路由配置,Django让你可以设计出非常优雅的URL,在Django里基本可以跟丑陋的GET参数说拜拜
  • 自助管理后台,admin interface是Django里比较吸引眼球的一项contrib,让你几乎不用写一行代码就拥有一个完整的后台管理界面。

 

缺点(源自Django坚持自己造所有的轮子,整个系统相对封闭):

  • 系统紧耦合,如果你觉得Django内置的某项功能不是很好,想用喜欢的第三方库来代替是很难的
  • Django自带的ORM远不如SQLAlchemy强大,除了在Django这一亩三分地,SQLAlchemy是Python事实上的ORM标准,其它框架都支持SQLAlchemy
  • Template功能比较弱,不能插入Python代码,要写复杂一点的逻辑需要另外用Python实现Tag或Filter
  • URL配置虽然强大,但全部要手写,这一点跟Rails的Conventionover configuration的理念完全相左,高手和初识Django的人配出来的URL会有很大差异

 

Django大包大揽,用它来快速开发一些Web运用是很不错的。如果你顺着Django的设计哲学来,你会觉得Django很好用,越用越爽;相反,你如果不能融入或接受Django的设计哲学,你用Django一定会很痛苦,趁早放弃的好

 

(4)django的组件

Django框架的核心包括:一个 面向对象的映射器,用作数据模型和关联性数据库间的媒介(ORM);一个基于正则表达式的URL分发器;一个视图系统,用于处理请求;以及一个模板系统

核心框架中还包括:

  • 一个轻量级的、独立的Web服务器,用于开发和测试
  • 一个表单序列化及验证系统,用于HTML表单和适于数据库存储的数据之间的转换
  • 一个缓存框架,并有几种缓存方式可供选择
  • 中间件支持,允许对请求处理的各个阶段进行干涉
  • 内置的分发系统允许应用程序中的组件采用预定义的信号进行相互间的通信
  • 一个序列化系统,能够生成或读取采用XML或JSON表示的Django模型实例
  • 一个用于扩展模板引擎的能力的系统

另外Django 包含了很多应用在它的"contrib"包中,这些包括:

  • 一个可扩展的认证系统
  • 动态站点管理页面
  • 一组产生 RSS 和 Atom 的工具
  • 一个灵活的评论系统
  • 产生Google 站点地图 (Google Sitemaps)的工具
  • 防止跨站请求伪造(cross-site request forgery)的工具
  • 一套支持轻量级标记语言(Textile和Markdown)的模板库
  • 一套协助创建地理信息系统(GIS)的基础框架

 

 

3.web框架的本质及分类

(1)web框架的本质:socket服务端 与 浏览器的通信

 

(2)socket服务端功能划分

  • 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn...
  • 根据用户访问不同的路径执行不同的函数
  • 从HTML读取出内容,并且完成字符串的替换 --> jinja2(模板语言)


(3)Python中 Web框架的分类

按上面三个功能划分:

  • 框架自带a,b,c --> Tornado
  • 框架自带b和c,使用第三方的a --> Django
  • 框架自带b,使用第三方的a和c --> Flask

按另一个维度来划分:

  • Django --> 大而全(你做一个网站能用到的它都有)
  • 其他 --> Flask 轻量级

 

 

4.django安装与基本设置

(1)django版本

现在主流的版本如下:

技术分享图片

带有LTS表明是长期支持的版本

 

(2)本人使用版本

本人选择使用1.11

安装:可直接使用如下命令安装

1 pip3 install django==1.11.11

 

 

(3)创建django项目

  • 命令行创建:django-admin startproject mysite
  • pycharm创建:File --> New project --> 左侧选Django --> 右侧填项目路径,并且勾选python.exe

 

(4)设置django项目(settings.py)

配置HTML文件存放的位置:

 1 // settings.py中的TEMPLATES是用来配置项目模板文件(HTML)的路径
 2 TEMPLATES = [
 3     {
 4         BACKEND: django.template.backends.django.DjangoTemplates,
 5         DIRS: [os.path.join(BASE_DIR, templates)],
 6         APP_DIRS: True,
 7         OPTIONS: {
 8             context_processors: [
 9                 django.template.context_processors.debug,
10                 django.template.context_processors.request,
11                 django.contrib.auth.context_processors.auth,
12                 django.contrib.messages.context_processors.messages,
13             ],
14         },
15     },
16 ]

 

配置静态文件存放的位置:

1 // 在setting.py中最下面写上这两条 配置静态文件目录
2 // 静态文件 -> css js 图片
3 STATIC_URL = /static/
4 STATICFILES_DIRS = (
5     os.path.join(BASE_DIR, static),
6 )

 

修改django默认的语言:

1 # 将默认的英文改成中文
2 LANGUAGE_CODE = zh-hans

 

将csrf规则注释:

1 注释settings.py的middlerware中的以下内容(csrf):
2 # ‘django.middleware.csrf.CsrfViewMiddleware‘,

 


以上是关于Autolabor Simulation预备知识——坐标轴与坐标系的主要内容,如果未能解决你的问题,请参考以下文章

django框架预备知识

flask框架预备知识

预备知识

深度学习预备知识

预备知识

网络编程—预备知识