본문 바로가기
Robot/ROS

[simulator] Detecting 장애물 오픈 소스

by 9루트 2022. 2. 24.
kw-cobot@kwcobot-HGDT-Series:~$ roslaunch rosbridge_server rosbridge_websocket.launch 

 

네트워크 disconnect - connect 전환해주기

TF2 꺼주기

 

 

2022-02-24 14:55:22+0900 [-] [INFO] [1645682122.695066]: Client connected.  4 clients total.
2022-02-24 14:55:22+0900 [-] [INFO] [1645682122.702337]: Client connected.  5 clients total.
2022-02-24 14:55:22+0900 [-] [INFO] [1645682122.704764]: Client connected.  6 clients total.
2022-02-24 14:55:22+0900 [-] [INFO] [1645682122.707279]: Client connected.  7 clients total.
2022-02-24 14:55:24+0900 [-] [INFO] [1645682124.680945]: [Client 12] Subscribed to /cmd_vel
2022-02-24 14:55:24+0900 [-] [INFO] [1645682124.685579]: [Client 15] Subscribed to /scout_light_contro

정상적으로 동작되었다면 위의 결과처럼 7개가 연결된다.

일일히 센서까지 connect 다시 시켜주기

 

subl ~/catkin_ws/src/scout_odom

 

 

 

clustering 알고리즘

Lidar Point를 특정 의미로 묶어서 cluster를 생성한다.

split-and-merge를 이용하여 cluster를 의미 있는 선으로 분해한다.

 

 

 

 

tysik/obstack_detector

https://github.com/tysik/obstacle_detector

 

GitHub - tysik/obstacle_detector: A ROS package for 2D obstacle detection based on laser range data.

A ROS package for 2D obstacle detection based on laser range data. - GitHub - tysik/obstacle_detector: A ROS package for 2D obstacle detection based on laser range data.

github.com

 

소스에서 해야한다.

kw-cobot@kwcobot-HGDT-Series:~/catkin_ws/src$ git clone https://github.com/tysik/obstacle_detector.git

이런 식으로 코드가 불러아진다.

 

워크스페이스에서 해야한다.

kw-cobot@kwcobot-HGDT-Series:~/catkin_ws$ source devel/setup.bash

 

 

3. The launch files

Provided launch files are good examples of how to use obstacle_detector package. They give a full list of parameters used by each of provided nodes.
  • demo.launch - Plays a rosbag with recorded scans and starts all of the nodes with Rviz configured with appropriate panels.
  • nodes_example.launch - Runs all of the nodes with their parameters set to default values.
  • nodelets_example.launch - Runs all of the nodelets with their parameters set to default values.

 

 

 

 

포트폴리오 작성 팁

원인을 파악하고 코드 상의 문제가 아닌 본질적인 문제 파악하기

예를 들면 긴 파란색 부분이 벽을 인식하는 데도 그 중 장애물을 인식하는 부분은 어떻게 해결할 것인가.

이를 해결하기 위해 파라미터값을 바군다. 가장 좋은 건 논문을 찾아본다.

 

source

설정을 불러온다.

setup.bash 설치 파일

 

 

ros 에서 cpp과 python 언어 두 개를 사용한다.

.cpp을 실행하면 .o 에서 .exe 파일로 변경된다. 이미 번역된 .exe파일을 bin이라는 파일에 저장한다.

cd /opt/ros/melodic/ 안

 

catkin build로 번역해주고 devel이라는 폴더 안에 넣어준다.

source devel/ setup.bashrc 나

source devel ~/. bashrc 나 같다.

 

devel에 setup.bash를 불러오면 방금 새롭게 번역한 책들 목록 줄테니 원하는 책 좀 찾아줘 라는 의미

 

 

기본 에디터를 sublime으로 지정해준다.

 

rospack profile

roslaunch obstackle_detector demo.launch

 

rosed obstacle_detector demo.launch

demo 엑셀과 관련된 파일

roslaunch 실행하는패키지이름 런치파일이름

너무 복잡하므로

rosed obstacle_detector demo.launch

도 같은 기능을 한다.

실행하는 패키지 안에 해당 런치파일을 찾아서 실행해준다.

 

 

unset EDITOR를 해주면 리셋 해준다.

 

launch 파일 코드를 보자

<!-- Demonstation of obstacle detector -->
<launch>

  <param name="use_sim_time" value="true"/>  
  <node name="scans_demo" pkg="rosbag" type="play" output="screen" args="--clock --loop $(find obstacle_detector)/resources/scans_demo.bag"/>

  <node name="map_to_scanner_base" pkg="tf2_ros" type="static_transform_publisher" args="0 0 0 0 0 0 map robot"/>
  <node name="scanner_base_to_front_scanner" pkg="tf2_ros" type="static_transform_publisher" args="0.23565 -0.0005 0.06795 0 0 0 robot front_scanner"/>
  <node name="scanner_base_to_rear_scanner" pkg="tf2_ros" type="static_transform_publisher" args="-0.23832 0.00542 0.09888 3.141592 0 0 robot rear_scanner"/>

  <node name="nodelet_manager" pkg="nodelet" type="nodelet" args="manager" output="screen">
    <param name="num_worker_threads" value="20"/>
  </node>

  <node name="scans_merger" pkg="nodelet" type="nodelet" args="load obstacle_detector/ScansMerger nodelet_manager">
    <param name="active"            value="true"/>
    <param name="publish_scan"      value="false"/>
    <param name="publish_pcl"       value="true"/>

    <param name="ranges_num"        value="1000"/>

    <param name="min_scanner_range" value="0.05"/>
    <param name="max_scanner_range" value="10.0"/>

    <param name="min_x_range"       value="-10.0"/>
    <param name="max_x_range"       value="10.0"/>
    <param name="min_y_range"       value="-10.0"/>
    <param name="max_y_range"       value="10.0"/>

    <param name="fixed_frame_id"    value="map"/>
    <param name="target_frame_id"   value="robot"/>
  </node>

  <node name="obstacle_extractor" pkg="nodelet" type="nodelet" args="load obstacle_detector/ObstacleExtractor nodelet_manager">
    <param name="active"               value="true"/>
    <param name="use_scan"             value="false"/>
    <param name="use_pcl"              value="true"/>

    <param name="use_split_and_merge"    value="true"/>
    <param name="circles_from_visibles"  value="true"/>
    <param name="discard_converted_segments" value="true"/>
    <param name="transform_coordinates"  value="true"/>

    <param name="min_group_points"     value="5"/>

    <param name="max_group_distance"   value="0.1"/>
    <param name="distance_proportion"  value="0.00628"/>
    <param name="max_split_distance"   value="0.2"/>
    <param name="max_merge_separation" value="0.2"/>
    <param name="max_merge_spread"     value="0.2"/>
    <param name="max_circle_radius"    value="0.6"/>
    <param name="radius_enlargement"   value="0.3"/>

    <param name="frame_id"             value="map"/>
  </node>

  <node name="obstacle_tracker" pkg="nodelet" type="nodelet" args="load obstacle_detector/ObstacleTracker nodelet_manager">
    <param name="active"                  value="true"/>

    <param name="loop_rate"               value="100.0"/>
    <param name="tracking_duration"       value="2.0"/>
    <param name="min_correspondence_cost" value="0.6"/>
    <param name="std_correspondence_dev"  value="0.15"/>
    <param name="process_variance"        value="0.1"/>  
    <param name="process_rate_variance"   value="0.1"/>  
    <param name="measurement_variance"    value="1.0"/>  

    <param name="frame_id"                value="map"/>

    <remap from="tracked_obstacles" to="obstacles"/>
  </node>

  <node name="obstacle_publisher" pkg="nodelet" type="nodelet" args="load obstacle_detector/ObstaclePublisher nodelet_manager">
    <param name="active"           value="false"/>
    <param name="reset"            value="false"/>

    <param name="fusion_example"   value="false"/>
    <param name="fission_example"  value="false"/>

    <param name="loop_rate"        value="10.0"/>
    <param name="radius_margin"    value="0.25"/>

    <rosparam param="x_vector">[-3.0, -2.5, -2.5, -1.0, -1.0, -0.5, 2.5, 0.2, 2.0, 4.5, 4.0, 1.5]</rosparam>
    <rosparam param="y_vector">[1.5, 0.0, -2.5, 3.0, 1.0, -4.0, -3.0, -0.9, 0.0, 0.0, 2.0, 2.0]</rosparam>
    <rosparam param="r_vector">[0.5, 0.5, 1.5, 0.5, 0.7, 0.5, 1.5, 0.7, 0.7, 1.0, 0.5, 1.0]</rosparam>
    <rosparam param="vx_vector">[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]</rosparam>
    <rosparam param="vy_vector">[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]</rosparam>

    <param name="frame_id"         value="map"/>
  </node>

  <node name="rviz" pkg="rviz" type="rviz" output="screen" args="-d $(find obstacle_detector)/resources/obstacle_detector.rviz"/>

</launch>
<!-- -->

param은

라이더 하나이므로 merger 없어도 된다.

 

kw-cobot@kwcobot-HGDT-Series:~$ cd catkin_ws/
kw-cobot@kwcobot-HGDT-Series:~/catkin_ws$ rosed obstacle_detector demo.launch 
kw-cobot@kwcobot-HGDT-Series:~/catkin_ws$ rosed obstacle_detector nodes.launch 

 

active : 활성화 도 ㅣ어있는지 여부

use_pcl : point cloud 사용하겠다.

 

use_scan: laser scan 사용하겠다.

 

각각 true false 바꾼다.

kw-cobot@kwcobot-HGDT-Series:~$ roslaunch rosbridge_server rosbridge_websocket.launch 
kw-cobot@kwcobot-HGDT-Series:~$ roslaunch obstacle_detector nodes.launch 

그래도

 

결과

 

 

결과를 보면 시뮬레이터와 연결이 잘 되었다는 가정하에 아래와 같이 노란색 선이 나타난다.

 

아래 처럼 장애물이라고 인식되는 물체를 뽑아내어 포인트 클라우드로 나타냈음을 알 수 있다.

 초록색 영역은 오차를 보여주며

라인을 따라 빨간색 부분을 장애물을 있음을 원모양으로 보여준다.

 

'Robot > ROS' 카테고리의 다른 글

두번째  (0) 2022.02.25
참고 자료  (0) 2022.02.25
[라이더] 리눅스에 대해 더 공부  (0) 2022.02.24
[라이더] rviz에서 자동차를 따라가는 sphere 좌표 찍기  (0) 2022.02.24
[Lidar]  (0) 2022.02.23