制作简单的ROSWEB (2) -使用rosjs 进行栅格地图web端3d可视化

制作简单的ROSWEB (2) -使用rosjs 进行栅格地图web端3d可视化

rosweb可视化上位机

代码下载

本代码是通过网上拼接代码而成的,比较粗糙,是当时本科毕设的一个上位机界面,根据大家的强烈要求,开源此代码,如果对你有帮助,谢谢给赞或者star 喔~~~ ROS WEB可视化上位机
参考博客:
利用Websocket实现ROS与Web的交互
前言:
本次实现的功能主要是,在web浏览器端调用rosjslib实现控制机器人移动、和获取地图显示。因为个人不懂javascript,所以做的比较简陋,主要还是做代码拼接。两部分代码分别为:
一.3d栅格地图可视化
二.web端发布话题,实现按键控制车体前进后退
代码出处:
3d栅格地图可视化
web端发布话题,实现按键控制车体前进后退

环境说明

这里说明一下:
主机为机器人端(机器人master所在的电脑)
从机为浏览器端(可以使windows、linux)

使用我的代码需要主机和从机在同一网段上(同一wifi下)

主机配置

下载rosbridge工具

sudo apt-get install ros-kinetic-rosbridge-suite

启动机器人,我这里的机器人为古月老师的仿真机器人
在这里插入图片描述
在这里插入图片描述

roslaunch  mbot_gazebo mbot_laser_nav_gazebo.launch
roslaunch mbot_navigation gmapping_demo.launch

启动rosbridge websocket

roslaunch rosbridge_server rosbridge_websocket.launch

从机配置

查看主机的ip,注意是主机、主机、主机!!!

ifconfig

在这里插入图片描述

进入lib_web目录下,修改ip为当前ip,此处ip为订阅map显示。
在这里插入图片描述

使用chrome浏览器打开index.html
在这里插入图片描述
输入当前从机的IP地址,注意后缀为:9090 ,点击connect
在这里插入图片描述

连接成功:
从机:连接日记会刷新
在这里插入图片描述
主机:终端显示连接成功
在这里插入图片描述

web端地图显示:
在这里插入图片描述

在这里插入图片描述

主机端rviz地图显示:

通过点击,web端上的按钮可以通过websocket进行/cmd_vel话题发布
在这里插入图片描述

在这里插入图片描述

代码

代码为本人拼接开源代码而成,因为不是很懂前端工具,所以比较多bug,如有需要可以联系本人,谢谢指正。谢谢大家!!!

  • 24
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 27
    评论
要画占据栅格地图可视化,可以使用C++和一些第三方库来实现。以下是一个基本的步骤: 1. 安装SDL库:SDL是一个跨平台的多媒体库,可以用于创建窗口、渲染图像等。你可以在SDL官网下载并安装它。 2. 创建一个窗口:使用SDL创建一个窗口,代码如下: ```c++ #include <SDL2/SDL.h> int main(int argc, char* argv[]) { SDL_Init(SDL_INIT_VIDEO); SDL_Window* window = SDL_CreateWindow("Map", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN); SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 0); SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); SDL_RenderClear(renderer); SDL_RenderPresent(renderer); SDL_Delay(3000); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); return 0; } ``` 这个代码创建了一个名为“Map”的窗口,大小为640x480,背景色为白色,然后在窗口中等待3秒钟,最后关闭窗口。 3. 画占据栅格地图:你需要将占据栅格地图转换为可视化的图像。可以将每个栅格映射为一个矩形,并使用不同的颜色表示不同的占据状态。例如,黑色表示障碍物,白色表示可通行区域。使用SDL的渲染器可以很容易地实现这一点,代码如下: ```c++ void draw_map(SDL_Renderer* renderer, const vector<vector<int>>& map, int cell_size) { int width = map[0].size(); int height = map.size(); for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { SDL_Rect rect = {j * cell_size, i * cell_size, cell_size, cell_size}; if (map[i][j] == 1) { SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); // 障碍物,黑色 } else { SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); // 可通行区域,白色 } SDL_RenderFillRect(renderer, &rect); } } } ``` 这个函数接受一个渲染器、一个占据栅格地图和一个单元格大小,然后根据占据状态渲染每个矩形。 4. 调用渲染函数:将绘制地图的函数传递给渲染器,以便在窗口中显示地图。代码如下: ```c++ int main(int argc, char* argv[]) { SDL_Init(SDL_INIT_VIDEO); SDL_Window* window = SDL_CreateWindow("Map", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN); SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 0); SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); SDL_RenderClear(renderer); // 绘制地图 vector<vector<int>> map = {{0, 0, 0, 0, 0}, {0, 1, 1, 0, 0}, {0, 0, 0, 0, 1}, {0, 1, 0, 0, 0}}; draw_map(renderer, map, 40); SDL_RenderPresent(renderer); SDL_Delay(3000); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); return 0; } ``` 这个代码创建了一个像之前一样的窗口,并调用了`draw_map`函数以绘制地图。 这就是一个简单的占据栅格地图可视化程序。你可以根据需要修改它,并添加更多功能,例如地图编辑器或路径规划算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值