ROS2D缩放、拖动平移ROS地图

Web端 ROS2D缩放、拖动平移ROS地图

具体代码如下:替换sokect地址和引用js地址即可

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <script src="third_scripts/easeljs.min.js"></script>
    <script src="third_scripts/eventemitter2.min.js"></script>
    <script src="third_scripts/roslib.js"></script>
    <script src="third_scripts/ros2d.js"></script>

    <script>
        /**
         * Setup all visualization elements when the page is loaded.
         */
        function init() {
            // Connect to ROS.
            var ros = new ROSLIB.Ros({
                url : 'ws://192.168.42.85:9090'
            });

            // Create the main viewer.
            var viewer = new ROS2D.Viewer({
                divID : 'map',
                width : 600,
                height : 600
            });

            // Add zoom to the viewer.
            var zoomView = new ROS2D.ZoomView({
                rootObject : viewer.scene
            });
            // Add panning to the viewer.
            var panView = new ROS2D.PanView({
                rootObject : viewer.scene
            });

            // Setup the map client.
            var gridClient = new ROS2D.OccupancyGridClient({
                ros : ros,
                rootObject : viewer.scene,
                continuous: true,
                topic: '/slam_map'
            });

            // Add planned path
            var plannedPath = new ROS2D.NavPath({
                ros : ros,
                rootObject : viewer.scene,
                pathTopic : '/plan'
            });

            // Add robot pose and trace
            var robotTrace = new ROS2D.PoseAndTrace({
                ros : ros,
                rootObject : viewer.scene,
                poseTopic : '/robot_pose',
                withTrace : true,
                maxTraceLength : 200
            });

            // Add navigation goal
            var navGoal = new ROS2D.NavGoal({
                ros : ros,
                rootObject : viewer.scene,
                actionTopic : '/move_base'
            });

            // Scale the canvas to fit to the 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);
                // plannedPath.initScale();
                // robotTrace.initScale();
                // navGoal.initScale();
                registerMouseHandlers();
            });


            function registerMouseHandlers() {
                // Setup mouse event handlers
                var mouseDown = false;
                var zoomKey = false;
                var panKey = false;
                var startPos = new ROSLIB.Vector3();
                viewer.scene.addEventListener('stagemousedown', function(event) {
                    if (event.nativeEvent.ctrlKey === true) {
                        zoomKey = true;
                        zoomView.startZoom(event.stageX, event.stageY);
                    }
                    else if (event.nativeEvent.shiftKey === true) {
                        panKey = true;
                        panView.startPan(event.stageX, event.stageY);
                    }
                    else {
                        var pos = viewer.scene.globalToRos(event.stageX, event.stageY);
                        navGoal.startGoalSelection(pos);
                    }
                    startPos.x = event.stageX;
                    startPos.y = event.stageY;
                    mouseDown = true;
                });

                viewer.scene.addEventListener('stagemousemove', function(event) {
                    if (mouseDown === true) {
                        if (zoomKey === true) {
                            var dy = event.stageY - startPos.y;
                            var zoom = 1 + 10*Math.abs(dy) / viewer.scene.canvas.clientHeight;
                            if (dy < 0)
                                zoom = 1 / zoom;
                            zoomView.zoom(zoom);
                        }
                        else if (panKey === true) {
                            panView.pan(event.stageX, event.stageY);
                        }
                        else {
                            var pos = viewer.scene.globalToRos(event.stageX, event.stageY);
                            navGoal.orientGoalSelection(pos);
                        }
                    }
                });

                viewer.scene.addEventListener('stagemouseup', function(event) {
                    if (mouseDown === true) {
                        if (zoomKey === true) {
                            zoomKey = false;
                        }
                        else if (panKey === true) {
                            panKey = false;
                        }
                        else {
                            var pos = viewer.scene.globalToRos(event.stageX, event.stageY);
                            var goalPose = navGoal.endGoalSelection(pos);
                            navGoal.sendGoal(goalPose);
                        }
                        mouseDown = false;
                    }
                });
            }
        }
    </script>
</head>

<body onload="init()">
<h1>Simple Map Example</h1>
<p>
    Run the following commands in the terminal then refresh this page. This will load a map from the
    <tt>ros-groovy-rail-maps</tt>
    package.
</p>
<ol>
    <li><tt>roscore</tt></li>
    <li><tt>rosrun map_server map_server /opt/ros/groovy/share/rail_maps/maps/ilab.pgm
        0.05</tt></li>
    <li><tt>roslaunch rosbridge_server rosbridge_websocket.launch</tt></li>
    <li><tt>rosrun robot_pose_publisher robot_pose_publisher</tt></li>
</ol>
<div id="map"></div>
</body>
</html>


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值