由于当前的大流行情况,很难在工作场所四处走动,或者购买一些杂货,甚至是与家人和朋友的小型聚会。这个问题的唯一原因是还没有找到疫苗。但仍然继续我们的日常任务,没有任何威胁评估。因此,我们需要设计一个解决方案来解决这个问题,在使用办公室和家庭空间之前提前对它们进行消毒,以减少感染非常危险的冠状病毒的威胁。
我们提出的这个问题的解决方案是安装有我们定制设计的 UV-C 光机制的自主流动站。它将配备 UV-C 灯,并具有远程控制的能力。主要功能是自动对已知空间进行消毒,这是使用安装在漫游车上的 LidaR 传感器完成的。
此外,这款 UV-C Rover 能够进入小型办公室的角落,利用其扩散到每个角落、墙壁和桌子下方的紫外线对这个地方进行消毒。最优先考虑的是保护人们免受这些病毒的侵害。灵活的机制帮助我们实现了这一壮举。
现在,让我们从项目开始。我们将分两部分介绍整个项目:
1.机械设计理解
2. 项目的电子部分
所以,让我们从漫游者的机械部分开始。我们将详细讨论 Rover 的设计、我们的 UV-C 光控制机构的设计以及其他部分。
设计理解包括两个主要部分:
我们将首先从摇杆转向架机制开始。
Rover 有六个轮子,每个轮子都有自己的电机。两个前轮和两个后轮也有单独的转向电机。这种转向能力允许车辆在原地转动,完整的 360 度。四轮转向还允许漫游车转弯和弯曲,进行拱形转弯。摇杆,在流动站的左右各一个,将前轮连接到差速器和后部的转向架。转向架将中轮和后轮连接到摇杆。摇杆转向架机构也提供了最大的稳定性。T6 级铝材因其非常好的强度重量比和良好的机械加工特性而被选作漫游车结构件的材料。机器人的方向是通过控制器和配电板提供给电机的软件命令来控制的。
流动站尺寸(长 x 宽 x 高):0.725 x 0.460 x 0.440 m
转向机构:
所有六个轮子均由 Johnson DC Motors 提供动力,用于前进和后退运动。此外,两个前轮和两个后轮还有一个自由度,配备 NEMA 23 步进电机,用于转向和现场旋转。结果,前后轮将围绕垂直轴旋转。其布置如图(2、3)所示。
基于液压和气动的机构也是一种选择,但流动站是具有移动性的小型设备,因此使用液压和气动将成为其工作的障碍;不仅如此,液压和气动回路的尺寸更大且难以维护,这与该项目的有效目标相矛盾。此外,它们非常昂贵,也阻碍了项目的成本效益。
主要的选择标准是紧凑的尺寸、简单的设计和低成本,所有这些都是通过丝杠机构完成的。除此之外,丝杠具有自锁机构,如果直流减速电机出现故障,该机构将提供帮助,并提供更大的机械优势。丝杠机构所需的零件数量少,承载能力大。此外,它们易于维护和制造的事实降低了流动站的总体成本,从而增加了人们购买产品的可及性。
丝杠机构将满足功能要求,即 UV 源板的速度和提升量。丝杠机构的主要优点是垂直高度的增益。这个丝杠可以达到 4 英尺半的高度,几乎可以到达天花板。
丝杠机构的结构如下:机构应位于的底板。丝杠使用皮带传动与齿轮直流电机连接,皮带传动反过来旋转丝杠。
总共有 3 个支架用于固定和稳定,其中一个用于引导,这是限制顶板旋转所必需的。随着UV板连续上下线性移动,它将逐渐去除固体表面的材料。因此,最好使用耐磨材料进行导向。耐磨材料具有良好的优点,例如在给定成本下使用寿命更长、噪音水平更低、驱动功率消耗更低以及杆上的磨损更均匀。为指南选择的材料是磷青铜。
紫外线灯水平放置;将其水平放置的原因在于,与垂直放置在板上相比,它将覆盖更多的区域,这反过来又增加了有效的体积暴露,并减少了对特定区域进行消毒的时间。
流动站是一种自主设备,能够根据周围的不同情况采取行动。这些功能是通过在漫游车上安装多个传感器来实现的。流动站中央由 Jetson Nano 控制,Jetson Nano 是一款紧凑且功能强大的台式机,具有卡片大小的外形尺寸。为了检测周围环境,Rover 使用了一个 LiDAR 传感器,该传感器位于丝杠上板顶部的高处,可以 360 度检测该区域周围的情况。它不断收集数据并将其发送给 Nano,Nano 会做出不同的决定,例如 Rover 需要移动的速度和方向。一旦获取数据并且漫游车移动,然后使用安装在漫游车各处的超声波传感器检测障碍物,使其能够立即检测任何障碍物,无论是静止的还是移动的,并立即采取行动,例如停止或改变方向。另一个特点是它会记住每次所走的路径,因此只需在前几次手动控制它就可以训练它在特定房间中移动,然后让它使用自己创建的地图进行导航。
现在最重要的过程是通过紫外线进行消毒。为什么是紫外线?原因在于紫外线波长更短,能量更高,足以杀死有害细菌和细菌。它在去污方面非常有效,因为它破坏了将病毒和细菌(包括对抗生素产生更强抗性的“超级细菌”)的 DNA 结合在一起的分子键。将紫外线用于卫生设施已在临床上被批准用于家庭和办公室用途。
由于流动站的占地面积更小,因此它可以到达更小更紧凑的空间来对该区域进行消毒。由于使用了强大的传感器,运动和检测变得更加精确。使用的传感器还可以检测其附近最常触摸的物体,从而更容易确定对特定区域进行消毒所需的时间和时间。有趣的部分是它还对它所追踪的路径进行了消毒,这样附着在漫游车车轮上的细菌或细菌就不会传播。这是流动站使用标准零件制造的,这些零件在市场上很容易买到,便于更换和维护。
为了计算流动站与待消毒表面之间的距离,我们将使用高精度超声波传感器。
如图所示,系统的整体尺寸确保了系统可以到达房间的每个角落,并且可以通过标准的浴室隔间门。
这完成了该项目的机械设计理解部分。现在,我们将继续进行电子设置,并使用激光雷达传感器设置我们的 Nano,并连接一个从处理器(一个 Arduino Mega)并将所有基本传感器也连接到它。
首先,我们将看到用于该项目的硬件组件的详细信息。
所需硬件
1. Jetson Nano 开发套件。NVIDIA® Jetson Nano™ 开发人员套件是一款功能强大的小型计算机,可让您并行运行多个神经网络,用于图像分类、对象检测、分割和语音处理等应用。一切都在一个易于使用的平台中,运行功耗低至 5 瓦。
2. SlamTec RP-LIDAR A1:RPLIDAR A1 是由 Slamtec 开发的低成本 360 度 2D 激光扫描仪(LIDAR)解决方案。系统可在 6 米范围内进行 360 度扫描。生成的 2D 点云数据可用于制图、定位和对象/环境建模。
RPLIDAR A1 的扫描频率在每轮采样 360 个点时达到 5.5 Hz。最高可配置为 10 Hz。RPLIDAR A1 基本上是一个激光三角测量系统。它可以在各种室内环境和没有阳光的室外环境中出色地工作。
3. 锂聚合物电池为 Rover 供电
锂聚合物电池,或更准确地说是锂离子聚合物电池(缩写为LiPo 、LIP 、Li-poly 、Limit-poly等),是一种使用聚合物电解质代替液体电解质的锂离子技术的可充电电池。高电导率半固体(凝胶)聚合物形成这种电解质。这些电池比其他锂电池类型提供更高的比能量,并用于重量是关键特征的应用,如移动设备和无线电遥控飞机。
我们将为我们的漫游车使用锂聚合物电池或锂聚合物电池。最初的建议是使用 2 节电池为整个火星车供电,每节电池的额定电压为 13 V,电池容量超过 5000 mAh。
4. 超声波避障传感器
超声波传感器是一种电子设备,它通过发射超声波来测量目标物体的距离,并将反射的声音转换成电信号。超声波的传播速度比可听声音(即人类可以听到的声音)的速度更快。超声波传感器有两个主要组件:发射器(使用压电晶体发出声音)和接收器(在声音往返于目标后遇到声音)。
为了计算传感器与物体之间的距离,传感器测量从发射器发出声音到与接收器接触之间的时间。该计算公式为D = ½ T x C(其中 D 是距离,T 是时间,C 是声速 ~ 343 米/秒)。
对于我们的漫游车,我们将使用许多此类传感器,这些传感器将持续收集数据,并根据这些数据,检测漫游车周围存在的任何障碍物并采取必要的行动,例如停止漫游车或改变漫游车的方向.
HC-SR04 Sensor Features
5. Arduino Mega 作为从机微控制器
Arduino Mega 2560是基于 AtMega2560 的微控制器板。它有 54 个数字输入/输出引脚(其中 15 个可用作 PWM 输出)、16 个模拟输入、4 个 UART(硬件串行端口)、一个 16 MHz 晶体振荡器、一个 USB 连接、一个电源插孔、一个 ICSP 接头、和一个重置按钮。它包含支持微控制器所需的一切;只需使用 USB 电缆将其连接到计算机或使用 AC-DC 适配器或电池为其供电即可开始使用。
在我们的漫游车中,Mega 将作为 Jetson Nano 的从属设备连接。它将运行一个最小版本的 ROS,由于它有大量的 IO 引脚、IMU、超声波传感器、GPS 传感器和电机驱动器,它将与所有传感器和电机连接。它将收集传感器数据并不断将其发布在相关编程的 ROS 主题上,以便 Jetson Nano 可以根据这些数据做出决策并指示 Mega 相应地控制电机。
现在,我们将使用下表详细了解 Arduino Mega 的技术规格。
6. IMU 方向检测传感器
惯性测量单元( IMU ) 是一种电子设备,它使用加速度计、陀螺仪和磁力计的组合来测量和报告身体的特定力、角速率,有时还包括身体的方向。IMU 通常用于操纵飞机(一种姿态和航向参考系统),包括无人驾驶飞行器 (UAV) 等,以及包括卫星和着陆器在内的航天器。最近的发展允许生产支持 IMU 的 GPS 设备。IMU 允许 GPS 接收器在 GPS 信号不可用时工作,例如在隧道中、建筑物内或存在电子干扰时。无线 IMU 被称为 WIMU。
我们在项目中使用 IMU 来确定我的漫游车将移动的方向。这是我们的漫游车支持的自主导航的必要条件。
7. GPS模块获取机器人当前位置
我们使用 GPS 传感器在我们的机器人中添加导航功能。我们想创建一个系统,在这个系统中,我们只需向机器人提供目的地坐标,漫游车将完成剩下的工作,即计算从当前位置到目的地的路径、避障和感知它前进的方向。
这只有在漫游车上有一个 GPS 传感器时才有可能,这样它就可以在任何给定的时刻感知其当前位置与目的地之间的距离,并检测它何时到达目的地,这是停止的指示。
8.马达
对于不同的设计,电机也会有所不同,所以我也像电机驱动器一样保持这个状态。
现在来了有趣且相当乏味的任务,即项目的软件部分!此设置分为几个部分,让我们开始吧。
i) Nano 上的操作系统设置
首先,当我们开箱即用 Nano 时,我们需要安装操作系统。只需按照下面链接的教程进行操作即可。
ii) 在 Nano 上安装 ROS
这是棘手的部分。Linux 上安装 ROS 的教程有很多,但是大部分都已经过时了,所以我不得不花很多时间来弄清楚这一点。
需要注意的一些重要事项:
首先,大多数教程都介绍了ROS Kinetic 的安装,但它已经过时,因此您不能直接使用 pip install 安装它。因此,我们将不得不使用ROS Melodic 完整桌面版。
因此,只需按照下面的本教程进行操作,但将 kinetic 替换为 Melodic。
如果一切顺利,您将能够看到 catkin_ws 文件夹有 3 个子文件夹,您可以在此使用catkin_make命令成功编译。
此外,您可以在终端中运行命令“roscore”来启动 ROS 服务。
iii) 设置软件来运行我们的汽车
现在,我们必须安装运行流动站所需的所有依赖项。因此,只需按照以下教程进行设置:
1.安装依赖
SSH 进入您的车辆。使用 Ubuntu 或 Mac 的终端。腻子或窗户。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential python3 python3-dev python3-pip libhdf5-serial-dev hdf5-tools nano ntp
或者,您可以从此处为 Jetson Nano 安装 RPi.GPIO 克隆。这不是默认设置所必需的,但在使用 LED 或其他 GPIO 驱动的设备时会很有用。
2.设置虚拟环境
pip3 install virtualenv
python3 -m virtualenv -p python3 env --system-site-packages
echo "source env/bin/activate" >> ~/.bashrc
source ~/.bashrc
3.安装OpenCV
要在 Jetson Nano 上安装 Open CV,您需要从源代码构建它。从源代码构建 OpenCV 需要一些时间,所以请放心。如果你遇到困难,这里我是另一个很好的资源,可以帮助你编译 OpenCV。
注意:在某些情况下,Python OpenCV 可能已经安装在您的光盘映像中。如果文件存在,您可以选择将其复制到您的环境中,而不是从源代码构建。Nvidia 已经表示他们将放弃对此的支持,因此从长远来看,我们可能会构建它。如果这有效:
mkdir ~/mycar cp /usr/lib/python3.6/dist-packages/cv2.cpython-36m-aarch64-linux-gnu.so ~/mycar/ cd ~/mycar python -c "import cv2"
然后你有一个工作版本,可以跳过指南的这一部分。但是,遵循本指南的交换文件部分可以使性能更加可预测并解决内存抖动问题。
注意:在某些情况下,Python OpenCV 可能已经安装在您的光盘映像中。如果文件存在,您可以选择将其复制到您的环境中,而不是从源代码构建。Nvidia 已经表示他们将放弃对此的支持,因此从长远来看,我们可能会构建它。如果这有效:
mkdir ~/mycar cp /usr/lib/python3.6/dist-packages/cv2.cpython-36m-aarch64-linux-gnu.so ~/mycar/ cd ~/mycar python -c "import cv2"
然后你有一个工作版本,可以跳过指南的这一部分。但是,遵循本指南的交换文件部分可以使性能更加可预测并解决内存抖动问题。
构建 OpenCV 的第一步是在 Jetson Nano 上定义交换空间。Jetson Nano 有 4GB 的 RAM。这不足以从源代码构建 OpenCV。因此我们需要在 Nano 上定义交换空间以防止内存抖动。
# Allocates 4G of additional swap space at /var/swapfile
sudo fallocate -l 4G /var/swapfile
# Permissions
sudo chmod 600 /var/swapfile
# Make swap space
sudo mkswap /var/swapfile
# Turn on swap
sudo swapon /var/swapfile
# Automount swap space on reboot
sudo bash -c 'echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab'
# Reboot
sudo reboot
现在你应该有足够的交换空间来构建 OpenCV。让我们使用构建 OpenCV 的先决条件来设置 Jetson Nano。
# Update
sudo apt-get update
sudo apt-get upgrade
# Pre-requisites
sudo apt-get install build-essential cmake unzip pkg-config
sudo apt-get install libjpeg-dev libpng-dev libtiff-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libgtk-3-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install python3-dev
现在您应该具备所需的所有先决条件。所以,让我们继续下载 OpenCV 的源代码。
# Create a directory for opencv
mkdir -p projects/cv2
cd projects/cv2
# Download sources
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.1.0.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.1.0.zip
# Unzip
unzip opencv.zip
unzip opencv_contrib.zip
# Rename
mv opencv-4.1.0 opencv
mv opencv_contrib-4.1.0 opencv_contrib
让我们为 OpenCV 准备好我们的虚拟环境 (env)。
# Install Numpy
pip install numpy==1.16.4
现在让我们正确设置 CMake,以便它为我们的虚拟环境生成正确的 OpenCV 绑定。
# Create a build directory
cd projects/cv2/opencv
mkdir build
cd build
# Setup CMake
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
# Contrib path
-D OPENCV_EXTRA_MODULES_PATH=~/projects/cv2/opencv_contrib/modules \
# Your virtual environment's Python executable
# You need to specify the result of echo $(which python)
-D PYTHON_EXECUTABLE=~/env/bin/python \
-D BUILD_EXAMPLES=ON ../opencv
cmake 命令应显示配置摘要。确保解释器设置为与您的virtualenv 关联的 Python 可执行文件。注意:CMake 设置中有多个路径,请确保它们与您下载和保存 OpenCV 源的位置相匹配。
要从 build 文件夹编译代码,请发出以下命令。
make -j2
这需要一段时间。去喝杯咖啡,或者看场电影。一旦编译完成,你就差不多完成了。只有几步之遥。
# Install OpenCV
sudo make install
sudo ldconfig
最后一步是将构建的 OpenCV 本机库正确链接到您的 virtualenv。
本机库现在应该安装在类似于 /usr/local/lib/python3.6/site-packages/cv2/python-3.6/cv2.cpython-36m-xxx-linux-gnu.so 的位置。
# Go to the folder where OpenCV's native library is built
cd /usr/local/lib/python3.6/site-packages/cv2/python-3.6
# Rename
mv cv2.cpython-36m-xxx-linux-gnu.so cv2.so
# Go to your virtual environments site-packages folder
cd ~/env/lib/python3.6/site-packages/
# Symlink the native library
ln -s /usr/local/lib/python3.6/site-packages/cv2/python-3.6/cv2.so cv2.so
恭喜!您现在已完成从源代码编译 OpenCV。
快速检查您是否正确执行了所有操作
ls -al
你应该看到一些看起来像的东西
total 48
drwxr-xr-x 10 user user 4096 Jun 16 13:03 .
drwxr-xr-x 5 user user 4096 Jun 16 07:46 ..
lrwxrwxrwx 1 user user 60 Jun 16 13:03 cv2.so -> /usr/local/lib/python3.6/site-packages/cv2/python-3.6/cv2.so
-rw-r--r-- 1 user user 126 Jun 16 07:46 easy_install.py
drwxr-xr-x 5 user user 4096 Jun 16 07:47 pip
drwxr-xr-x 2 user user 4096 Jun 16 07:47 pip-19.1.1.dist-info
drwxr-xr-x 5 user user 4096 Jun 16 07:46 pkg_resources
drwxr-xr-x 2 user user 4096 Jun 16 07:46 __pycache__
drwxr-xr-x 6 user user 4096 Jun 16 07:46 setuptools
drwxr-xr-x 2 user user 4096 Jun 16 07:46 setuptools-41.0.1.dist-info
drwxr-xr-x 4 user user 4096 Jun 16 07:47 wheel
drwxr-xr-x 2 user user 4096 Jun 16 07:47 wheel-0.33.4.dist-info
要测试 OpenCV 安装,请运行 python 并执行以下操作
import cv2
# Should print 4.1.0
print(cv2.__version__)
iv) 设置 Rp-Lidar A1
现在其他一切都已完成,剩下的唯一设置就是我们的激光雷达传感器。首先,让我们了解一下我们正在使用的设备:
关于 RPLIDAR
RPLIDAR 是由 SlamTec 公司 RoboPeak Team 开发的低成本二维激光雷达解决方案。它可以扫描 6 米半径内的 360° 环境。RPLIDAR 的输出非常适合构建地图、做 slam 或构建 3D 模型。
您可以从 SlamTec 主页 了解有关 rplidar 的更多信息。
您可以从 SlamTec 主页了解更多关于 rplidar 的信息。
如何构建 rplidar ROS 包
如何运行 rplidar ros 包
检查rplidar的串口权限:
ls -l /dev |grep ttyUSB
添加写权限:(如/dev/ttyUSB0)
sudo chmod 666 /dev/ttyUSB0
有两种方法可以运行 rplidar ROS 包
一、运行rplidar节点,在rviz中查看
roslaunch rplidar_ros view_rplidar.launch
您应该在 rviz 中看到 rplidar 的扫描结果。
二、运行 rplidar 节点并使用测试应用程序查看
roslaunch rplidar_ros rplidar.launch
rosrun rplidar_ros rplidarNodeClient
您应该在控制台中看到 rplidar 的扫描结果
如何重新映射 USB 串口名称
也许您应该更改具有读写权限的usb设备端口模式,而不是使端口重新映射为固定名称。安装 USB 端口重映射:./scripts/create_udev_rules.sh
也许您应该更改具有读写权限的usb设备端口模式,而不是使端口重新映射为固定名称。安装 USB 端口重映射:./scripts/create_udev_rules.sh
使用以下命令检查重映射:
ls -l /dev | grep ttyUSB
使用以下命令检查重映射:
ls -l /dev | grep ttyUSB
更改 USB 端口重映射后,您可以更改有关 serial_port 值的启动文件。
更改 USB 端口重映射后,您可以更改有关 serial_port 值的启动文件。
RPLidar 框架
RPLidar 帧必须按照 rplidar-frame.png 中显示的图片进行广播
如何将 rplidar 安装到您的机器人上
rplidar 顺时针方向旋转。第一个范围来自前面(带有线的尾部)。
rplidar 顺时针方向旋转。第一个范围来自前面(带有线的尾部)。
将激光雷达传感器安装到机器人上时,请记住其方向。这是轴的样子:
现在已经完成了,只需尝试运行示例启动文件“view_rplidar”并查看 rviz 中主题“/scan”的扫描结果。它看起来像这样:
Rviz 可视化
现在,为了向我们的应用程序添加 slam,有几种可用的算法。但是,我们为我们的项目选择了Hector Slam 。那么,让我们继续:
Jetson Nano 的 Hector Slam 设置
我们不能像对 rplidar 那样使用 Hector slam is the nano 的原生 git hub 存储库。我们需要对 Hector slam 文件进行一些更改以使其启动并运行。首先,这是您需要运行的命令:
cd catkin_ws/src/
git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam
现在,在它被克隆之后,我们需要进行以下更改:
在 catkin_ws/src/rplidar_hector_slam/hector_slam/hector_mapping/launch/mapping_default.launch
用替换倒数第二行
第三行
第四行
在 catkin_ws/src/rplidar_hector_slam/hector_slam/hector_slam_launch/launch/tutorial.launch
将第三行替换为
现在这些更改已经完成,我们可以继续运行以下命令:
cd ..
catkin_make
现在,如果一切按计划进行,这将成功编译。这意味着我们已经准备好在我们的 Nano 上运行 hector slam。请按照以下步骤操作:
运行chmod 666 /dev/ttyUSB0
或激光雷达的串行路径
roslaunch rplidar_ros rplidar.launch
oslaunch hector_slam_launch tutorial.launch
RVIZ Slam 数据将如下所示:
因此,现在我们的系统可以映射周围环境。这是一项正在进行的工作,很快就会添加新功能。
现在,让我们看一下我们将用于该项目的 UV-C 灯规格:
UV-C Rover 是带轮子的消毒系统,用于对房间进行消毒。UV-C Rover 上安装了 2 个直径为 T18、带有 2 针双端子的 25 瓦 UV-C 灯。每盏灯的平均 UV-C 杀菌波段为 25 nm,在一米距离处的发射量为 90 µW/cm2。
现在,我们将粗略估算一下建造整个项目的成本。正如我们上面所做的那样,我们将 BOM 分为两部分:
1.机械部件
2.电子元件
因此,从上面的 BOM 表中可以看出,我们基本上可以用不到 800 美元的价格构建一个功能齐全的原型。实际上,我们实际上已经构建了带有火箭转向架机构的第一个漫游者原型,其图像如下所示:
我们目前正在研究梯形丝杠机构,并使用我们用于该项目的 UV-C 灯进行测试。我们将很快更新所有细节。代码也在进行中,git repo 将很快更新。
这完成了我们的项目解释。请喜欢并分享这个项目。
谢谢你!
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !