// it's for Latex

pages

[SLAM] #15. SLAM with Python

ROS를 이용해 SLAM을 하면서 느낀건
ROS는 정말 편한 Tool이지만, 실제로 code를 보지 않고선 어떻게 알고리즘이 동작하고 시스템이 구성되는지 깊이 이해하기 힘들단 것이었다.

그래서 지금부터는 모든 작업들을 python code를 이용해서 하고, ros는 통신수단 및 각종 툴을 사용하기 위한 역할로만 두기로 하였다.

그러기 위해서 먼저 간단한 SLAM을 구성해보기로 하였다.


SLAM 작업환경 [Labtop]
OS : Ubuntu 16.06 LTS
ROS version : Kinetic
Compiler : catkin
Depth Camera : Intel realsene D435

Simulation 작업환경 [Desktop]
OS: Ubuntu 14.04 LTS
ROS version : Indigo
Compiler : catkin
Depth Camera : Kinect Sensor


먼저 다음 사이트를 참고하여 작업한 것을 알린다.
https://answers.ros.org/question/286221/create-2d-occupancy-grid-map-by-laser-data/

gayan이 올린 답변의 code들을 이용해 rviz에 Occupancy Grid Map topic을 뿌려 다음과 같이 그려보았다. odom topic과 scan topic은 erle-copter gazebo로부터 전달 받았다.







해당 소스에도 SLAM 관련 알고리즘이 존재하지만, 일단 지금은 해당 소스의 SLAM 알고리즘 보다는 python을 이용해 grid map topic을 어떻게 뿌리는지 살펴보았다.

python은 가독성이 좋으므로 main.py과 localmap.py의 code만 보아도 많은 부분을 이해할 수 있을 것이다.

참고로 내가 수정한 부분은 다음과 같다.


i finally worked with this code.
i've changed 3 thing.
  1. odometry topic name to the name i'm subscribed in main.py
  2. there is inf value in my lidar sensor data. so i changed parsing code in localmap.py. line 39, "if not math.isnan(scandata[i]):" to "if not math.isinf(scandata[i]):"
  3. in localmap.py line 65, if(j<len(l.path)-1):self.logodds[index]+=self.pfree. sometimes="" the="" index="" value="" over="" the="" len(self.logodds)="" so="" i="" input="" "if="" (index="" &lt;="" len(self.logodds)):"="" before="" "if="" scandata[i]<self.max_scan_range*range_max:"<="" p="">
hope you guys get helped with it!
 gravatar imagesuho0515 ( 11 mins ago )edit



댓글 없음:

댓글 쓰기