<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 10.4 map_server & amcl 在某些固定場景下,我們已經知道了地圖(無論通過SLAM還是測量),這樣機器人每次啟動最好就能直接加載已知地圖,而是每次開機都重建。在這種情況下,就需要有一個節點來發布`/map`,提供場景信息了。 ## 10.3.1 map_server map_server是一個和地圖相關的功能包,它可以將已知地圖發布出來,供導航和其他功能使用,也可以保存SLAM建立的地圖。 要讓map_server發布`/map`,需要輸入給它兩個文件: * 地圖文件,通常為pgm格式; * 地圖的描述文件,通常為yaml格式 例如在`ROS-Academy-for-Beginners`里,我們提供了軟件博物館的地圖文件,見`slam_sim_demo/maps`下: Software_Museum.pgm ![slam_gmapping](https://img.kancloud.cn/4a/2a/4a2a3129ef9c12dbfab8fe84faf1e9ba_505x495.png) Software_Museum.yaml ```xml image: Software_Museum.pgm #指定地圖文件 resolution: 0.050000 #地圖的分辨率 單位為m/pixel origin: [-25.000000, -25.000000, 0.000000] #地圖的原點 negate: 0 #0代表 白色為空閑 黑色為占據 occupied_thresh: 0.65 #當占據的概率大于0.65認為被占據 free_thresh: 0.196 #當占據的概率小于0.196認為無障礙 ``` 其中占據的概率 occ = (255-color_avg)/255.0, color_avg為RGB三個通道的平均值。 有了以上兩個文件,你可以通過指令來加載這張地圖,map_server相關命令如下: | map_server命令 | 作用 | | :------: | :------: | | `rosrun map_server map_server Software_Museum.yaml` | 加載自定義的地圖 | | `rosrun map_server map_saver -f mymap` | 保存當前地圖為mymap.pgn和mymap.yaml | 當我運行`rosrun map_server map_server ***.yaml`時,會有以下的通信接口: ### Topic 通常我們是在launch文件中加載map_server,發布地圖。而map_server發布的消息包括: * /map_metadata: 發布地圖的描述信息 * /map: 發布鎖存的地圖消息 ### Service amcl的服務只有一個: * static_map: 用于請求和響應當前的靜態地圖。 ### Param amcl有一個參數需要設置,就是發布地圖的frame。 * ~frame_id: string類型,默認為map。 綁定發布的地圖與tf中的哪個frame,通常就是map。 有兩個概念不要搞混淆,map既是一個topic,也是一個frame,前者是topic通信方式中的一個話題,信息交互的頻道,后者是tf中的一個坐標系,map_frame需要和其他的frame相連通。 ## 10.3.2 amcl Adaptive Mentcarto Localization(AMCL),蒙特卡洛自適應定位是一種很常用的定位算法,它通過比較檢測到的障礙物和已知地圖來進行定位。 AMCL上的通信架構如上圖所示,與之前SLAM的框架很像,最主要的區別是`/map`作為了輸入,而不是輸出,因為AMCL算法只負責定位,而不管建圖。 ![slam_gmapping](https://img.kancloud.cn/d0/51/d0515ab5d8334845b69ba87e5899dd9f_1838x815.JPG) 同時還有一點需要注意,AMCl定位會對里程計誤差進行修正,修正的方法是把里程計誤差加到`map_frame`和`odom_frame`之間,而`odom_frame`和`base_frame`之間是里程計的測量值,這個測量值并不會被修正。這一工程實現與之前gmapping、karto的做法是相同的。 ![slam_gmapping](https://img.kancloud.cn/f3/12/f31233922814113db6517ef91bb1b0ec_960x720.png) ### 演示截圖 amcl算法演示效果圖如下: ![](https://img.kancloud.cn/e9/41/e941748bead805be8554f9bdd0098963_987x899.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看