ROS2D缩放、拖动平移ROS地图

本文介绍了如何在HTML页面中使用ZoomView和PanView组件对基于ROS的地图进行缩放和平移操作,通过JavaScript实现地图视图的动态调整功能。
摘要由CSDN通过智能技术生成

使用ZoomView、PanView对地图进行缩放平移操作

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>ROS地图</title>
  <script type="text/javascript" src="./js/ros/eventemitter2.min.js"></script>
  <script type="text/javascript" src="./js/ros/roslib.js"></script>
  <script type="text/javascript" src="./js/ros/easeljs.min.js"></script>
  <script type="text/javascript" src="./js/ros/ros2d.js"></script>
</head>

<body>
  <div class="zoom">
    <button onclick="zoomIn()">+ 放大</button>
    <button onclick="zoomOut()">- 缩小</button>
    <button onclick="recovery()">复原</button>
  </div><br>
  <div id="map"></div>

  <script>
    var ros = new ROSLIB.Ros({
      url: 'ws://192.168.66.20:9090'
    });

    var viewer = new ROS2D.Viewer({
      divID: 'map',
      width: 1200,
      height: 800
    });

    var zoomView = new ROS2D.ZoomView({
      rootObject: viewer.scene,
      minScale: 0.01
    });

    var panView = new ROS2D.PanView({
      rootObject: viewer.scene
    });

    var gridClient = new ROS2D.OccupancyGridClient({
      ros: ros,
      rootObject: viewer.scene,
      continuous: true,
      // topic: '/move_base_node/global_costmap/costmap' // 代价地图 topic; 默认值:'/map'
    });

    gridClient.on('change', function () {
      viewer.scaleToDimensions(gridClient.currentGrid.width, gridClient.currentGrid.height);
      viewer.shift(gridClient.currentGrid.pose.position.x, gridClient.currentGrid.pose.position.y);
      zoomView.startZoom(600, 400);
      dragMap();
    });

    // zoom
    var zoomSize = 1

    function zoomIn() {
      zoomSize += 0.1
      zoomView.zoom(zoomSize)
    };

    function zoomOut() {
      zoomSize -= 0.1
      zoomView.zoom(zoomSize)
    };

    function recovery() {
      zoomSize = 1
      zoomView.zoom(zoomSize)
    };

    // pan
    function dragMap() {
      var panKey = false
      viewer.scene.addEventListener('stagemousedown', function (event) {
        panKey = true
        panView.startPan(event.stageX, event.stageY);
      });
      viewer.scene.addEventListener('stagemousemove', function (event) {
        if (panKey === true) {
          panView.pan(event.stageX, event.stageY);
        };
      });
      viewer.scene.addEventListener('stagemouseup', function (event) {
        if (panKey === true) {
          panKey = false;
        };
      });
    };
  </script>
</body>

</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值