ROS2机器人笔记20-08-18
仿真的小贴纸
如何用图形化界面而非代码在仿真环境中配置机器人模型?模型通常为刚体,弹性物体或者柔性物体仿真十分消耗资源!
建立urdf模型的最简单方法是在专用的CAD软件中建立模型,然后将其导入。使用如下教程即可:
如果不采用这种方式,使用xacro构建urdf,SDF如何???(URDF不支持封闭运动链,而SDF支持???)
在Gazebo中建立世界并不是那么困难。只需打开Gazebo,然后导入模型并将其放置在所需的位置,然后生成.world
文件。
一般而言,只能使用传感器插件,而无法自定义虚拟传感器!仿真传感器和真实传感器的差异性也会体现在算法参数上。
紫外线消毒机器人
COVID-19大流行引起了人们对紫外线消毒的新兴趣。自1960年代以来,医院一直使用UV-C光,尤其是254nm范围内的UV-C对病人出院后的房间进行消毒。UV-C已显示出对多种病原体有效的功效。中和不同病原体所需的辐照度差异很大,细菌,尤其是像C.diff之类的“超级细菌”,需要最多的能量和时间。幸运的是,像流感和SARS-CoV-2这样的单链病毒所需的功率相对较小(减少2个对数,即杀灭率达到99%时约为6mJ /cm²)。
为了有效地消毒室内空间,例如酒店房间,仓库和学校,必须在空间中四处移动光源。这对于有效性和效率是必要的:避免阴影,并且因为光的强度随距离呈二次方降低。然而,由于UV-C光对人体有害,所以不可能有人将光源推动或携带穿过空间。这就是产生让机器人执行此任务的想法。
DDS
ROS1和ROS2之间的最大区别之一是基于插件的体系结构替换了单个中间件(roscore)。这使ROS2可以使用各种中间件(RMW)实现。目前,所有这些RMW实现都基于DDS。可以在ROS2设计文档中阅读所有有关详细信息 。
随着时间的流逝,支持RMW实现发生了变化,并引入了新的方案。当前是默认值FastRTPS(重命名为FastDDS,在Foxy发布之后)。最新的选项是CycloneDDS使用 Eclipse Cyclone DDS。Cyclone DDS最近获得了很多好评 。
RMW实现 由于ROS2仍处于积极开发中,因此在RMW实现之间进行选择仍然是一个挑战。FastDDS服务发现有一些问题。CycloneDDS才不到两年的历史,仍处于非常活跃的开发中,并且没有完整的功能,但具有很高的性能。 幸运的是,通过简单地设置RMW_IMPLEMENTATION环境变量,在RMW实现之间进行切换非常容易。 在实现之间切换时,请确保服务停止: ros2 daemon stop 调试问题 尽管FastDDS几乎是开箱即用的,但整个服务问题都困扰着设置/获取参数将RMW_IMPLEMENTATION设置为 rmw_cyclonedds_cpp。注意到服务发现并没有更好。然后我注意到在机器人上设置了RMW_IMPLEMTATION-拼写错误。现在一切都应该一切正常! 错误 在机器人上,发现效果很好,服务也很出色-但是笔记本电脑看不到一半或更多的节点。重新启动启动文件导致经常丢失不同的节点! 开始调试并发现了ddsperf工具。如果在MacOSX上使用ROS2,则需要阅读有关如何安装ddsperf的问题。 多个网络接口 配置指南指出,网络适配器的选择更喜欢非链接本地接口,但是显然在检测到以这种方式配置以太网接口时,某些事情使它陷入了困境。 解决方法是NetworkInterfaceAddress在 CYCLONEDDS_URI环境变量中设置一个: export CYCLONEDDS_URI='<CycloneDDS><Domain><General><NetworkInterfaceAddress>wlp2s0</NetworkInterfaceAddress></General></Domain></CycloneDDS>' 如果容易出现拼写错误,并且想要确保实际上正在运行预期的RMW接口,建议使用以下命令: ros2 doctor --report | grep middleware 几秒钟后,应该看到: middleware name : rmw_cyclonedds_cpp 实际上在bashrc中设置了一个别名,以便which_rmw运行该命令。确定使用Cyclone DDS作为新的默认值后,还将RMW_IMPLEMENTATION和CYCLONEDDS_URI 设置添加到了机器人的bashrc中。 在解决配置问题后,CycloneDDS似乎是尝试过的少数RMW实现中最稳定的。实际上还没有对性能进行过正面测试。
在MacOSX上的ROS2
Blender FreeCAD Gazebo SDF URDF
双四元数
ros-$ROSDISTRO-dual-quaternions-ros
~~
- 浅谈Orabbix监控指标(r6笔记第27天)
- Orabbix定制监控Oracle的简单配置(r6笔记第26天)
- 【java基础】 线程实例
- 记一次数据库的分析和优化建议(r6笔记第24天)
- linux (ubantu)安装最新版python3.6,以及直接安装anaconda
- 【java基础】匿名类
- 朴素贝叶斯法 2016年11月11日
- 11g中关于控制文件自动备份的改进(r6笔记第22天)
- Java基础(02)-15总结对象数组,集合Collection,集合List
- alert日志中的两种ORA错误分析(r6笔记第21天)
- 通过定制orabbix监控分析潜在的Oracle问题 (r6笔记第32天)
- 【C语言练手】C语言画太极图
- 关于奇怪的并行进程分析(一) (r6笔记第41天)
- 关于ora-02391问题的总结(r6笔记第40天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- SpringMVC全局异常处理机制
- centos su sudo wheel
- List集合的坑
- NIO从入门到踹门
- GitHub CLI 1.0.0 正式发布!
- 【Flink】从零搭建实时数据分析系统
- Android模拟面试,解锁大厂——从Activity创建到View呈现中间发生了什么?
- 问你一个简单的问题:IP是怎么来的,又是怎么没的?
- 进击的NIO!Reactor模式!
- 交换机与VLAN:以办公室为例趣讲一波!
- 超详细Netty入门,看这篇就够了!
- Netty进阶之粘包和拆包问题
- 用侦察兵的故事趣讲ICMP和Ping,看完想忘都难!
- Kubernetes 使用 ceph-csi 消费 RBD 作为持久化存储
- ZooKeeper入门,看这篇就够了