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
소스에서 해야한다.
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 filesProvided 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.
|
포트폴리오 작성 팁
원인을 파악하고 코드 상의 문제가 아닌 본질적인 문제 파악하기
예를 들면 긴 파란색 부분이 벽을 인식하는 데도 그 중 장애물을 인식하는 부분은 어떻게 해결할 것인가.
이를 해결하기 위해 파라미터값을 바군다. 가장 좋은 건 논문을 찾아본다.
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 |