首页 > 系统相关 >Windows平台下Unity-ROS环境搭建

Windows平台下Unity-ROS环境搭建

时间:2024-02-01 20:38:23浏览次数:27  
标签:ros Windows TCP Unity tcp 12077 ROS

最近在做AI+机器人的课程项目,因为平常用Unity比较多,所以就想着把Unity和ROS结合起来使用。上Github上面一查发现官方是有做适配的。虽然已经有一段时间没有更新了,但也还能用。搭建的步骤和在搭建过程中遇到的一些问题,在这里记录一下。

ROS-Unity介绍

ROS-Unity就是在原本独立的ROS和Unity之间建立一座桥梁,使其能够实现通讯。Unity官方提供了 ROS TCP EndpointROS TCP Connector 来实现。其中,ROS TCP Endpoint 是一个ROS包,给外界提供了一个接口,ROS TCP Connector是一个Unity包,可以连接到前者提供的接口,这样就实现了ROS和Unity二者的连接。

ROS-Unity整体的架构可由下图表示:

004_01.png

官方的使用教程请参考ROS–Unity Demo Setup,各种不同平台的操作方法和注意事项还是很详细的,推荐去看一看。本文只记录一下Windows平台的搭建过程。

ROS端准备

ROS端有两种准备方法,一是使用预先准备好的整合包,二是在自己已有的ROS环境里面装上 ROS TCP Endpoint。这里我用第一种方法。整合包的文件在 Robotics Hub 仓库里面的 tutorials/ros_unity_integration/ros_docker路径下,可以把仓库整个clone下来或者在releases里面下载下来。

这个Dockfile在Windows下直接构建会出错,所以需要先对它进行一点改动:

...
ENV ROS_WORKSPACE=/catkin_ws

# 新增一行,安装dos2unix
RUN sudo apt-get update && sudo apt-get install -y dos2unix
...
#COPY docker/tutorial /

# 修改一行,使用dos2unix来处理setup.sh后再运行
RUN dos2unix /setup.sh && chmod +x /setup.sh && /setup.sh && rm /setup.sh

WORKDIR $ROS_WORKSPACE
...

回到tutorials\ros_unity_integration目录下,使用如下命令构建Docker镜像:

docker build -t melodic -f ros_docker/Dockerfile .

然后坑就来了,在Windows系统中如果使用 ROS TCP Endpoint 为ROS分配的10000端口,大概率会和其他的进程发生冲突。所以我们需要把这个端口改掉。这里选择12077来作为我们的TCP端口。在任意位置上新建StartContainer.bat来方便后续运行容器,内容如下:

@echo Run roscore after the container is started
@docker run -it --rm --name ros_unity -p 12077:12077 -p 5005:5005 melodic /bin/bash

运行脚本,按照提示运行 roscore,如图:

004_02.png

然后再新建一个脚本StartTerminal.bat,用来在容器已经在运行的时候新建终端。我们在运行 ROS TCP Endpoint 的时候会用到它。内容如下:

@echo Use rosrun ros_tcp_endpoint default_server_endpoint.py _tcp_port:=12077 to setup Unity-ROS communication
@docker exec -it ros_unity /bin/bash

运行该脚本,在新的终端里面执行 rosrun ros_tcp_endpoint default_server_endpoint.py _tcp_port:=12077。这里通过向rosrun传递运行参数,手动指定了TCP端口。执行完如果出现 Starting server on 0.0.0.0:12077 的输出,就是运行成功了。

Unity端准备

Unity-ROS官方项目使用的版本是2021.2,我在测试的时候使用了2022.3.17,也是能够正常使用的。

准备的操作很简单,同样有两种方式:直接从Git导入和通过源文件导入。直接从Git仓库导入的话,在Package Manager里面点击Add from git URL,输入https://github.com/Unity-Technologies/ROS-TCP-Connector.git?path=/com.unity.robotics.ros-tcp-connector即可。如果从源文件导入,可以在 ROS TCP Connector 仓库里面找到com.unity.robotics.ros-tcp-connector这个文件夹,整个放入Unity项目的Packages文件夹。(参考之前关于自定义Package的文章

进入一个场景,新建一个GameObject,挂上ROS Connection脚本,记得把端口改为12077,其余设置维持默认不变就好。
004_03.png

测试运行

点击运行,不出意外的话就可以实现ROS和Unity的正常连接了。在Game视图的左上角有箭头的颜色是蓝色说明连接是正常的,红色则表明连接断开。同时,如果连接建立成功的话,在运行 ROS TCP Endpoint 的终端里面也是可以看到输出的。
004_04.png

标签:ros,Windows,TCP,Unity,tcp,12077,ROS
From: https://www.cnblogs.com/devbobcorn/p/18001765

相关文章

  • Windows 7系统安装时键盘鼠标全部失灵
    现象原因:1、BISO没有开启USB端口;2、安装的系统是没有带USB驱动,如果是Windows7,需要注入USB驱动。(windows10至今没有发现这个问题)方法:1、检查BISO设置是否正确开启USB端口;2、查看主机键盘鼠标是否是PS/2接口,如果是,可以先使用PS/2接口的鼠标和键盘(这种接口目前几乎被淘汰);3、针......
  • Windows Server 2019 安装IIS 服务
    安装步骤1、点击左下角打开开始菜单找到服务器管理器菜单打开服务器管理器2、在弹出的服务器管理器界面找到添加角色和功能3、在弹出的添角色和功能向导中选择下一步4、选择:基于角色或基于功能的安装,然后下一步5、选择:从服务器池中选择服务器,然后下一步6、选择:Web服务器(IIS),......
  • 同时添加多个的远程桌面工具,Windows远程桌面设置多用户同时登录
    WindowsServer版本上的Windows远程桌面服务(RDS)允许多个用户同时登录。但是,在标准的Windows桌面版本(例如Windows10)上,默认情况下,远程桌面是为单个用户一次登录而设计的。这被称为“管理远程桌面”模式。如果要允许多个用户在WindowsDesktopEdition上同时登录,则可能需......
  • ROS2工具介绍
    1.launch用于多节点一起打包,有三种格式,python,xml,yaml其中官方推荐用python的方法创建launch文件,导入lunch包,配置节点和参数在.txt中配置launch文件C++版本install(DIRECTORYlaunchDESTINATIONshare/${PROJECT_NAME})在python版本中配置文件(os.path.join('share',pa......
  • Windows下修改MySQL密码。
    1.win+r  cmd回车 2.cd+MySQL中bin的路径,切换到mysql中 3.通过mysql-u用户名-p指定root用户登录mysql,回车后会提示输入密码,此时输入的是原来的旧密码 4.修改MySQL的用户密码,格式:setpasswordfor用户名@localhost=password('新密码');修改成root如下: 出......
  • Windows Server常见web服务自启动
    1.nginxwindows版的自启动借助WindowsServiceWrapper小工具,将Nginx转换为Windows服务WinSW-x64的下载地址:https://github.com/winsw/winsw/releases将WinSW-x64下载下来后,直接重命名为nginx-service.exe复制到nginx根目录。新建service-logs文件夹在存放服务日志。新建ng......
  • unity中,连续路径上的点排序
    1///<summary>2///路径点排序3///</summary>4///<paramname="start">路径起点</param>5///<paramname="input">路径上所有的点</param>6///<paramnam......
  • Unity3D 帧同步的原理与常用的处理方式详解
    Unity3D是一款广泛应用于游戏开发的跨平台游戏引擎,其帧同步技术是实现多人游戏联机的关键之一。本文将详细介绍Unity3D帧同步的原理以及常用的处理方式,并给出相关的技术详解和代码实现。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏......
  • Unity shader实现水波的技术原理
    Unityshader是Unity引擎中非常重要的一个部分,它可以用来实现各种各样的特效效果,其中包括水波效果。本文将详细讲解Unityshader实现水波的技术原理,并给出相关的Shader代码实现。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏......
  • centeros 8 安装docker
    yumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\......