Programming 45

Navigation stack 설명

위 그림은 ROS의 내비게이션 패키지 구동에 필요한 필수 노드와 토픽들의 관계도를 설명한 그림입니다. 이를 내비게이션에 필요한 정보(토픽)를 중심으로 설명하도록 하겠습니다. ① 오도메트리 ( "odom", nav_msgs/Odometry ) 로봇의 오도메트리 정보는 국부 이동 경로 계획(local path planning) 에서 사용하게 되는데 로봇의 현재 속도 등의 정보를 받아서 국부 이동 경로를 생성하거나 장애물 회피 등에 사용됩니다. ② 상대 위치 변환 ( "/tf", tf/tfMessage ) 로봇의 센서의 위치를 예를들어 base_scan 라고 할 때, 이 센서 위치는 로봇의 하드웨어적 구성에 따라 위치가 상대적으로 바뀌기 때문에 ROS에서는 tf 라는 상대 위치 변환을 이용합니다. 이는 단순히..

Programming/ROS 2022.02.22

프로그래머스_가장 큰 수

문제 설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요. 제한 사항 numbers의 길이는 1 이상 100,000 이하입니다. numbers의 원소는 0 이상 1,000 이하입니다. 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다. 입출력 예 numbers numbers [6, 10,..

Programming/Python 2022.02.22

프로그래머스_K번째 수

문제 설명 배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다. 예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면 array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다. 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다. 2에서 나온 배열의 3번째 숫자는 5입니다. 배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요. 제한사항 array의 길이는 1 이상 100 이하입니다. a..

Programming/Python 2022.02.22

ArUcoMarker 실습(+turtlesim)

이전에 OpenCV를 사용해서 진행한 ArUco Marker 실습과 비슷하게 Marker 인식 시, ids 값에 따라 turtlesim을 전진, 후진, 회전하는 실습을 해보았습니다. turtlesim node 실행 시, subscribe하는 "/turtle1/cmd_vel" 토픽과 Twist 메세지 형식을 이용하여 쉽게 구현할 수 있었습니다. 아래는 작성된 코드입니다. #! /usr/bin/env python import rospy from sensor_msgs.msg import Image from cv_bridge import CvBridge from geometry_msgs.msg import Twist import cv2 from cv2 import aruco import numpy as np c..

ArUcoMarker 실습(+OpenCV(Canny, GaussianBlur, ROI))

ArUco Marker 실습으로 이전에 공부했던 OpenCV를 이용해서 Marker 인식 시, 이벤트를 발생시키는 실습을 해보았습니다. Marker를 인식하여 ROI를 설정하였고, 해당 영역은 Marker의 최대, 최소 corners 값을 구해 Marker를 회전켜도 영역 내부로 들어오게끔 하였습니다. 또한, 인식된 Marker의 ids에 따라 ROI를 제외한 배경이 원본 BGR, Gray, Canny, GaussianBlur, Zeros가 되도록 하였습니다. Canny와 Gray 변환 중, BGR2GRAY에서 채널 수가 변경되는 점을 놓쳐 오류를 범했지만, GRAY2BGR을 통해 해결하였습니다. 결과 아래는 작성된 코드입니다. #! /usr/bin/env python import rospy from s..

허브스/스위치/라우터/공유기의 차이점

허브 (L1 더미허브) 허브의 개념 허브는 전기적인 신호를 증폭시켜 LAN의 전송거리를 연장시키고, 여러 대의 디바이스를 연결해 네트워크를 만들어주는 장비입니다. 포트는 허브에 따라 다양하며, 1개의 포트에 한 대의 디바이스가 할당됩니다. 허브로 연결된 네트워크에서 하나의 디바이스에서 전송된 데이터 프레임을 허브로 연결된 모든 디바이스에게 전부 전송하는 플러딩이 발생합니다. 결과적으로 충돌이 많이 발생하여 하나의 허브에는 많은 디바이스를 연결할 수 없습니다. 동일한 이유로 보안성 또한 떨어집니다. 허브는 크게 멀티포트와 리피터 두가지 기능으로 많이 사용됩니다. 멀티포트는 한번에 많은 디바이스를 연결할 수 있는 기능으로, 만약 허브가 없다면 디바이스는 두 대만 연결 가능합니다. 리피터 같은 경우에는 전기적..

Programming/Network 2022.02.16

프로그래머스_전화번호 목록

문제 설명 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조대 : 119 박준영 : 97 674 223 지영석 : 11 9552 4421 전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요. 제한 사항 phone_book의 길이는 1 이상 1,000,000 이하입니다. 각 전화번호의 길이는 1 이상 20 이하입니다. 같은 전화번호가 중복해서 들어있지 않습니다. 입출력 예제 ph..

Programming/Python 2022.02.15

프로그래머스_위장

문제 설명 스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다. 예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다. 종류이름 얼굴 동그란 안경, 검정 선글라스 상의 파란색 티셔츠 하의 청바지 겉옷 긴 코트 스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다. 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다. 같은 이름을 가진 의상은 존재하지 않습니다. clothe..

Programming/Python 2022.02.15

ROS 런치 파일

Launch 파일 사용하기 - 파이썬 파일을 여러개 실행하기 위해 rosrun 을 여러 번 치는 것은 매우 불편하다. 따라서, *.launch 파일을 사용해서 여러 노드를 한꺼번에 실행시킬 수 있다. - 사용법은 아래와 같다. roslaunch [options] [package name] [arg_name:=value...] Launch 파일 작성에 사용되는 Tag - node 태그 실행할 노드 정보를 입력할 때 사용되는 태그 - include 태그 다른 launch 파일을 불러오고 싶을 때 사용하는 태그 #$(를 사용해서 패키지 폴더를 자동으로 찾아준다. - param 태그 ROS 파라미터 서버에 변수를 등록하고 그 변수에 값을 설정하기 위한 태그 여기서 type에 사용할 수 있는 종류..

Programming/ROS 2022.02.14

클래스와 객체

클래스 객체지향언어에서 나왔다. 사람은 종족 중 하나이다. 사람 또한 클래스라 할 수 있고, 여기서 서로 다른 특성을 가지며 만들어진게 객체이다. 클래스라는 틀을 사용해서 객체를 만든다. 여기서 틀이라는 것을 사람으로 예를 들면, 주민번호 이름 몸무게 키 라고 보면된다. class 사람: 생성자(): 이름 주민번호 몸무게 def run(): foo = 사람(이름,몸무게,주민번호)

Programming/Python 2022.02.10