ROS2机器人编程简述humble-第四章-AN OBSTACLE DETECTOR THAT USES TF2 .1

news2024/11/26 16:52:59

如何检测一个障碍物呢?

视觉、雷达?

可视化效果如何?

机器人所装备的传感器例如感知设备,主要负责环境的获取和识别。

然后,结果发送给电机控制运动,在环境中自主、智能决策和规划。

需要先简单看一下仿真可视化效果。

书中给出两幅图:

ROS2机器人Gazebo是一个专门为机器人应用开发的三维模拟器,它可以帮助机器人开发人员更快、更容易地设计和调试机器人应用。Gazebo提供了一个可视化的环境,可以模拟真实世界的物理环境,并且可以通过ROS2接口与其他机器人应用进行通信。使用Gazebo,可以更快、更容易地开发机器人应用,并且可以在实际环境中更好地测试和调试机器人应用。

机器人Tiago用激光传感器探测障碍物。红色箭头突出显示检测到障碍物的中心读数。

ROS2机器人Rviz2是一个可视化工具,用于显示机器人环境中的消息,提供3D视角来查看机器人的状态和活动。它可以帮助开发者更好地理解机器人当前的状态和活动,以及其他可视化消息。Rviz2提供了一系列的可视化工具,可以帮助开发者更好地理解机器人的状态和活动,比如可视化坐标系、激光扫描消息、点云消息、机器人模型等等。使用Rviz2,可以轻松地查看和调试机器人系统,从而更好地实现机器人目标。

可用于视觉调试的视觉标记

可以用turtlebot复现一下。

打开一个空白的环境:

ros2 launch turtlebot3_gazebo empty_world.launch.py

这时候,如果用topic查看数据可以得到:

网络中,所有计算机和机器人节点都能正常通信,支持windows、linux。

其中/scan

数据太多只看一组:

---
header:
  stamp:
    sec: 140
    nanosec: 162000000
  frame_id: base_scan
angle_min: 0.0
angle_max: 6.28000020980835
angle_increment: 0.01749303564429283
time_increment: 0.0
scan_time: 0.0
range_min: 0.11999999731779099
range_max: 3.5
ranges:
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- .inf
- '...'
intensities:
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- 0.0
- '...'
---

其中,.inf代表此时传感器最大量程中,没有检测到障碍物。

各类障碍物有典型特征。如下分别举例。

机器人正前方有方形障碍物。

数据:

header:
  stamp:
    sec: 266
    nanosec: 306000000
  frame_id: base_scan
angle_min: 0.0
angle_max: 6.28000020980835
angle_increment: 0.01749303564429283
time_increment: 0.0
scan_time: 0.0
range_min: 0.11999999731779099
range_max: 3.5
ranges:
- 0.631385326385498
- 0.6107633709907532
- 0.6275626420974731
- 0.6091671586036682
- 0.6179323196411133
- 0.629402220249176
- 0.6138762831687927
- 0.6203798055648804
- 0.6130021810531616
- 0.6370837688446045
- 0.6302768588066101
- 0.6479257345199585
- 0.6441364288330078
- 0.6394597887992859
- 0.6609111428260803
- 0.6480688452720642
- 0.6676570773124695
- 0.6556036472320557
- 0.6597179770469666
- 0.6508679389953613
- 0.6702691912651062
- 0.671261727809906
- 0.6567016243934631
- 0.6737935543060303
- 0.6872966289520264
- 0.6952883005142212
- 0.7050795555114746
- 0.6851144433021545
- 0.7049869298934937
- 0.6912679076194763
- 0.7239711284637451
- 0.7069382071495056
- 0.7477790713310242
- 0.7354172468185425
- .inf
- .inf
- .inf
- .inf

圆柱体:

数据:

header:
  stamp:
    sec: 408
    nanosec: 739000000
  frame_id: base_scan
angle_min: 0.0
angle_max: 6.28000020980835
angle_increment: 0.01749303564429283
time_increment: 0.0
scan_time: 0.0
range_min: 0.11999999731779099
range_max: 3.5
ranges:
- 1.1339192390441895
- 1.1576037406921387
- 1.1470191478729248
- 1.1520755290985107
- 1.1525921821594238
- 1.1922894716262817
- 1.1875109672546387
- 1.1898000240325928
- 1.2374821901321411
- 1.2563176155090332
- 1.27926504611969
- 1.31011164188385
- 1.366029143333435
- 1.4372227191925049
- .inf
- .inf
- .inf
- .inf
- .inf

这样数据不便于分析和查看,rviz2可以可视化此类数据。

点:

球:

此部分内容需要全面掌握好的。

比如坐标角度与仿真不同?

调整一下

完全对应:

这一章主要内容后续会将障碍物与TF做一个案例。

书中给出的检测转TF代码:

// Copyright 2021 Intelligent Robotics Lab
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include <memory>

#include "br2_tf2_detector/ObstacleDetectorNode.hpp"

#include "sensor_msgs/msg/laser_scan.hpp"
#include "geometry_msgs/msg/transform_stamped.hpp"

#include "rclcpp/rclcpp.hpp"

namespace br2_tf2_detector
{

using std::placeholders::_1;

ObstacleDetectorNode::ObstacleDetectorNode()
: Node("obstacle_detector")
{
  scan_sub_ = create_subscription<sensor_msgs::msg::LaserScan>(
    "input_scan", rclcpp::SensorDataQoS(),
    std::bind(&ObstacleDetectorNode::scan_callback, this, _1));

  tf_broadcaster_ = std::make_shared<tf2_ros::StaticTransformBroadcaster>(*this);
}

void
ObstacleDetectorNode::scan_callback(sensor_msgs::msg::LaserScan::UniquePtr msg)
{
  double dist = msg->ranges[msg->ranges.size() / 2];

  if (!std::isinf(dist)) {
    geometry_msgs::msg::TransformStamped detection_tf;

    detection_tf.header = msg->header;
    detection_tf.child_frame_id = "detected_obstacle";
    detection_tf.transform.translation.x = msg->ranges[msg->ranges.size() / 2];

    tf_broadcaster_->sendTransform(detection_tf);
  }
}

}  // namespace br2_tf2_detector

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/336292.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一篇带你MySQL运维

1. 日志 1.1 错误日志 错误日志是 MySQL 中 重要的日志之一&#xff0c;它记录了当 mysqld启动和停止时&#xff0c;以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时&#xff0c;建议首先查看此日志。 该日志是默认开启的&…

全栈自动化测试技术笔记(二):准备工作的切入点

自动化测试技术笔记(二)&#xff1a;准备工作的切入点 上篇整理的技术笔记&#xff0c;聊了自动化测试的前期调研工作如何开展&#xff0c;最后一部分也提到了工作的优先级区分。 这篇文章&#xff0c;接上篇文章的内容&#xff0c;来聊聊自动化测试前期的准备工作&#xff0…

插件 sortablejs:HTML元素可拖动排序

插件 sortablejs 用于可重新排序拖放列表的JavaScript库&#xff1b;关键链接&#xff1a;npm 地址 Github 地址 安装 npm i sortablejs引入 import Sortable from "sortablejs"HTML <ul id"items"><li>item 1</li><li>item …

Sentinel降级和热点Key限流

目录 一、降级规则 &#xff08;一&#xff09;官网 &#xff08;二&#xff09;基本介绍 &#xff08;三&#xff09;降级策略实战 二、热点key限流 &#xff08;一&#xff09;基本介绍 &#xff08;二&#xff09;官网 &#xff08;三&#xff09;测试 &#xff08…

谷粒学苑第二章前端框架-2.2前端框架开发过程

一、前端框架开发过程 第一步&#xff1a;添加路由 src/router模块用来管理路由。 第二步&#xff1a;点击某个路由&#xff0c;显示路由对应页面内容 component: () > import(/views/table/index), 表示路由对应的页面&#xff0c;是views/table/index.vue页面 第三步&a…

vue的生命周期函数不能使用箭头函数

如果使用过react和vue&#xff0c;应该发现过一个问题&#xff1a;vue告诉我们不应该把方法、生命周期用箭头函数去定义&#xff1b;而在react的类组件中&#xff0c;把方法写成箭头函数的形式却更方便。 要问其原因&#xff0c;大部分人都只把他当一个理所当然的规定。但把这…

Myba tis基础2

接口代理方式代理开发方式介绍编写StudentMapper接口测试代理方式小结动态sql语句动态 SQL 之<**if>**动态 SQL 之<**foreach>**SQL片段抽取分页插件介绍分页插件的使用分页插件的参数获取小结MyBatis的多表操作多表模型介绍多表模型一对一操作多表模型一对多操作多…

Python创意作品说明怎么写,python创意编程作品集

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;Python创意作品说明怎么写&#xff0c;python创意编程作品集&#xff0c;现在让我们一起来看看吧&#xff01; 1、有哪些 Python 经典书籍 书名&#xff1a;深度学习入门 作者&#xff1a;[ 日&#xff3d; 斋藤康毅 …

《Linux运维实战:Centos7.6部署rabbitmq3.9.16镜像模式集群》

一、RabbitMQ集群的三种模式 RabbitMQ有三种模式&#xff1a;单一模式&#xff0c;普通集群模式&#xff0c;镜像集群模式。 单一模式&#xff1a;即单机情况不做集群&#xff0c;就单独运行一个rabbitmq而已。 普通集群模式&#xff1a;普通集群模式下&#xff0c;不同的节点…

TryHackMe-Carnage

Carnage 花了两天学了下wireshark 顺便看一下现在我的红队进程 由于ad在进攻性渗透测试当中已经早早收入囊中&#xff0c;这让我在红队进度中变快 现在&#xff0c;红队路径剩下的room应该都算是在整个path当中比较有难度的了&#xff0c;我不经意的查看了剩下的部分room&…

基于昇腾计算语言AscendCL开发AI推理应用

01 初始AscendCL AscendCL&#xff08;Ascend Computing Language&#xff0c;昇腾计算语言&#xff09;是昇腾计算开放编程框架&#xff0c;是对底层昇腾计算服务接口的封装&#xff0c;它提供运行时资源&#xff08;例如设备、内存等&#xff09;管理、模型加载与执行、算子…

c函数篇 入门 阶乘 ,素数(2019年)数列求和(2021年),完数,完全平方数,因子求和,x的y次方。

目录 1: 计算s1!2!3!......n! 2:素数问题2019 3:编写程序判断一个数是不是完数 4:编写函数 求x的y次方 完成pow(x,y)的功能 5:输出1到1000内所有完全平方数 6:求因子之和 数列求和 1: 计算s1!2!3!......n! #include<stdio.h> long fac(int n) {int i;long s1;for…

龙智宣布与Incredibuild建立战略合作伙伴关系

近日&#xff0c;龙智宣布与领先的加速编译软件提供商Incredibuild建立战略合作伙伴关系。 Incredibuild是一款加速编译工具。凭借其独特的进程虚拟化技术&#xff08;Vritualized Distributed Processing™&#xff09;&#xff0c;使用户能够轻松地加速代码构建、测试和许多…

Windows10下安装git

文章目录安装环境&#xff1a;Windows10 64bit官网下载&#xff1a;https://git-scm.com/download/win国内下载源&#xff1a;https://npm.taobao.org/mirrors/git-for-windows/ 从官网下载Git安装包&#xff0c;双击下载后的安装包Git-2.32.0-64-bit.exe,开始安装 选择HTTPS…

java面试题(十八)spring MVC

3.1 什么是MVC&#xff1f; 参考答案 MVC是一种设计模式&#xff0c;在这种模式下软件被分为三层&#xff0c;即Model&#xff08;模型&#xff09;、View&#xff08;视图&#xff09;、Controller&#xff08;控制器&#xff09;。Model代表的是数据&#xff0c;View代表的…

【解决方案】老旧小区升级改造,视频智能化能力如何提升居民安全感?

一、需求背景 随着我国社会经济的快速发展与进步&#xff0c;城市宜居程度成为城市发展的重要指标&#xff0c;城市的发展面临着更新、改造和宜居建设等。一方面&#xff0c;社区居民对生活的环境提出了更高的要求&#xff1b;另一方面&#xff0c;将“智慧城市”的概念引入社…

[MySQL教程①] - MySQL的安装

目录 ❤ Windows下安装MySQL ❤ 下载mysql installer安装 ❤ 下载zip安装包安装 现在作为服务器操作系统的一般有三种&#xff0c;Windows Server&#xff0c;Linux&#xff0c;Unix&#xff0c;在这里我们只介绍在windows下和linux下安装mysql&#xff0c;Unix下安装应该…

03 AC-AC变换器(ACAC Converter)简介

文章目录0、 杂记1、AC-AC变换器概述2、交流调压电路A 相控交流调压3、交流调压电路B 三相相控交流电压4、交流调压电路C 斩控交流电压5、交流调功电路6、交-交变频电路A 周波变换器7、交-交变频电路B 矩阵变换器8、AC-AC变换器总结0、 杂记 在复杂的周期性振荡中&#xff0c;…

百度贴吧发帖软件如何发布?

百度贴吧发帖软件如何发布&#xff1f;贴吧软件发帖顶帖视频教学&#xff0c;防删图技术视频教学#贴吧发帖#贴吧顶帖 大家好&#xff0c;今天给大家讲一下一个贴软件发电机顶帖的视频教学。先给大家讲一下软件一个发帖。今天我们用的一个软件叫做神机。神机我们现在看到的软件…

RESTful API 为何成为顶流 API 架构风格?

作者孙毅&#xff0c;API7.ai 技术工程师&#xff0c;Apache APISIX Committer 万物互联的世界充满着各式各样的 API &#xff0c;如何统筹规范 API 至关重要。RESTful API 是目前世界上最流行的 API 架构风格之一&#xff0c;它可以帮助你实现客户端与服务端关注点分离&#x…