大家好,我是小鱼,最近有些偷懒了,对了,ROS2的第一个五年支持版本发布了,动手学ROS2相关课程和文档也开始正式迁移至Humble版本啦~

本节是拓展章节,主要讲解一下如何给FishBot添加一个超声波传感器。

在实际的机器人开发过程中,我们可能会利用超声波传感器实现实时避障的功能,毕竟超声波的价格相较于激光雷达要便宜很多(便宜的几块钱)。

所以本节我们来说一下如何使用ROS2+Gazebo来仿真超声波传感器。

1.超声波传感器介绍

百科来一段:

超声波传感器是将超声波信号转换成其它能量信号(通常是电信号)的传感器。超声波是振动频率高于20kHz的机械波。它具有频率高、波长短、绕射现象小,特别是方向性好、能够成为射线而定向传播等特点。超声波对液体、固体的穿透本领很大,尤其是在阳光不透明的固体中。超声波碰到杂质或分界面会产生显著反射形成反射回波,碰到活动物体能产生多普勒效应。超声波传感器广泛应用在工业、国防、生物医学等方面。

接着看看长什么样子:

便宜的就长这样子,一共两个头,一个头用于发送波,一个头接收波。这个还稍微高级一点,带一个光敏电阻,可以为超声波数据做一些补偿。

超声波传感器原理是什么呢?

距离=(发送时间-接收时间)*速度/2

看了超声波的原理,你有没有发现和前面的激光雷达传感器是一样的,是的,所以超声波传感器插件和激光雷达传感器插件在Gazebo插件中是同一个:

libgazebo_ros_ray_sensor.so

2.超声波插件配置

直接上配置,接着再解释

2.1 添加超声波关节

超声波总要装在机器人身上某个位置,所以我们先添加一个关节和Joint,为了省事,link我们就只写个名字,你如果有需要可以按照前面的章节那样添加一下。

<link name="ultrasonic_sensor_link" /><joint name="ultrasonic_sensor_joint" type="fixed"><parent link="base_link"/><child link="ultrasonic_sensor_link"/><origin xyz="0.07 0.0 0.076" rpy="0 0 0"/></joint>

2.2 添加Gazebo插件

添加完了关节,我们就可以配置gazebo的插件了,gazebo插件配置如下

<gazebo reference="ultrasonic_sensor_link"><sensor type="ray" name="ultrasonic_sensor"><pose>0 0 0 0 0 0</pose><!-- 是否可视化,gazebo里能不能看到 --><visualize>true</visualize><!-- 扫描速率,也就是数据更新速率 --><update_rate>5</update_rate><ray><scan><!-- 水平扫描的点数 --><horizontal><samples>5</samples><resolution>1</resolution><min_angle>-0.12</min_angle><max_angle>0.12</max_angle></horizontal><!-- 垂直方向扫描的点数 --><vertical><samples>5</samples><resolution>1</resolution><min_angle>-0.01</min_angle><max_angle>0.01</max_angle></vertical></scan><!-- 超声波检测的范围和数据分辨率单位m --><range><min>0.02</min><max>4</max><resolution>0.01</resolution></range><!-- 数据噪声采用高斯噪声 --><noise><type>gaussian</type><mean>0.0</mean><stddev>0.01</stddev></noise></ray><plugin name="ultrasonic_sensor_controller" filename="libgazebo_ros_ray_sensor.so"><ros><!-- 重映射输出的话题名称 --><remapping>~/out:=ultrasonic_sensor_1</remapping></ros><!-- 输出消息的类型,注意与雷达区分,这里是sensor_msgs/Range --><output_type>sensor_msgs/Range</output_type><!-- 射线类型,这里要写ultrasound,注意和雷达区分 --><radiation_type>ultrasound</radiation_type><!-- frame名称,填写link名称即可 --><frame_name>ultrasonic_sensor_link</frame_name></plugin></sensor></gazebo>

3.编译运行测试

3.1Gazebo可视化

添加完成后就可以编译测试下代码

colcon build --packages-select fishbot_description
source install/setup.bash
ros2 launch fishbot_description gazebo.launch.py

没有物体的前面可以放个东西,因为本节是后面补充的,所有小鱼这里有个墙。

3.2话题数据

打开终端,输入下面指令

ros2 topic list
ros2 topic info /ultrasonic_sensor_1
ros2 topic echo /ultrasonic_sensor_1

不出意外可以看到下面的数据

header:stamp:sec: 4458nanosec: 1000000frame_id: ultrasonic_sensor_link
radiation_type: 0
field_of_view: 0.23999999463558197
min_range: 0.019999999552965164
max_range: 4.0
range: 2.6798219680786133

这里的range就是fishbot到墙之间的距离:2.67982

我们来讲一讲超声波传感器的数据类型sensor_msgs/msg/Range

# ros2 topic info /ultrasonic_sensor_1
Type: sensor_msgs/msg/Range
Publisher count: 1
Subscription count: 0

你可以使用ros2 interface show sensor_msgs/msg/Range看到详细的解释,我们翻译一下

# Single range reading from an active ranger that emits energy and reports
# one range reading that is valid along an arc at the distance measured.
# This message is  not appropriate for laser scanners. See the LaserScan
# message if you are working with a laser scanner.
#
# This message also can represent a fixed-distance (binary) ranger.  This
# sensor will have min_range===max_range===distance of detection.
# These sensors follow REP 117 and will output -Inf if the object is detected
# and +Inf if the object is outside of the detection range.std_msgs/Header header # timestamp in the header is the time the ranger# returned the distance reading# Radiation type enums
# If you want a value added to this list, send an email to the ros-users list
uint8 ULTRASOUND=0
uint8 INFRARED=1uint8 radiation_type    # 传感器射线类型# (sound, IR, etc) [enum]float32 field_of_view   # 距离数据对应的弧[rad]的大小,测量物体的范围介于       # -field_of_view/2 到 field_of_view/2 之间。# 0 角度对应于传感器的 x 轴。float32 min_range       # 最小范围值 [m]
float32 max_range       # 最大范围值 [m]#  固定距离需要 min_range==max_rangefloat32 range           # 范围数据 [m]# (Note: values < range_min or > range_max should be discarded)# Fixed distance rangers only output -Inf or +Inf.# -Inf represents a detection within fixed distance.# (Detection too close to the sensor to quantify)# +Inf represents no detection within the fixed distance.# (Object out of range)

结论,主要关注range就可以了。

3.3 在RVIZ2中可视化超声波数据

Add ->By topic->Range

4.总结

本节主要介绍了如何对超声波传感器进行仿真,在导航的过程中我们通常把超声波放到一个代价地图中进行使用。所以学习其仿真还是很有用的。

几块钱的超声波也能仿真?ROS2仿真之添加超声波传感器相关推荐

  1. 靠2块钱月入4万:越朴素的方法,往往越挣钱

    ↑↑↑点上方蓝色小字,关注「临公子的后花园」 记得把临公子置顶或星标哦 01 这两年写公众号,我时常会收到一类留言,大致是: "如何尽快实现财务自由?" "怎样才能提高情 ...

  2. 重磅 | 王劲被百度起诉后首露面:称打印机电脑已报废,赔了318块钱,没接到法院传票

    本文授权转自网易智能(smartman163) 今天,广州市黄埔区.广州开发区与景驰科技就无人驾驶汽车项目签署投资合作协议,景驰科技核心团队将从硅谷迁回黄埔区.广州开发区,建立全球总部,从2018年第 ...

  3. 一个c加一个g是什么牌子_一个G的流量60块钱,为什么会这么贵?

    昨天(2020年4月16日)下午,接到10086一个女孩的电话,向我推荐他们的业务,说中国移动推出一个新方案,每个月的电话费只要再加10元钱,就能够得到12个G的全国通用流量,再加5个G的咪咕视频专享 ...

  4. 11年架构AI技术江湖,李彦宏:1块钱还是100亿,都会投进技术里

    金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 刚刚,一声锣响,HK.9888正式上市交易,开盘市值即突破7100亿港元. 这是百度回港上市的第一天,是百度二次上市的第一天. 同样大有来头 ...

  5. 在任天堂Switch上倒贴30块钱“加班”,我一个程序员还觉得很刺激

    茕茕 发自 凹非寺 量子位 报道 | 公众号 QbitAI 大家好,我是量子位的半吊子程序媛. 在这个周末,我决心远离代码,拿起我的Switch,沉迷倒卖大头菜. 突然间福至心灵:不如顺便看一下esh ...

  6. 细思极恐!只需54块钱,你也能让AI伪造一系列联合国发言

    安妮 发自 凹非寺 量子位 出品 | 公众号 QbitAI 联合国发言生成器了解一下? 最近,有研究人员真就搞出了一个.手握这个生成器,你就可以无限生成逼真的联合国演讲风格的内容. 快速传递假新闻.随 ...

  7. 用100元买100支笔c语言,用C编程!有100块钱,买100支笔,其中钢笔3元,圆珠笔2元,铅笔0.5元,问各买多少支?...

    题目: 用C编程!有100块钱,买100支笔,其中钢笔3元,圆珠笔2元,铅笔0.5元,问各买多少支? 解答: 完整程序如下: main(){ int i3,i2,i05; for (i3=0;i3 猜 ...

  8. 自己做站点(二) 20块钱搞定一个企业站:域名amp;空间申请

    域名注冊的话,推荐大家用新网,由于申请费用确实非常低,但续费的价格还是比較高的,所以不妨多申请几年.打开站点: http://www.xinnet.com/ 注冊一个帐号,然后申请域名,你能够看到,费 ...

  9. 入职三天,公司给了100块钱叫我走人

    十月,金秋季节,本是丰收之时,却因为陆续有同事离职,心中多少有些悲凉之意,顿然想起从参加工作到现在,五年已过,当年青涩懵懂的小年轻,如今出街招摇过市时,被小孩子看到都会喊声大叔.回想这五年,有心酸和无 ...

最新文章

  1. 基础贪心算法(HDU2037今年暑假不AC)
  2. 喂,你连用户模型都不懂还当产品?来,妹纸我手把手教你
  3. CentOS 7 如何按行删除文件内容
  4. smooth l1(huber)+binary cross entropy详解(tensorflow+pytorch)
  5. 论文浅尝 | 用于学习知识图谱嵌入的一种基于注意力机制的新型异构 GNN 框架HRAN...
  6. 关于双向反射率BRDF的定义
  7. 如何检查字符串是否包含特定的单词? [英]How do I check if a string contains a specific word?
  8. php 什么是 cookie? 会话 cookie 与持久性 cookie 之间 有何区别?
  9. Git学习笔记(2)-创建仓库
  10. python字符串以什么为结束符_Python代码中 如何判断字符串是否使用指定字符结尾(endswith)呢?...
  11. 计算机中保留两位小数的表示方法,小数点的表示方法_计算机中表示带小数点的数有两种方法,...
  12. Meshlab的基本使用
  13. 支持向量机SVM和最小二乘支持向量机LSSVM
  14. 数据优化——分库分表(三)中间件讲解
  15. Camera ISP
  16. 高数下-空间几何(一)-向量
  17. Win11电脑名如何更改?Win11更改电脑名的方法
  18. 街舞中的rolling机器人_这,就是街舞中的那些“Swag”十足的舞蹈类型,你了解吗?...
  19. sendgrid html text,Laravel + SendGrid htmlspecialchars()期望参数1为字符串,给定对象
  20. 【分析】CPU hotplug时进程上下文切换流程分析

热门文章

  1. typora的 ctrl shift k 快捷键和搜狗的快捷键冲突了
  2. js时间戳转时间(年-月-日 时:分:秒)
  3. (27)python类的定义和使用
  4. logback 日志脱敏 隐藏PII信息
  5. 矩阵快速幂2Jzzhu and Sequences Recurrences Contemplation! Algebra Reading comprehension
  6. Linux 多线程(附带线程池代码加注释)
  7. mongodb副本集+分片集群部署 step by step
  8. iOS QQ 扫一扫 捷径URL
  9. 2021年危险化学品经营单位安全管理人员考试内容及危险化学品经营单位安全管理人员考试资料
  10. [ISCC 2021]部分wp