Matlab+Vrep仿真激光雷达2D建图

  • Matlab+Vrep仿真激光雷达2D建图
    • 写在前面
    • 最终效果视频
    • 项目Github
    • 带有RemoteApi的工程创建
      • 带有RemoteApi的Matlab工程创建
      • 带有RemoteApi的python工程创建
      • 使用remoteApi与Vrep连接起来
    • 工程代码细节
      • Vrep工程脚本
      • Matlab 工程代码细节
      • python 工程代码细节

Matlab+Vrep仿真激光雷达2D建图

写在前面

这是我的第一篇CSDN博客,写得很烂是肯定的,会有点伤眼睛,请事先做好准备。
本人是自动化类研一新生,即将在今年9月份入学,我也是接触Vrep不久,之前本科阶段都是在做嵌入式软硬件开发的工作,研究生阶段换了研究方向,要用到Vrep仿真,这篇文章就记录一下我的一个练手小项目,用Matlab+Vrep实现动态建图。
文章中有三个小工程:Vrep工程,Matlab工程与python工程,其中python工程就是写了一个小的遥控器来遥控小车动起来而已。
此外,这个工程是在windows下运行的。

最终效果视频

视频链接:
(bilibili) Matlab+Vrep动态建图

项目Github

Github链接:
点这里直接跳转
https://github.com/wangrui449966/Matlab_Vrep_2d_mapping

用法:
分别用Vrep、Matlab(我用的是R2019a 64-bit)、python(建议使用pyCharm)打开三个工程以后,
先运行Vrep仿真,然后运行Matlab和python工程,选中python工程的窗口,按键盘上的上下左右键来控制小车的运动,同时matlab会进行动态建图。
注:python需要安装pygame包(pip install pygame)

带有RemoteApi的工程创建

Vrep为了与其他语言联调,提供了很方便的remoteApi

带有RemoteApi的Matlab工程创建

在Vrep的安装目录中可以找到包含RemoteApi的.m文件的文件夹

[Vrep安装目录]\programming\remoteApiBindings\matlab\matlab

我们只要用到remApi.m与remoteApiProto.m即可
将这两个文件复制到自己的matlab工程的目录里,就可以调用Vrep的RemoteApi了。

由于RemoteApi的底层封装成了dll文件,需要将dll文件复制到matlab的相应文件夹下。
[vrep安装目录]\programming\remoteApiBindings\lib\lib\64Bit 中有 remoteApi.dll,将它复制到 [matlab安装目录]\bin\win64 中即可。
到此,带有RemoteApi的Matlab工程创建完毕。

带有RemoteApi的python工程创建

在这个项目中,这不是重点,只是用python写了一个遥控器来控制小车的运动

在Vrep的安装目录中可以找到包含RemoteApi的.py文件的文件夹

[Vrep安装目录]\programming\remoteApiBindings\python\python

我们只要用到vrep.py与vrepConst.py即可
将这两个文件复制到自己的python工程目录里,就可以调用Vrep的RemoteApi了。

由于RemoteApi的底层封装成了dll文件,需要将dll文件复制到python工程目录下。
在**[vrep安装目录]\programming\remoteApiBindings\lib\lib\64Bit** 中有 remoteApi.dll,将它复制到python工程目录下即可。

使用remoteApi与Vrep连接起来

这个项目中用到了两个终端(python端与matlab端)来与Vrep通信,所以需要为这两个终端各开一个端口

  1. Matlab端:
    在Vrep中,打开脚本,在初始化体内添加Socket终端,在这个项目中,我用的是dr20这个小车的脚本
if (sim_call_type==sim_childscriptcall_initialization) then simExtRemoteApiStart(66666)-- Socket Port=66666(for matlab)

在matlab中,添加如下代码即可连接到Vrep

vrep=remApi('remoteApi'); % vrep remoteApi  remApi类实体
vrep.simxFinish(-1); % 关闭所有已经连接的remote,实测不会影响python终端,如果影响了,直接把这句删了完事
dr20ID=c_vrep.simxStart('127.0.0.1',66666,true,true,5000,5);%66666是小车的端口
  1. python端:
    在Vrep中,打开脚本,在初始化体内添加Socket终端,在这个项目中,我用的是dr20这个小车的脚本
if (sim_call_type==sim_childscriptcall_initialization) then simExtRemoteApiStart(56666)-- Socket Port=56666(for python)

在python中,添加以下代码即可连接到Vrep

import vrep
# vrep.simxFinish(-1)  # 断开所有已经连接的remote,这里不执行,避免把matlab中的连接断开
# 我直接把断开所有已经连接的remote给注释了,也没有测试不注释的情况下会不会影响matlab的连接
dr20ID = vrep.simxStart("127.0.0.1", 56666, True, True, 5000, 5)

工程代码细节

Vrep工程脚本

Vrep工程脚本 本文主要就介绍打开Socket端口,至于激光雷达与小车在Vrep中的通信,本文不详细介绍,以后有时间专门另写一篇文章作详细介绍。

打开RemoteApi Socket端口:
在dr20的脚本文件中的初始化段添加如下代码,分别为matlab与python终端打开RemoteApi的Socket接口:

if (sim_call_type==sim_childscriptcall_initialization) then simExtRemoteApiStart(66666)--WR:Socket Port=66666(for matlab)simExtRemoteApiStart(56666)--WR:Socket Port=56666(for python)

Matlab 工程代码细节

在Github上传的工程中已经有比较详细的代码注释,本文将进一步讲解。
(太懒了,有空再写)

python 工程代码细节

我之前是用C和C++比较多,学python还没有一个月,发现这个语言是真的很简单,包也很多很好用,而且作为脚本语言开发起来很方便,不用像CPP工程那样还需要繁琐的配置工程的一些步骤,但是总感觉少了灵魂。

  1. 首先,导入包,这没啥好说的
import pygame as pg  # pygame 包来读取键盘
import vrep
  1. 设置两个方便调节的参数,一个是线速度,一个是角速度,用于遥控
#参数,线速度参数和角速度参数
SET_LINE_SPEED = 3.0
SET_ROTATE_SPEED = 1.0
  1. 初始化Vrep与pygame
    vrep初始化:
    当simxStart返回的clientID小于0时表示获取失败了,表明连接失败,在本项目中出现这种情况有可能是vrep的仿真没有运行。
    如果clientID获取成功,则继续获取轮子的句柄,供之后遥控小车时使用。
    pygame初始化:
    建立一个320*240的窗口,取名叫"vrep_car_control_window"
if True:  # 初始化# vrep初始化# vrep.simxFinish(-1)  # 断开所有已经连接的remote,这里不执行,避免把matlab中的连接断开dr20ID = vrep.simxStart("127.0.0.1", 56666, True, True, 5000, 5)if dr20ID < 0:print("vrep_connection_failed")exit()else:print("vrep_connection_success")handle_left_wheel = vrep.simxGetObjectHandle(dr20ID, "dr20_leftWheelJoint_", vrep.simx_opmode_blocking)handle_right_wheel = vrep.simxGetObjectHandle(dr20ID, "dr20_rightWheelJoint_", vrep.simx_opmode_blocking)vrep.simxAddStatusbarMessage(dr20ID, "python_remote_connected\n", vrep.simx_opmode_oneshot)# pygame初始化pg.init()window = pg.display.set_mode((320, 240))pg.display.set_caption("vrep_car_control_window")
  1. 正常运行时的主循环:
    在主循环中采集键盘的按键情况,并分别判断上下左右是否被按下,并用窗口里的红色小方块的位置来代表按键情况。通过按键情况来设置左右车轮的速度,并发送给Vrep来控制小车的运动。(小车是两轮差速模型)
# 正常运行
end_flag = False
while not end_flag:pg.time.delay(30)# 显示,背景色window.fill((100, 100, 100))# pygame处理for event in pg.event.get():if event.type == pg.QUIT:end_flag = True # 当窗口被关闭时,end_flag为真,退出循环# 检测按键,并遥控小车,并更新显示key_status = pg.key.get_pressed()window_block_position = [160 - 25, 120 - 25]v_line = 0.0v_rotate = 0.0if key_status[pg.K_UP] == 1:window_block_position[1] -= 100v_line += SET_LINE_SPEEDif key_status[pg.K_DOWN] == 1:window_block_position[1] += 100v_line -= SET_LINE_SPEEDif key_status[pg.K_LEFT] == 1:window_block_position[0] -= 100v_rotate -= SET_ROTATE_SPEEDif key_status[pg.K_RIGHT] == 1:window_block_position[0] += 100v_rotate += SET_ROTATE_SPEED# 显示矩形pg.draw.rect(window, (255, 0, 0), (window_block_position[0], window_block_position[1], 50, 50))# 发送速度vrep.simxSetJointTargetVelocity(dr20ID, handle_left_wheel[1], v_line + v_rotate, vrep.simx_opmode_streaming)vrep.simxSetJointTargetVelocity(dr20ID, handle_right_wheel[1], v_line - v_rotate, vrep.simx_opmode_streaming)pg.display.update()
  1. 窗口关闭后退出循环,退出pygame,断开与Vrep的连接
pg.quit()
vrep.simxFinish(dr20ID)
print("python exit")

Matlab+Vrep 激光雷达2D动态建图相关推荐

  1. 机器人操作系统ROS—深度相机+激光雷达实现vSLAM建图与导航 转载

    原文:机器人操作系统ROS-深度相机+激光雷达实现vSLAM建图与导航_wx5d23599e462fa的技术博客_51CTO博客 这次将带大家学习如何使用深度相机实现机器人的视觉SLAM建图及导航. ...

  2. Turtlebot_01——激光雷达运行gmapping建图

    一.基本功能包安装 1.使用环境:Ubuntu14.04 LTS + ROS indigo + hokuyo URG-04LX-UG01(激光型号) 2.安装 Turtlebot包(若要学习源码,修改 ...

  3. 基于固态激光雷达Livox的建图与定位系统!提供Docker自测!

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨黄思渊 来源丨 计算机视觉life 今天介绍一个最新的SLAM开源算法,作者开源了一套完整易用的 ...

  4. 从零开始搭建ROS下无人机激光雷达SLAM——hector_slam建图入门——综述篇

    首先我们看下最终无人机SLAM定位的计算图,然后根据计算图追根溯源分析实现算法在ROS中实现的流程 从图中可以看出总共包含的ros节点有5个,分别所属三个包,其中包1.2是ROS官方现成直接可以使用的 ...

  5. ROS2+cartorgrapher+激光雷达建图并保存

    目录 写在前面 修改记录 安装cartographer 查看cartographer包名字并安装 cartographer初了解 激光雷达底层驱动 编译 编译驱动时遇到的bug 编译完后文件树 配置文 ...

  6. IROS2020开源软硬件!多激光雷达的协同定位建图及在线外参自标定

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文由作者林家荣授权转载,二次转载请联系作者 https://zhuanlan.zhihu.com/p ...

  7. 高精地图构建与SLAM感知优化建图策略

    高精度地图对自动驾驶系统功能研发的影响已经越来越明显,整体上来讲主要包含但不仅限于提升车端感知性能.拓展自动驾驶新功能.动态建图等相关应用.具体体现在如下几个重要方面: 如上所述提升车端感知能力是通过 ...

  8. 实验三 Gmapping建图

    体验内容 使用gmapping方法利用turtlebot底盘移动信息和激光雷达数据进行建图. 1. 安装一些依赖包 sudo apt-get install ros-melodic-move-base ...

  9. 3D-SLAM自搭平台 主动阿克曼 + RS16 + LPMS_IMU LEGO_LOAM 建图

    3D-SLAM自搭平台 主动阿克曼 + RS16 + LPMS_IMU LEGO_LOAM 建图 效果展示: 详细建图(室内+室外)视频链接: 3D-SLAM自搭平台 主动阿克曼 + RS16 + L ...

最新文章

  1. 针对《评人工智能如何走向新阶段》一文,继续发布国内外的跟贴留言449-456条如下:
  2. ipcs ipcrm命令
  3. 数模学习笔记——微分方程
  4. 2021春季每日一题【week6 未完结】
  5. Linux C Socket编程发送结构体、文件详解及实例
  6. 哦!数组还能这么用,学到了!
  7. LINUX用C检查文件的大小的代码
  8. 中文版Photoshop.CS6完全自学教程 李金明.全彩版.pdf
  9. [Accessibility] ****************** Loading GAX Client Bundle ****************
  10. .xib could't be opend. Cound not read archive
  11. 基于vue,自定义条形进度条/辣条进度条
  12. 教你快速查询大量圆通快递单号的物流信息
  13. RSS/RPS/RFS究竟是个什么东西
  14. md5sum命令的使用
  15. 回归本心QwQ背包问题luogu1776
  16. 一个软件公司需要多少前端_开发APP软件需要多少钱?
  17. GCC版本对C++的支持情况
  18. Jmeter录制脚本(二)-----使用代理录制web脚本
  19. 工作之余可以赚钱的副业,这4个副业总有适合你的!
  20. 面经八之牛客网面经整理

热门文章

  1. 人工智能时代 智能助理必须一切
  2. XMind for linux
  3. 小明的游戏1,小明的游戏5(python)
  4. discuzX 论坛列表页获取帖子内容页主题的pid
  5. Ext多文件上传下载
  6. 如何用自媒体引流?学会这3招足矣,日引500+精准粉
  7. Android Studio 自带的 jre 和甲骨文(Oracle)的 JDK
  8. Excel 代码编写 统一去掉单元格左上角的三角符号
  9. 世界杯闲话:谁会取代章鱼保罗
  10. “AttributeError: type object ‘RocCurveDisplay‘ has no attribute ‘from_predictions‘ “.