Unity-ROS与激光雷达小车搭建(五)
创始人
2024-05-24 17:02:31
0

0. 简介

我们在第三章和第四章中详细介绍了如何使用URDF以及Navigation 2,而第五章开始我们将学习如何将前面所学的结合起来,来形成一个Unity与ROS完整且系统的框架

1. 创建并导入URDF

这一部分作为我们第三讲的内容,我们在之前的基础上通过使用ROS2命令操作URDF模型增加激光传感器。具体的代码如下:toio_style.urdf




这就构成了我们最基础的二轮激光雷达小车的结构,通过运行,来将urdf模型在rviz2中打开

ros2 launch urdf_tutorial display.launch.py model:=toio_style.urdf

在这里插入图片描述

然后按照第三章讲到的导入到的几个步骤

  1. 启动Docker,并开放5005和10000端口
docker run -v ~/ros2_ws:/home/ubuntu/colcon_ws:cached -p 6080:80 -p 10000:10000 -p 5005:5005 --shm-size=1024m tiryoh/ros2-desktop-vnc:galactic
  1. 然后下载ROS-TCP-Endpoint并切换到main-ros2分支
cd ~/colcon_ws/src
git clone -b main-ros2 https://github.com/Unity-Technologies/ROS-TCP-Endpoint
  1. 将unity_slam_example下载到~/colcon_ws/src。并安装nav2相关的安装包以及turtlebot3的安装包
sudo apt install ros-foxy-navigation2
sudo apt install ros-foxy-nav2-bringup
sudo apt install ros-foxy-turtlebot3*
source ~/.bashrc
  1. 然后将Nav2的环境变量添加到~/.bashrc
export TURTLEBOT3_MODEL=waffle
export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/opt/ros/foxy/share/turtlebot3_gazebo/models
source ~/.bashrc
  1. 然后完成编译的操作
cd ~/colcon_ws
colcon build
source ~/colcon_ws/install/setup.bash
  1. 在Unity的菜单“Window→Package Manager”中打开“Package Manager”。并使用→Add Package from Git URL安装以下软件包。
https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.ros-tcp-connectorhttps://github.com/Unity-Technologies/URDF-Importer.git?path=/com.unity.robotics.urdf-importerhttps://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.visualizations
  1. 在Unity的菜单“Robotics→ROS Settings”中指定ROS2。并将Robotics-Nav2-SLAM-Example项目中的以下Unity订阅脚本复制到项目的Assets中。并将Unity的Project窗口的“Packages/Robotics Visualization”中的DefaultVisualizationSuite拖拽到Hierarchy窗口。

・AGVController.cs
・TimeStamp.cs
・Clock.cs
・ROSClockPublisher.cs
・TransformExtensions.cs
・TransformTreeNode.cs
・ROSTransformTreePublisher.cs
・LaserScanSensor.cs

在这里插入图片描述
在配置完上述的内容后就可以导入URDF文件了,在Unity的Assets中导入toio_style.urdf。并选择“Import Robot Select form URDF file”。
在这里插入图片描述

2. 添加订阅发布脚本

2.1 AGVController脚本添加

  1. 在Hierarchy窗口中选择toio_style
  2. 解除Controller的检查
  3. 在Inspector窗口中添加AGVController,设置如下
    在这里插入图片描述

2.2 ROSPublisher订阅器添加

  1. 在Hierarchy窗口中,在toio_style下添加空的GameObject,并命名为“ROSPublishers”。
    在这里插入图片描述
  2. 在Hierarchy窗口中,选择ROSPublishers这个GameObject,然后在Inspector窗口中添加ROSClockPublisher和ROSTransformTreePublisher这两个节点脚本
    在这里插入图片描述

2.3 LaserScanSensor添加

  1. 在Hierarchy窗口中选择“toio_style→base_footprint→base_link→scan_base”

  2. 在Inspector窗口中添加LaserScanSensor脚本,设置如下

在这里插入图片描述

3. 实际运行

在ROS侧,运行启动Nav2、SLAM Toolbox和rviz2的launch文件

ros2 launch unity_slam_example unity_slam_example.py

具体代码如下

import os
from launch import LaunchDescription
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
from ament_index_python.packages import get_package_share_directory
from launch_ros.actions import Nodedef generate_launch_description():package_name = 'unity_slam_example'package_dir = get_package_share_directory(package_name)return LaunchDescription({IncludeLaunchDescription(PythonLaunchDescriptionSource(os.path.join(get_package_share_directory('ros_tcp_endpoint'), 'launch', 'endpoint.py')),),Node(package='rviz2',executable='rviz2',output='screen',arguments=['-d', os.path.join(package_dir, 'nav2_unity.rviz')],parameters=[{'use_sim_time':True}]),IncludeLaunchDescription(PythonLaunchDescriptionSource(os.path.join(get_package_share_directory('nav2_bringup'), 'launch', 'navigation_launch.py')),launch_arguments={'use_sim_time': 'true'}.items()),IncludeLaunchDescription(PythonLaunchDescriptionSource(os.path.join(get_package_share_directory('slam_toolbox'), 'launch', 'online_async_launch.py')),launch_arguments={'use_sim_time': 'true'}.items())})

然后在Unity端,用“toio_style→AGVController”在“Mode”中指定“Keyboard”,用Play按钮执行

…详情请参照古月居

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...