Ch1:古今的manipulation与仿真、ROS和Drake介绍
不同的机器人研究与仿真
以前(15年左右)只能用仿真环境训练行走机器人,对于manipulation任务,有两个问题:1)相机不真实;2)接触行为太复杂。
I remember just a few years ago (~2015) talking to my PhD students, who were all quite adept at using simulation for developing control systems for walking robots, about using simulation for manipulation. “You can’t work on manipulation in simulation” was their refrain, and for good reason. The complexity of the contact mechanics in manipulation has traditionally been much harder to simulate than a walking robot that only interacts with the ground and through a minimal set of contact points. Looming even larger, though, was the centrality of perception for manipulation; it was generally accepted that one could not simulate a camera well enough to be meaningful.
但时代在发展,现在的游戏引擎已经可以很好地建模相机,使其不仅能在仿真环境中测试感知系统,还可以在仿真中训练感知系统并sim2real到现实世界中。
How quickly things can change! The last few years has seen a rapid adoption of video-game quality rendering by the robotics and computer vision communities. The growing consensus now is that game-engine renderers can model cameras well enough not only to test a perception system in simulation, but even to train perception systems in simulation and expect them to work in the real world! This is fairly amazing, as we were all very concerned before that training a deep learning perception system in simulation would allow it to exploit any quirks of the simulated images that could make the problem easier.
且模拟接触行为的质量和性能也大大提高(这方面的模拟主要是靠复杂的geometry queries和stiff (measure-)微分方程),虽然目前在控制方程的数值求解方面仍有改进空间,但现今的求解器已经足够好用了
We have also seen dramatic improvements in the quality and performance of contact simulation. Making robust and performant simulations of multi-body contact involves dealing with complex geometry queries and stiff (measure-) differential equations. There is still room for fundamental improvements in the mathematical formulations of the numerical solutions for the governing equations, but today’s solvers are good enough to be extremely useful.
上面是MIT里比较概括性的介绍,下面是Drake的一篇post里更具体一点的关于行走机器人和manipulation与仿真的介绍:
我在深耕行走机器人多年后意识到manipulation任务远难于行走任务。因为几何、接触等都太多样了,成功率低、期望却高(如行走机器人脚偏了一点无所谓,但机器人拿咖啡时手偏了一点就洒了)
After working on legged robots for many years, I came to appreciate that simulating robots manipulating diverse objects (with their hands) is more difficult than simulating a legged robot. Both systems make and break contact with the environment, but the diversity of contact geometries and configurations in manipulation is much greater and the numerics are much worse. Expectations are high, too. If a simulated humanoid robot’s foot slides a little when coming into contact with the ground, nobody will notice. But if a coffee mug slowly slides out of the robot’s hand, that’s bad news. Achieving accuracy and efficiency requires a nuanced relationship between the multibody equations and the numerical integration codes.
ROS (the Robot Operating System)
ROS的重要性:ROS模块化组件的设计(即ROS package)使得各分支学科专家可以轻松共享各自的专业知识。不同的ROS package甚至可以使用不同语言编写、在不同操作系统上编写。
I believe that ROS was one of the best things to happen to robotics in the last decades. It meant that experts from different subdisciplines could easily share their expertise in the form of modular components. Components (as ROS packages) simply agree on the messages that they will send and receive on the network; packages can inter-operate even if they are written in different programming languages or even on different operating systems.
但本课并不采用ROS中基于消息传递的模块交互方式。因为这种模块化方法并不会对模块的内部状态、参数和时间行为做统一的规定,并不适合教学中对复杂系统的理解和调试。在DRAKE中,每个模块以一致的方式声明状态、参数、时间语义,有助于我们理解和调试manipulation全栈。且支持可重复的确定性仿真。
Although ROS makes it relatively easy to get started with manipulation, it doesn’t serve my pedagogical goal of thinking clearly about manipulation. The modular approach to authoring the compunonets is extremely good, and we will adopt it here. But in DRAKE we ask for a little bit more from each of the components – essentially that they declare their states, parameters, and timing semantics in a consistent way – so that we have a much better change of understanding the complex relationships between systems. This has great practical value as well; the ability to debug a full manipulation stack with repeatable deterministic simulations (even if they include randomness) is surprisingly rare in the field but hugely valuable.
DRAKE就是我们的key building block,在Drake中可将所有模块组合成系统图Diagrams,并在notebook中可视化这些系统图
The key building block in our work will be DRAKE Systems, and systems can be combined in complex combinations into Diagrams. System diagrams have long been the modeling paradigm used in controls, and the software aspect of it will be very familiar to you if you’ve used tools like Simulink, LabView, or Modelica. Theses software tools refer to the block-diagram design paradigm as “model-based design”.
Drake作者对自己的介绍:一个开源软件工具包(C++、Python),功能包括:动力学引擎(即研究物体之间的碰撞、接触等物理行为,旨在解决复杂的动力学问题)、系统图整理、数学优化
Drake is TRI’s (Toyota Research Institute) attempt to provide mature, open-source tools for another large portion of the roboticist’s toolkit, complementary to the deep learning toolboxes, to further buttress advanced research in the field. It is a library (in C++ with Python bindings) with three major components: 1) the multi body dynamics engine, 2) the “system framework” for organizing and combining system models from a library into a block diagram, and the 3) optimization framework for mathematical programming. Each of these components is important for robotics research; the vision for Drake is to facilitate making powerful combination of all three components within a single application.
本课安排
各章节按照整个manipulation任务中不同的building blocks组件进行讲述,涵盖计算机视觉、动力学和控制学等的领域知识,本课仅介绍各领域与manipulation最相关的idea。
The remaining chapters of these notes are organized around the component-level building blocks of manipulation. Many of these components each individually build on a wealth of literature (e.g. from computer vision, or dynamics and control). Rather than be overwhelmed, I’ve chosen to focus on delivering a consistent coherent presentation of the most relevant ideas from each field as they relate to manipulation, and pointers to more literature. Even finding a single notation across all of the fields can be a challenge!
会讲相关的机器人硬件、仿真这些硬件的细节,以及几何和动力学基础
The next few chapters will give you a minimal background on the relevant robot hardware that we are simulating, on (some of) the details about simulating them, and on the geometry and kinematics basics that we will use heavily through the notes.
相关文章:
Ch1:古今的manipulation与仿真、ROS和Drake介绍
不同的机器人研究与仿真 以前(15年左右)只能用仿真环境训练行走机器人,对于manipulation任务,有两个问题:1)相机不真实;2)接触行为太复杂。 I remember just a few years ago (~201…...
JAVA秋招面试题精选-第一天总结
目录 分栏简介: 问题一:订单表每天新增500W条数据,分库分表应该怎么设计? 问题难度以及频率: 问题导向: 满分答案: 举一反三: 问题总结: 问题二:解释…...
服务器卸载安装的 Node.js
卸载安装的 Node.js 版本,具体步骤取决于你是通过包管理器(如 yum 或 dnf)安装的,还是通过 nvm (Node Version Manager) 安装的。以下是针对这两种情况的指南。 通过包管理器卸载 Node.js 如果你是通过 yum 或 dnf 安装的 Node.…...
深度解析 Ansible:核心组件、配置、Playbook 全流程与 YAML 奥秘(下)
文章目录 六、playbook运行playbook方式Playbook VS ShellScripts忽略错误 ignore_errorshandlers和notify结合使用触发条件playbook中tags的使用playbook中变量的使用invertory参数模板templates迭代与条件判断迭代:with_items迭代嵌套子变量roles 六、playbook 运…...
使用go生成、识别二维码
1、下载 # 创建目录 # 进入目录 # 执行 go mod init xxx 命令(即:在当前目录初始化创建一个模块)# 下载gozxing go get github.com/makiuchi-d/gozxing 2、生成二维码 package mainimport ("image/png""os""gith…...
LLama系列模型简要概述
LLama-1(7B, 13B, 33B, 65B参数量;1.4T tokens训练数据量) 要做真正Open的AI Efficient:同等预算下,增大训练数据,比增大模型参数量,效果要更好 训练数据: 书、Wiki这种量少、质量高…...
2022 年“泰迪杯”数据分析技能赛A 题竞赛作品的自动评判
2022 年“泰迪杯”数据分析技能赛A 题竞赛作品的自动评判 完整代码请私聊 博主 一、背景 在各类学科竞赛中,常常要求参赛者提交 Excel 或/和 PDF 格式的竞赛作品。 本赛题以某届数据分析竞赛作品的评阅为背景,要求参赛者根据给定的评分准则和标准答案&a…...
MYSQL表联接算法深入研究
在关系型数据库中,表联接是一种常见的操作,它使得我们可以根据不同的条件将多个表中的数据进行连接。而MySQL作为一种常用的关系型数据库,其表联接算法包括NLJ、BNL、BKA、BNLH等多种,在实际应用中选择不同的算法还需要考虑到数据…...
markdown中画图功能mermaid
mermaid Mermaid 是一种开源的可交互式的数据可视化库,它使用 Markdown 标记语言来生成图表和流程图。它通常用于生成网站或文档中的图表。Mermaid 不属于任何公司,而是一个由社区开发和维护的开源项目。 官方网站: https://mermaid-js.git…...
SCI论文丨机器学习与深度学习论文
目录 第一章、ChatGPT-4o使用方法与技巧 第二章、ChatGPT-4o辅助文献检索、总结与分析 第三章、ChatGPT-4o辅助学术论文选题、创新点挖掘与实验方案设计 第四章、ChatGPT-4o辅助学术论文开题与大纲生成 第五章、ChatGPT-4o辅助学术论文写作马拉松活动介绍 第六章、ChatGPT…...
linux系统编程(二)
1、fcntl #include <unistd.h> int fcntl(int fd, int cmd, ...)fcntl用于控制文件描述符,该系统调用有很多功能,功能用cmd来控制,fcntl后面的参数根据cmd来填充。 我们常用的cmd有: F_GETFL:获取文件状态标志…...
uni-app登录界面样式
非常简洁的登录、注册界面模板,使用uni-app编写,直接复制粘贴即可,无任何引用,全部公开。 废话不多说,代码如下: login.vue文件 <template><view class"screen"><view class"…...
windows C#-定义抽象属性
以下示例演示如何定义抽象属性。 抽象属性声明不提供属性访问器的实现,它声明该类支持属性,而将访问器实现留给派生类。 以下示例演示如何实现从基类继承抽象属性。 此示例由三个文件组成,其中每个文件都单独编译,产生的程序集由…...
ERROR: KeeperErrorCode = NoNode for /hbase/master
原因分析 通过上面的情景模拟,我们可以看到报错的原因在于zookeeper中出现问题,可能是zookeeper中的/hbase/master被删除,或者是在hbase集群启动之后重新安装了zookeeper,导致zookeeper中的/hbase/master节点数据异常。 1. 停止…...
Deepin 23 踩坑记
(首发地址:学习日记 https://www.learndiary.com/2024/12/deepin23-questions/) Deepin 23 是由统信软件技术有限公司牵头开发一款开源 Linux 桌面操作系统(参考链接1),从2022年发布预览版(参考…...
mysql笔记——索引
索引 InnoDB采用了B树索引结构。 相比于二叉树,层级更少,搜索效率高。 B树中叶子节点和非叶节点都会存储数据,导致段页式存储中一页存储的键值减少,指针也会减少,要同样保存大量数据,只能增加树的高度&a…...
考研数据结构——简答题总结
数据结构的4种基本结构及特点: 数组(Array): 特点:数组是一种线性数据结构,使用连续的内存空间存储元素,可以通过索引直接访问任意位置的元素。优点:访问速度快,因为元…...
Qt Creator 里面设置MSVC 为 utf-8
在使用 Qt Creator 和 MSVC(Microsoft Visual C++)编译器进行开发时,我们可能会遇到中文乱码的问题。这通常是由于编码设置不正确导致的。 在 Qt Creator 中,你可以通过以下步骤设置默认编码为 UTF-8: 打开 Qt Creator,选择菜单栏中的“工具”(Tools) > “选项”(Opti…...
Java阶段三06
第3章-第6节 一、知识点 理解MVC三层模型、理解什么是SpringMVC、理解SpringMVC的工作流程、了解springMVC和Struts2的区别、学会使用SpringMVC封装不同请求、接收参数 二、目标 理解MVC三层模型 理解什么是SpringMVC 理解SpringMVC的工作流程 学会使用SpringMVC封装请求…...
Helm安装Mysql8主从复制集群
目录 一、Helm安装 二、安装mysql 1、拉取镜像 2、修改配置文件 3、创建mysql-secret 4、安装 一、Helm安装 这里不再赘叙,具体安装请参考官网 Helm | 快速入门指南 二、安装mysql 1、拉取镜像 #添加仓库 helm repo add bitnami https://charts.bitnami.c…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
