当前位置: 首页 > news >正文

ROS1云课→15主题与坐标系

ROS1云课→14可视化交互


之前介绍中所涉及的二维三维可视化和交互,如果对应实际传感器,那么需要更多信息。

  1. 传感器发布频率
  2. 传感器时延
  3. 传感器固定在机器人上的位置和姿态
  4. ……

其中,第三点和坐标系密切相关了。

主题与坐标系的关系

如果数据从真实世界中一个物理位置的特定传感器数据发布,主题必须有一个坐标系。例如,相对于机器人底盘的位置上有一个激光传感器(通常在轮式机器人两个轮子的轮轴中间)。如果需要用激光扫描数据去检测环境中障碍物或者构建地图,就必须对激光传感器和底盘所在的位置进行坐标转换。在ROS系统中,带有报文头的消息除了具有时间戳(在不同的消息间进行数据同步非常重要)之外,还要附上frame_id(坐标系标签)。坐标系标签用于区分消息所属的坐标系。

坐标系自身并没有意义,需要的是它们之间的坐标变换。实际上,机器人的tf坐标变换树都会有一个base_link作为根坐标系(或是地图,如果运行导航包的话)。这样,就能够在rqt_tf_tree中通过对比根坐标系和其他坐标系查看机器人相对于真实世界坐标系的运动。

启动如下stdr环境:

roslaunch stdr_launchers server_with_map_and_gui_plus_robot.launch 

机器人特写:

 

rosrun rqt_tf_tree rqt_tf_tree  

对应:

 

而对于现在的示例,只需要知道它们能够在某个坐标系内进行计算从一个坐标系变换到另外一个坐标系,而且包含时间延迟即可。还需要了解tf在系统中会以某个特定的频率进行发布,这样它就会像子系统一样允许遍历坐标变换树以获取其中任意两个坐标系之间的转换,并且可以在系统的任意节点中通过调用tf进行变换。

在rviz中查看一下:

 

 roslaunch stdr_launchers server_with_map_and_gui_plus_robot.launch 
... logging to /home/shiyanlou/.ros/log/dac41a72-29f7-11ed-9d7c-0242ac110007/roslaunch-6310afb5667ca969528f210f-301.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://6310afb5667ca969528f210f:44463/

SUMMARY
========

PARAMETERS
 * /rosdistro: kinetic
 * /rosversion: 1.12.14

NODES
  /
    robot_manager (nodelet/nodelet)
    robot_spawn_6310afb5667ca969528f210f_301_673361009853165653 (stdr_robot/robot_handler)
    stdr_gui_node_6310afb5667ca969528f210f_301_6214498739113013351 (stdr_gui/stdr_gui_node)
    stdr_server (stdr_server/stdr_server_node)
    world2map (tf/static_transform_publisher)

auto-starting new master
process[master]: started with pid [311]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to dac41a72-29f7-11ed-9d7c-0242ac110007
process[rosout-1]: started with pid [324]
started core service [/rosout]
process[robot_manager-2]: started with pid [327]
process[stdr_server-3]: started with pid [328]
process[world2map-4]: started with pid [329]
process[stdr_gui_node_6310afb5667ca969528f210f_301_6214498739113013351-5]: started with pid [330]
process[robot_spawn_6310afb5667ca969528f210f_301_673361009853165653-6]: started with pid [340]
[ INFO] [1662038003.277267214]: Loading map from image "/opt/ros/kinetic/share/stdr_resources/maps/sparse_obstacles.png"
[ INFO] [1662038003.365821274]: Read a 775 X 746 map @ 0.020 m/cell
[robot_spawn_6310afb5667ca969528f210f_301_673361009853165653-6] process has finished cleanly
log file: /home/shiyanlou/.ros/log/dac41a72-29f7-11ed-9d7c-0242ac110007/robot_spawn_6310afb5667ca969528f210f_301_673361009853165653-6*.log
[ WARN] [1662040231.980856267]: Map already loaded!
[ERROR] [1662040231.981109167]: Could not load map, maybe already loaded...

查看sonar数据:

 


<launch>
    
    <include file="$(find stdr_robot)/launch/robot_manager.launch" />
    
    <node type="stdr_server_node" pkg="stdr_server" name="stdr_server" output="screen" args="$(find stdr_resources)/maps/sparse_obstacles.yaml"/>

    <node pkg="tf" type="static_transform_publisher" name="world2map" args="0 0 0 0 0 0  world map 100" />
    
    <include file="$(find stdr_gui)/launch/stdr_gui.launch"/>
    
    <node pkg="stdr_robot" type="robot_handler" name="$(anon robot_spawn)" args="add $(find stdr_resources)/resources/robots/pandora_robot.yaml 1 2 0" />

</launch>


相关文章:

  • 【1. GPIO】
  • Netty——NIO(Selector处理read事件)代码示例
  • 计算机与软件技术系毕业设计(论文)实施意见-计算机毕业设计论文怎么写
  • C/C++语言100题练习计划 83——背包问题(贪心算法实现)
  • JS:数组类型及常用的方法使用
  • Oracle-job跑批变慢案例
  • java/php/python在线求助救援网站vue+elementui
  • Vivado关联Vscode,解决Vscode自动保存和卡顿问题
  • Java基础用Date类编写万年历
  • 前端面试题2
  • 通信算法之七十八:无人机反制—精华总结
  • Leetcode--剑指Offer
  • 【web-攻击应用程序框架】(12.2)共享主机与服务提供商:攻击、保障
  • JavaScript-操作BOM对象
  • position定位总结+元素选择器+window对象的子对象
  • php的引用
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Docker入门(二) - Dockerfile
  • HTML中设置input等文本框为不可操作
  • iOS小技巧之UIImagePickerController实现头像选择
  • Java 网络编程(2):UDP 的使用
  • Java|序列化异常StreamCorruptedException的解决方法
  • npx命令介绍
  • 半理解系列--Promise的进化史
  • 分类模型——Logistics Regression
  • 高性能JavaScript阅读简记(三)
  • 讲清楚之javascript作用域
  • 如何选择开源的机器学习框架?
  • 深入浅出webpack学习(1)--核心概念
  • 微信小程序开发问题汇总
  • 译米田引理
  • 应用生命周期终极 DevOps 工具包
  • 优秀架构师必须掌握的架构思维
  • 白色的风信子
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • #图像处理
  • $.each()与$(selector).each()
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (js)循环条件满足时终止循环
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (三)模仿学习-Action数据的模仿
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET Micro Framework 4.2 beta 源码探析
  • .Net Remoting常用部署结构