日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

激光雷达建图后基于amcl实现自动定位

發布時間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 激光雷达建图后基于amcl实现自动定位 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

雷達型號:robosens helios(32線)
系統平臺:Linux18.04+ros
新手思路僅供參考。

由于手頭只有一個激光雷達,前期在選擇建圖算法的時候使用的是hector-slam,見連接:學習筆記, 對辦公室進行了建圖和保存,下面使用amcl進行定位。

amcl(adaptiveMonteCarloLocalization)自適應的蒙特卡洛定位,是用于2D移動機器人的概率定位系統。它實現了自適應(或KLD采樣)蒙特卡洛定位方法,該方法使用粒子過濾器根據已知地圖跟蹤機器人的姿態。
調用只需要通過ros安裝navigation包即可(如果沒記錯的話navigation里面包含amcl,只需要安裝navigation就行)。

sudo apt-get install ros-melodic-navigation

安裝后在自己的工作空間創建啟動的launch文件。

<launch> <arg name="map_file" default="/home/test/map_files/mymap_office0.yaml"/><!--加載地圖--> <node name="map_server" pkg="map_server" type="map_server" args="$(arg map_file)" /><!--amcl start--> <node pkg="amcl" type="amcl" name="amcl" output="screen"><!-- Publish scans from best pose at a max of 10 Hz --><param name="odom_model_type" value="diff"/><param name="odom_alpha5" value="0.1"/><param name="transform_tolerance" value="0.2" /><param name="gui_publish_rate" value="10.0"/><param name="laser_max_beams" value="30"/><param name="min_particles" value="500"/><param name="max_particles" value="5000"/><param name="kld_err" value="0.05"/><param name="kld_z" value="0.99"/><param name="odom_alpha1" value="0.2"/><param name="odom_alpha2" value="0.2"/><!-- translation std dev, m --><param name="odom_alpha3" value="0.8"/><param name="odom_alpha4" value="0.2"/><param name="laser_z_hit" value="0.5"/><param name="laser_z_short" value="0.05"/><param name="laser_z_max" value="0.05"/><param name="laser_z_rand" value="0.5"/><param name="laser_sigma_hit" value="0.2"/><param name="laser_lambda_short" value="0.1"/><param name="laser_lambda_short" value="0.1"/><param name="laser_model_type" value="likelihood_field"/><!-- <param name="laser_model_type" value="beam"/> --><param name="laser_likelihood_max_dist" value="2.0"/><param name="update_min_d" value="0.2"/><param name="update_min_a" value="0.5"/><param name="odom_frame_id" value="odom"/><param name="resample_interval" value="1"/><param name="transform_tolerance" value="0.1"/><param name="recovery_alpha_slow" value="0.0"/><param name="recovery_alpha_fast" value="0.0"/> </node> </launch>

launch文件主要干兩件事,一個是加載地圖,一個是啟動amcl節點(同時也給以amcl中的部分參數進行定義)。
這里有個坑就是因為進行定位需要激光雷達和慣導同時進行的,由于手頭只有激光雷達,在啟動激光雷達、啟動轉換二維點(amcl使用的是二維匹配)、啟動amcl節點后,會發現激光雷達和地圖尺寸不匹配、相對位置也不對,并且無法給定初始點。

此處需要增加一個插件laser_scan_matcher,它是利用激光消息/scan來估計位姿,從而發布/odom,可以理解為模擬了慣導。
首先安裝:

sudo apt-get install ros-melodic-laser-scan-matcher

或者安裝scan-tools也可以,這個里面包含了laser_scan_matcher。

sudo apt-get install ros-melodic-scan-tools

然后寫launch文件(文章中的launch可以嘗試結合起來,這樣不用一個一個啟動,但是需要搞清楚先后順序)。

<launch><!-- set up data playback from bag or not--><param name="/use_sim_time" value="false"/><!--publish an example base_link -> laser transform --><node pkg="tf" type="static_transform_publisher" name="base_link_to_laser" args="0.0 0.0 0.0 0.0 0.0 0.0 /base_link /rslidar 10" /><!--start the laser scan_matcher --><node pkg="laser_scan_matcher" type="laser_scan_matcher_node" name="laser_scan_matcher_node" output="screen"><param name="use_imu" value="false"/><param name="use_odom" value="false"/><param name="use_cloud_input" value="false"/><param name="fixed_frame" value = "odom"/><param name="max_iterations" value="10"/></node> </launch>

然后需要通過激光雷達、三維轉二維點云、laser_scan_matcher、amcl節點即可將激光雷達和地圖匹配顯示在rviz中,可以通過在rviz中通過2D-Pose-Estimate可實現手動發布初始位姿,PoseArray可顯示粒子情況。需要注意的是,需要在fixed frame :map下進行初始位姿的發布。此時貌似就能夠通過前后左右自主定位,但是由于初始粒子聚在一起定位過程十分緩慢(不知道我的理解對不對)。

后續想要相對便捷的自主定位,讓初始的粒子分布整個地圖,以便計算位姿,可以通過前后左右移動激光雷達進行自主定位,我這里是加在了amcl的launch包里,在amcl節點啟動后面加上如下命令。

<param name="initial_cov_xx" value="4"/><param name="initial_cov_yy" value="4"/><param name="initial_cov_aa" value="4"/>

激光雷達自主定位

不過這種方法比較慢,尤其是對于有重復相似場景的地方容易定位出現問題,可以手動給一個大概的初始位置然后再讓其自主定位,這樣會快很多。
如果出現定位出錯的時候,可以在終端在終端可以調用ros里面的global_localization服務:

rosservice call /global_localization "{}"

重新調用后粒子會重新鋪滿整個地圖。

總結

以上是生活随笔為你收集整理的激光雷达建图后基于amcl实现自动定位的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。