컴퓨터 지식 네트워크 - 컴퓨터 백과사전 - ROS를 기반으로 모바일 로봇을 설계하는 방법

ROS를 기반으로 모바일 로봇을 설계하는 방법

최근에는 바퀴 달린 로봇이든 크롤러 로봇이든 다양한 모바일 로봇이 등장하기 시작했는데, 모바일 로봇을 어떻게 움직이게 만드는지가 핵심 과제다. 로봇이 환경 인식, 로봇 팔 제어, 항법 계획 등 일련의 기능을 구현하기 위해서는 운영체제의 지원이 필요하며, ROS는 가장 중요한 소프트웨어 플랫폼 중 하나로 널리 사용되고 있다. 과학 연구 분야.

그러나 ROS에 관한 책은 많지 않으며, 중국에는 학습 커뮤니티도 훨씬 적습니다. 하드 혁신에 대한 이 공개 수업에서는 ROS를 사용하여 모바일 로봇을 설계하는 방법을 보여줍니다.

공유 게스트 리진방(Li Jinbang): EAI Technology의 창립자이자 CEO, 베이징 공대에서 석사 학위를 취득했습니다. 그는 NetEase, Snowball 및 Tencent 기술 부서에서 Linux 기반 기술의 연구 및 개발 분야에서 다년간의 경험을 보유하고 있습니다. 2015년에 그는 SLAM 알고리즘의 연구 개발과 관련 포지셔닝 및 내비게이션 소프트웨어 제품 개발을 담당하는 EAI Technology를 공동 설립했습니다. EAI Technology는 로봇 모빌리티에 중점을 두고 소비자급 고성능 LiDAR, 슬램 알고리즘 및 로봇 모빌리티 플랫폼을 제공합니다.

이동 로봇의 세 가지 부분

소위 지능형 이동성이란 로봇이 주변 환경의 변화에 ​​따라 자율적으로 경로를 계획하고 장애물을 피하며 목적지에 도달할 수 있다는 것을 의미합니다.

로봇은 인간의 다양한 행동을 시뮬레이션합니다. 사람이 돌아다니는 데 어떤 기관이 필요한지 상상해 보세요. 먼저 눈을 사용하여 주변 환경을 관찰한 다음 뇌를 사용하여 목적지에 도달하기 위해 어떻게 걷는지 분석하고, 다리를 사용하여 걸어가는 과정을 목적지 주소에 도달할 때까지 반복합니다. 로봇이 지능적인 움직임을 달성하려면 눈, 뇌, 다리의 긴밀한 협력도 필요합니다.

다리

"다리"는 로봇 움직임의 기초입니다. 로봇의 "다리"는 인간과 같은 다리나 동물과 같은 다리에만 국한되지 않고 바퀴, 트랙 등이 될 수도 있습니다. 로봇을 움직일 수 있는 부분을 일반적으로 "다리"라고 부를 수 있습니다.

인간형 다리형의 장점은 복잡한 도로 상황(계단 오르기 등)에서도 움직일 수 있고, 춤추는 등 인간의 움직임을 더욱 생생하게 흉내낼 수 있다는 점이다. 구조 및 제어 장치가 상대적으로 작고, 비용이 높으며, 움직임이 느립니다.

그래서 대부분의 이동 로봇은 바퀴가 달린 로봇입니다. 그들의 장점은 간단한 바퀴 디자인, 저렴한 비용, 빠른 이동입니다. 바퀴 달린 차량에는 이륜 균형 차량, 삼륜, 사륜 및 다륜 등 다양한 유형이 있습니다. 현재 가장 경제적이고 실용적인 것은 구동 휠 2개 + 범용 휠 1개입니다.

로봇의 눈은 실제로 센서입니다. 그 기능은 주변 환경을 관찰하는 것입니다. 적합한 로봇 눈에는 레이저 레이더, 비전(깊이 카메라, 단일 및 이중 카메라), 보조(초음파 측정, 적외선 측정) 등이 포함됩니다.

"뇌"

로봇의 두뇌는 "눈"이 전송한 데이터를 수신하고 실시간으로 경로를 계산하며 다리에 움직이도록 명령하는 역할을 담당합니다.

사실 눈에 보이는 것을 데이터 언어로 변환하는 것입니다. 데이터를 기술하는 방법, 처리 로직을 구현하는 방법 등 일련의 문제가 발생합니다. ROS 시스템은 우리에게 좋은 개발 프레임워크를 제공합니다.

ROS 소개

ROS는 Linux를 기반으로 구축된 운영 체제입니다. 그 전신은 스탠포드 인공 지능 연구소(Stanford Artificial Intelligence Laboratory)가 스탠포드 지능형 로봇을 지원하기 위해 설립한 프로젝트였습니다. 주로 하드웨어 추상화, 기본 장치 제어, 공통 기능 구현, 프로세스 간 메시지 및 데이터 패킷 관리와 같은 일부 표준 운영 체제 서비스를 제공합니다.

ROS는 그래프 아키텍처를 기반으로 하므로 서로 다른 노드의 프로세스가 다양한 정보(예: 감지, 제어, 상태, 계획 등)를 수신, 게시 및 집계할 수 있습니다. 현재 ROS는 주로 Ubuntu 운영 체제를 지원합니다.

가상머신에 ROS를 설치할 수 있는지 묻는 분들도 계시는데, 일반적으로는 가능하지만 듀얼 시스템을 설치하고 ROS를 단독으로 실행하는 경우에는 Ubuntu를 사용하는 것이 좋습니다.

실제로 ROS는 두 가지 계층으로 나눌 수 있습니다. 하위 계층은 위에서 설명한 운영 체제 계층이고 상위 계층은 다양한 기능을 구현하기 위해 광범위한 사용자 기반에서 제공되는 다양한 소프트웨어 패키지입니다. 포지셔닝 매핑, 행동 계획, 인식, 시뮬레이션 등. ROS(하위 계층)는 모두 오픈 소스 소프트웨어인 BSD 라이선스를 사용하며 연구 및 상업적 목적으로 무료로 사용할 수 있는 반면, 상위 수준 사용자 제공 패키지는 다양한 라이선스를 사용합니다.

ROS를 사용하여 로봇 이동 구현

2차원 공간의 경우 선형 속도 + 각속도를 사용하여 바퀴 달린 기계의 무작위 이동을 실현할 수 있습니다.

선형 속도: 로봇이 앞뒤로 이동하는 속도를 설명합니다.

각속도: 로봇이 회전하는 각속도를 설명합니다.

그래서 주요 로봇의 움직임을 제어하는 ​​것은 선형 속도와 각속도를 제어하는 ​​것입니다. 왼쪽과 오른쪽 바퀴의 속도로 변환하고 바퀴 직경과 바퀴 간격을 통해 선형 속도와 각속도를 속도로 변환할 수 있습니다. 왼쪽과 오른쪽 바퀴의 모습입니다.

여기서 중요한 문제는 인코더 선택과 pid 속도 조정입니다.

인코더 선택: 일반적으로 인코더와 휠은 동일한 축에 있습니다. 현재 속도가 0.7m/s 미만인 경우 600키와 1200키 사이에서 인코더를 선택해도 괜찮습니다. 그러나 2선식 출력 A와 B가 있는 2선식 인코더를 사용하는 것이 가장 좋습니다. A와 B 방향의 출력은 지터를 방지하기 위해 90도 떨어져 있습니다. 흔들림 방지 기능을 사용하면 나중에 마일리지 계산이 더 정확해집니다.

왼쪽과 오른쪽 바퀴의 속도는 휠 인코더의 피드백과 PID를 통한 모터의 PMW 실시간 조정을 통해 제어됩니다. 자동차의 주행 거리계(odom)를 실시간으로 계산하고 자동차의 이동 위치 변화를 얻습니다.

계산된 자동차의 위치 변화는 엔코더에 의해 계산되며, 바퀴가 미끄러지는 등의 경우 계산된 변화와 실제 변화가 다를 수 있습니다. 이 문제를 해결하려면 실제로 어떤 문제가 더 심각한지 살펴봐야 합니다. 5m를 걷고 4.9m만 걷는 것, 180도 걷고 179도만 걷는 것이 더 중요하다.

사실 각도의 부정확함이 자동차에 미치는 영향이 더 큽니다. 일반적으로 자동차의 선형 거리 정확도는 센티미터 이내로 제어할 수 있으며 각도 정확도는 1%~2% 이내로 제어할 수 있습니다. 각도는 중요한 매개변수이므로 많은 사람들이 교정을 위해 자이로스코프를 사용합니다.

그래서 가끔 사람들이 자동차가 얼마나 정확한지 묻곤 하죠? 실제로 지금은 정확도가 상대적으로 높아 미끄러짐 등의 문제가 불가피하며, 100% 정확도를 달성하는 것은 불가능합니다.

차량의 현재 거리와 각도는 자체 제작 지도 내비게이션에 적합하며 정확도를 높이기 위해 레이저 레이더 등의 보조 장비가 필요할 수 있습니다. .

LIDAR 데이터의 저장 형식은 먼저 크기 범위를 가지게 되며, 범위를 초과하면 유효하지 않게 됩니다. 또한 여러 샘플링 지점이 있으므로 LiDAR는 샘플링 지점이 몇도 떨어져 있는지 알려줄 수 있습니다.

그리고 마지막 Intensities는 모든 사람에게 데이터의 정확성을 알려줍니다. LiDAR도 데이터의 가장 높은 지점을 차지하므로 어느 정도 정확성을 갖습니다. 위의 ppt는 실제로 LiDAR를 사용하여 벽의 모양을 스캔합니다.

라이다가 정적인 형태를 스캔하는 것은 실제로 의미가 없습니다. 레이더 매핑의 목적은 실제로 방의 지도를 만드는 것입니다.

지도는 어떻게 그리나요?

첫 번째 단계는 눈 데이터를 수집하는 것입니다.

Lidar의 경우 ROS는 LaserScan이라는 레이저 메시지와 관련된 정보를 저장하기 위해 sensor_msgs 패키지에 전용 데이터 구조를 정의합니다.

레이저의 유효 범위, 스캔 포인트가 샘플링되는 각도, 각 각도의 측정값을 지정합니다. LiDAR 360도 실시간 스캐닝은 장애물의 거리, 모양, 실시간 변화를 실시간으로 측정할 수 있습니다.

두 번째 단계는 눈에 보이는 데이터를 지도로 변환하는 것입니다.

ROS의 gmapping은 LiDAR/스캔 데이터를 래스터 지도 데이터로 변환합니다. 여기서 검은색은 장애물을, 흰색은 장애물을 나타냅니다. 원활하게 지나갈 수 있는 빈 영역, 회색: 미지의 영역. 로봇이 움직일 때 LiDAR는 동일한 위치에 여러 방향으로 장애물이 있는지 관찰할 수 있습니다. 장애물 존재에 대한 임계값이 설정 값을 초과하면 여기에 장애물이 있는 것으로 보정됩니다. 장애. 장애물, 빈 영역, 알 수 없는 영역의 크기를 다양한 회색조로 표현하는 것이 래스터 맵입니다. 다음 단계 위치 지정 및 탐색을 촉진합니다.

때때로 매우 직선적인 벽이 있을 수 있는데, 이때 로봇이 똑바로 걸을 수 없는 경우가 있는데, 이때 문제는 로봇의 바퀴가 미끄러지는 등의 문제가 있고, 삐딱하게 걷게 되어 지도가 그려지는 경우가 있습니다. 이때도 틀릴 수 있습니다. 자이로스코프를 추가하면 이러한 상황을 피할 수 있습니다. LiDAR의 특성으로 인해 때때로 검은색 표면이나 거울 표면을 만나면 거리 측정이 부정확해질 수 있습니다.

현재 해결책은 LiDAR를 사용하지 않거나 LiDAR와 초음파를 사용하여 보조 처리하는 것입니다.

ROS 지도는 여러 레이어로 나누어져 있으며 여러 개의 라이더를 서로 다른 높이에 배치하여 동시에 지도를 그릴 수 있습니다. 지도 작성이 완료된 후 위치 지정 및 내비게이션을 수행할 수 있습니다.

어떻게 찾고 탐색하나요?

포지셔닝: 실제로는 100% 정확도가 아닌 확률적 포지셔닝입니다. LiDAR가 스캔한 주변 장애물의 모양에 따라 지도의 모양과 일치시켜 로봇의 위치 확률을 판단합니다

로봇의 위치 확인 성공 여부는 로봇의 위치 확인 성공 여부와 많은 관련이 있습니다. 지도 특징. 지역적 특징이 분명하다면 로봇이 자신의 위치를 ​​쉽게 결정할 수 있습니다. 위치 파악이 어려운 문제가 있는 경우 초기 위치를 지정해 줄 사람이 필요할 수도 있고, 위치 식별을 위한 LED를 추가하거나 위치 확인을 보조하는 기타 위치 확인 장비가 필요할 수도 있습니다.

현재 색이나 빛을 활용하는 시각 기술이 점점 더 많아지고 있습니다.

내비게이션: 전역 경로 계획 + 로컬 조정(동적 장애물 회피)

내비게이션은 실제로 전역 위치 확인입니다. 처음에는 기존 지도를 기반으로 계획되지만 도중에 로컬 조정이 이루어집니다. 작전. 그러나 전반적으로 우리는 여전히 글로벌 경로를 따릅니다.

탐색 작업량은 여전히 ​​매우 큽니다. 예를 들어 청소 기계의 경로 계획과 서비스 로봇의 경로 계획은 모서리가 있는 지도를 완전히 덮어야 할 수도 있습니다. 서비스 로봇은 주로 지정된 영역에 초점을 맞추고 있으며, 이 부분은 ROS의 가장 큰 작업량입니다.

경로 계획은 다양한 응용 시나리오에 따라 크게 달라지지만 ROS는 이를 기반으로 자체 경로 계획을 수립합니다.

로봇 설명 및 좌표계 변환

탐색 중에 통과할 수 있는 영역은 로봇의 모양과 같은 정보에 따라 다릅니다. ROS는 URDF(UnifiedRobot Description Format)를 사용하여 설명합니다. 바퀴 위치, 섀시 크기, LiDAR 설치 위치 등 로봇 하드웨어의 크기 및 레이아웃이 모두 좌표계 변환에 영향을 미칩니다.

좌표계가 따르는 전제는 각 프레임이 하나의 상위 프레임만 가질 수 있고 위쪽으로 눈이나 연결이 만들어진다는 것입니다.

라이다의 설치 위치는 /scan 출력 데이터에 직접적인 영향을 미칩니다. 따라서 라이더와 로봇의 상대적인 위치는 라이더 데이터를 로봇 관점의 데이터로 변환하기 위한 좌표 변환이 필요합니다.

ROS의 좌표계는 궁극적으로 많은 일반적인 로봇 문제를 단순화할 수 있는 세 가지 표준 프레임워크로 요약됩니다.

1) 전역적으로는 정확하지만 국부적으로 불연속적인 프레임('맵')

2) 전체적으로 부정확하지만 국부적으로는 부드러운 프레임('odom")

3) 로봇 자체 프레임('base_link")

여러 센서(예: LiDAR, 깊이 카메라) 및 자이로스코프 가속도계 등)은 base_link와 odom 사이의 좌표 관계를 계산할 수 있지만 "각 프레임은 하나의 상위 프레임만 가질 수 있습니다" 때문에 노드는 하나만 있을 수 있습니다(예: 다중 센서의 robots_pose_ekf 융합). 좌표 관계를 게시합니다. base_link와 odom 사이.

다른 구성 요소가 로봇의 다른 위치에 설치되기 때문에 베이스 링크의 자체 좌표계는 모든 센서가 "표시"되어야 하기 때문에 베이스 링크의 좌표계와 일치해야 합니다.

몇몇 친구들이 라이다가 지도를 만들 때 자동차가 움직인 후 지도가 엉망이 되었다고 물었습니다. 이는 자동차의 섀시 좌표계와 라이다의 좌표 때문이었습니다.

지도와 오돔의 관계

예를 들어 자동차가 앞으로 나아갈 때 로컬 연결이 필요하기 때문입니다. , 이것이 바로 마일리지입니다. 지도의 기능은 전역적이고 불연속적입니다.

ROS를 배우려면 좌표계의 변경도 중요한 포인트입니다. 프레임에는 하나의 상위 프레임만 있는 경우가 있습니다. 두 좌표가 모두 연결되어 있으면 B/C가 모두 A와 연결되는 대신 A는 B와 연결되고 B는 C와 연결됩니다.

세 좌표계의 상위-하위 관계는 다음과 같습니다:

map –> odom –> base_link

실제로 map과 odom은 모두 base_link와 연결되지만 "각 프레임은 하나의 상위 프레임만 가질 수 있다"는 원칙을 준수하기 위해 map과 base_link 및 odom->base_link 간의 관계를 기반으로 map과 odom 간의 좌표 관계를 계산하여 게시합니다.

odom->base_link의 좌표 관계는 odometry 노드에 의해 계산되고 게시됩니다.

map -> positioning node에서 base_link의 좌표관계를 계산하지만 공개하지 않습니다. 대신 수신된 odom->base_link의 좌표관계를 사용하여 map->의 좌표관계를 계산합니다. odom, 그리고 출판되었습니다.

주행 거리계만 있고 라이더가 없는 경우에도 달릴 수 있지만 먼저 미리 설정된 지도를 기반으로 장애물을 피해야 합니다.

훌륭한 Q&A

Q: ROS의 실시간 성능이 향상되었나요?

A: 실시간 개선은 ROS2.0의 설계에 달려 있습니다. 실제로 ROS2.0의 진행 상황은 온라인에 공개됩니다. 그러나 실제로 그의 발전은 아직 실제 적용과는 거리가 멀다. 적어도 올해 하반기에는 안정화에 도달하지 못할 것이다. 그러나 그의 코드는 메모리 관리, 스레드 관리 및 실시간을 크게 향상시켰다. 성능. .

Q: vSLAM은 메모리와 CPU 요구 사항이 높습니다. 실제 프로젝트에서 리 선생님은 어떤 하드웨어 구성을 사용하셨나요? 지도는 얼마나 크게 만들 수 있나요?

A: 실제로 현재로서는 LiDAR 및 센서 지원을 계속 사용하고 있습니다. 이는 지도 크기와는 관련이 없지만 주로 지형 장애물의 복잡성과 관련이 있습니다.

上篇: 타롬미르 위험한 임무는 어디서 받습니까 下篇: 대동만인의 팬 촬영은 어떠신가요?
관련 내용