博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从零开始的仿真之旅——在Ubuntu下配置V-Rep仿真平台下的搭载ROS系统的机器人仿真
阅读量:2383 次
发布时间:2019-05-10

本文共 3597 字,大约阅读时间需要 11 分钟。



目录

第一步 在Windows下完成下列步骤

  1. 分区。将需要分给Linux系统的空间单独划分出来(100G+)**
  2. 下载并制作Ubuntu16.04的U盘启动盘

第二步 安装并配置Ubuntu16.04LTS

  1. 安装双系统。先重启电脑,启动时按F12进入U盘启动。选择刚才分出来的磁盘进行分区创建等后续操作。分区的可行方案如:
分区     空间分配
/ ext4 Pri- 总空间的1/3
/boot ext4 Logi- 200M
swap swap Logi- 4G
/home ext4 Logi- 剩余空间

2. 修改更新源。可搜索“ubuntu16.04源”,根据指引更改 sources.list内容,并联网更新。

可参考:

关于联网: 在Ubuntu系统下难以连接有线网的情况下(如公司环境),可外接 USB无线网卡解决问题。

第三步 安装仿真软件V-rep (V-REP 3.4.0+)

  1. 将(下载 / 拷贝)来的V-REP_PRO_EDU_V3_4_0_Linux.tar.gz文件解压到home
  2. 修改文件夹名字(建议简短,方便呼叫。如 vrep)
可以启动试试:$ cd vrep/$ ./vrep.sh
  • 1
  • 2
  • 3
  • 4
3.  现在可以参考手册学习啦!
  • 1
  • 2

该软件的详细手册可见:

建议多看Shortcuts、Command line、Tutorials

第四步 安装ROS

  • 我们选择的是ROS Kinetic Kame ,点开链接按照指示即可安装。
  • 继续学习:
    • 需要至少完成beginner level。
    • 关于这点,在V-REP User Manual中的ROS tutorial 有提到

第五步:配置RosInterface

  • RosInterface是V-rep官方推荐的用来跟ROS通信的插件
  • 将 /VREP/compiledRosPlugins 中的libv_repExtRosInterface.so库复制到/VREP下,再启动。
    • 若遇到下面问题,需要重新编译该库:

Plugin ‘RosInterface’: loading… /home/bamboohuang/vrep/vrep: symbol

lookup error: /home/bamboohuang/vrep/libv_repExtRosInterface.so:
undefined symbol: _ZN3ros4initERiPPcRKSsj

  • 重新编译该库的流程:

    • 首先需要安装一些相关的软件包:
      sudo apt install git cmake python-tempita python-catkin-tools python-lxml default-jre xsltproc
    • 参考V-REP User Manual 中的ROS tutorial – Indigo。

      FYI:生成的文件主要在/devel/lib和 /src//bin中

    • 参考V-REP User Manual → writing code in and around V-REP → V-REP API framework → ROS interface

  • 若遇到问题:

    Plugin ‘RosInterface’: loading… ROS master is not running. Cannot

    start ‘ROS’ plugin.

    请先启动ROS,再启动V-REP (即应先执行 roscore命令,再执行vrep.sh)

  • 若遇到问题

    Plugin ‘RosInterface’: loading… this plugin requires at least V-REP

    3.4.0 rev9

    你使用的应该是github上最新的版本,这对V-REP的版本要求较高。建议参考上面提到的ROS tutorial–Indigo,直接用自带的vrep/programming/ros_packages中的文件复制到catkin_ws/src/下进行编译;

    当然也可以下载最新版本V-REP:www.coppeliarobotics.com/files/tmp

  • 若遇到下面问题,原因可能是没有正确安装interface:

    Lua runtime error: [string “SCRIPT **“]:32: attempt

    to call global ‘simExtRosInterface_publish’ (a nil value) stack
    traceback: [string “SCRIPT **“]:32: in main chunk

  • 打开vrep 时若显示下面方框内的内容,则说明RosInterface 安装成功:

    这里写图片描述

第六步:配置vrep_ros_bridge(可选)

  • vrep_ros_bridge是ROS官方推荐的用来跟V-rep通信的插件,所有需要的文件与相关指引都可以查看github:
  • 安装步骤按照上面网址中的InstallationPlugin部分进行即可。如果不知道如何建立catkin workspace,可以回到第四步复习。
  • 打开vrep 时若显示下面方框内的内容,则说明RosInterface 安装成功:
    这里写图片描述
    根据需求可做安装上的调整,可能会有细微差别。
    安装后可对照历例程测试:

第七步:运行仿真

  • 首先运行roscore,然后打开vrep,确保所有上述插件安装并加载成功。
  • Open scene ,可以打开对应的 .ttt 文件。如果已经有现有工程,可以打开对应的ttt;没有的话,可以打开软件目录下的例程(参考Tutorial)

  • 此时可以尝试在ROS侧获取vrep场景中的传感器数据,可以尝试下面的语句:

    (注意将“/”后的topicname替换成自己的)

rostopic list rostopic echo /laser_radar  rqt_image_view 或者 rosrun image_view image_view image:=/zed_depth_image(为什么看到的图像是颠倒的?解决方案见E1)
  • 1
  • 2
  • 3
  • 4
  • 控制量的输入
rosrun rqt_publisher rqt_publisher
  • 1

其他遇到的问题:

E.1 ros中图像上下颠倒的问题

  • 问题原因:传输的data是字符串,ros收到后按照数组的方式转换为矩阵。
  • 解决方案:可以在传输前对要传输的数据进行预处理,“颠倒”了再发送给ROS。
    可以参考后面附录里的Lua参考手册。
    这里写图片描述

E.2 激光传感器穿墙问题

这里写图片描述

- 原因是范围参数设置不对。如下所示参数太大,改小到正常值就行。
这里写图片描述

E.3 3d地图在vrep中拖动是会闪,线条很粗糙,成锯齿形

  • 问题原因:vrep中显示使用opengl进行渲染的,opengl存储的数据为float型,如果使用的是double类型的,就会发生数据的截断。
  • 解决方案:将数据改用float类型存储

E.4 生成3d地图后,地图能明显地看出由一个个三角形组成

  • 问题原因:用两个三角形去表示一个四个点组成的面时,没有考虑面的方向问题,导致生成的三角形方向不一致
  • 解决方案:在生成.obj文件时,由f行代表的边使其顺时针或者逆时针保持一致,从而使得生成的三角形面方向一致

E.5 机器人和场景mesh不能相撞,而是直接穿过

  • 问题原因:相关属性没有设置正确
  • 解决方案:分别设置机器人和场景的如下属性:Shape->Show dynamic properties dialog,勾选Body is respondable,同时勾选Local responable mask,使两者有重合部分即可。

E.6 用vrep自带的2D激光雷,仿真特别卡

  • 问题原因:该激光雷达激光雷达是用一个joint和一个测距传感器然后转动扫描构成,扫描使得速度变慢。
  • 解决方案:可以换成Hokuyo URG 04LX UG01_fast.ttm模型。该激光雷达是由两个只有一行的深度摄像头组成,速度快很多。

附录

(一些或许对你有用的链接)

Ubuntu常用快捷键:

Ctrl+Alt+T

Alt+Tab
长按super可以看到快捷按键提示 : )

安装中文sogo输入法:

更新源
V-REP下载
V-rep手册
ROS安装
ROS Kinetic Kame:
ROS Tutorials
vrep_ros_bridge
Create a ROS Workspace (catkin)
roscore err: IOError: [Errno 13] Permission denied
Lua 5.3 参考手册
Lua的string和string库总结:

特别感谢徐宽的支持与帮助~

你可能感兴趣的文章
leetcode 3 无重复字符的最长子串(双指针维持滑动窗口)
查看>>
leetcode 187 重复的DNA序列(哈希or+位运算解决)
查看>>
leetcode 76 最小窗口子串
查看>>
leetcode 70 爬楼梯(动态规划)
查看>>
leetcode 198 打家劫舍(动态规划)
查看>>
leetcode 53 最大子段和(动态规划)
查看>>
C++Primer 拷贝、赋值与销毁
查看>>
C++Primer 变量与引用
查看>>
C++Primer const限定符
查看>>
C++Primer 拷贝控制和资源管理
查看>>
C++Primer 交换操作
查看>>
C++Primer 动态内存管理StrVec类的实现
查看>>
atoi()函数
查看>>
C++Primer 内联函数关键字inline
查看>>
C++Primer:第十二章:智能指针shared_ptr类
查看>>
C++Primer :第十二章:直接管理内存 new and delete
查看>>
C++Primer :第十二章:shared_ptr和new的结合使用
查看>>
C++Primer : 第十二章 :智能指针和异常
查看>>
C++Primer : 第十二章 :allocator类
查看>>
C++ 文件操作I/O流
查看>>