산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

자율 홈 어시스턴트 로봇

구성품 및 소모품

Arduino UNO
× 1
Arduino Braccio 로봇 팔
× 1
오드로이드 XU4
× 1
SparkFun EasyDriver - 스테퍼 모터 드라이버
× 1
스테퍼 모터
× 1
L298 모터 드라이버
× 1
DC 모터(일반)
× 4
GY-85 IMU
× 1
메카넘 휠
× 1
5V USB 허브
× 1
Microsoft Kinect 센서
× 1
OpenBuilds V-슬롯 선형 레일
× 2
OpenBuilds V-슬롯 갠트리 플레이트
× 1
OpenBuilds Solid V 휠 키트
× 4
0.8m Acme 리드 나사
× 1
6mm ~ 8mm 샤프트 커플러
× 1
8mm 베어링 브래킷
× 1
1.2m 스프링 와이어
× 1
리미트 스위치
× 1
5V BEC
× 1
가변 DC-DC 변환
× 2
12V 충전식 배터리 5000mAh
× 1

앱 및 온라인 서비스

Amazon Alexa Alexa 기술 키트
Amazon Web Services AWS Lambda
ROS 로봇 운영 체제
PubNub 게시/구독 API

이 프로젝트 정보

1. 소개

오나인을 만나보세요! 이리저리 움직이고 물건을 줍고 집을 돌볼 수 있는 개인 가정용 로봇 동반자. Alexa 덕분에 O'nine은 당신의 말을 듣고 물고기에게 먹이를 주는 것과 같은 프로그래밍 가능한 작업을 수행할 수 있습니다.

이 프로젝트는 스마트 홈 환경에서 동적 작업을 수행할 수 있는 확장 가능한 개방형 로봇 플랫폼을 제공하여 Alexa의 기능을 확장하기를 희망합니다. 현재 스마트 홈 솔루션에는 특정 기능을 위해 고안된 맞춤형 장비가 필요합니다. O'nine은 이러한 하드웨어 요구 사항을 최소화하고 대안으로 로봇 공학을 사용하여 이 격차를 줄이는 것을 목표로 합니다. 아이디어는 로봇을 가정 자동화 시스템의 또 다른 구성 요소로 사용하는 가능성과 실행 가능성을 테스트하기 위해 기술 검증 플랫폼을 만드는 것입니다. "모든 AC 장치를 제어하기 위해 모든 방에 마이크로컨트롤러를 장착하는 대신 로봇을 사용하여 AC 장치를 차단하는 것이 합리적입니까?와 같은 질문에 답할 수 있기를 바랍니다. " 예전에는 정적 솔루션이었던 것이 이제 로봇의 도움으로 모바일이 될 수 있습니다.

다음은 O'nine이 제 물고기에게 먹이를 주는 영상입니다.

TL;DW(타임랩스 동영상)

전체 길이의 동영상입니다.

아기를 확인하고 싶거나 문 앞에 누가 있는지 확인하고 싶습니까? O'nine에는 카메라가 내장되어 있어 사진 촬영을 요청할 수도 있습니다.

이 튜토리얼에서는 로봇을 구축하는 방법과 로봇이 자율 작업을 수행하도록 명령할 수 있는 Alexa Skill을 만드는 방법을 안내합니다.

2. 높은 수준의 아키텍처

요약하자면, O'nine - Alexa 통합이 작동하는 방식은 다음과 같습니다.

1. Amazon Echo Dot이 음성 명령을 수신합니다.

2. 맞춤형 Alexa Skill이 인텐트를 감지합니다.

3. AWS Lambda 함수는 Amazon Alexa Skill에서 요청을 수신하고 PubNub MQTT 브로커에 게시합니다.

4. 오나인은 MQTT 브로커에 가입하여 데이터를 받습니다.

5. 오나인은 필요한 작업을 자율적으로 수행합니다.

3. 하드웨어

3.1 로봇 베이스

아래 그림과 같이 구성 요소를 배선하십시오. 이 회로는 ROS Navigation Stack에서 보낸 모든 속도 명령을 모터 움직임으로 변환합니다. 펌웨어에는 모터 인코더의 피드백을 사용하여 필요한 속도를 유지하기 위한 PID 컨트롤러가 포함되어 있습니다.

조립된 로봇 베이스의 사진 몇 장.

로봇 섀시는 업사이클된 A4 종이 주석 용기입니다. 오래된 플라스틱 용기 상자를 사용하여 구성 요소를 보관할 수도 있습니다.

내 Linorobot 프로젝트에서 DIY ROS 호환 로봇을 구축하는 방법에 대한 포괄적인 자습서를 확인할 수 있습니다.

3.2 수직 리프트 회로 (팔 상위)

아래 그림과 같이 구성 요소를 배선하십시오. 이 회로는 팔의 수직 리프트를 제어하고 http://moveit.ros.org/에서 전송한 필요한 높이를 스테퍼 동작으로 변환합니다. 이것은 수행된 단계 수를 밀리미터 단위의 거리와 연관시켜 팔의 현재 높이를 계산하는 개방 루프 시스템입니다. 마이크로컨트롤러는 또한 MoveIt에서 전송된 데이터를 움직이는 수직 플랫폼에 장착된 로봇 팔로 중계합니다.

수직 리프트용으로 조립된 회로의 사진입니다.

나선형 케이블에는 수직 리프트 회로와 로봇 팔 컨트롤러 간의 직렬 통신을 위한 Tx/Rx 와이어와 로봇 팔을 작동시키기 위한 +12V DC 전원이 들어 있습니다.

3.3 로봇 컨트롤러 ( 어린이 )

로봇팔을 조립하고 아두이노 우노에 쉴드를 쌓은 후 부품들을 아래와 같이 배선합니다. 이 회로는 직렬 통신을 통해 상위 암과 통신합니다. 수신된 데이터는 서보 모터를 작동시키는 데 사용되는 각 관절에 필요한 각도의 배열입니다.

다음은 Arduino Uno에 쌓인 조립된 로봇 팔 컨트롤러의 사진입니다.

그리고 나머지 O'nine의 기계 부품을 보여주기 위해 몇 가지 더 있습니다.

3.4 모든 회로 통합

마지막으로 이전에 배선한 모든 회로를 아래와 같이 연결합니다. 다이어그램은 또한 각 회로에 전원을 공급하는 방법을 보여줍니다.

4. 소프트웨어

이 프로젝트는 두 대의 Linux 시스템(Ubuntu 14.04 또는 16.04)에서 실행해야 합니다. MoveIt 및 데이터 시각화(Rviz)를 실행하는 개발 머신과 로봇의 탐색 패키지 및 하드웨어/센서 드라이버를 실행하는 다른 머신(ARM 개발 보드).

로봇에 사용할 수 있는 ROS 지원 개발 보드를 보려면 여기를 클릭하십시오(2GB RAM 권장).

4.1 ROS 설치

두 컴퓨터에 ROS를 설치합니다.

git clone https://github.com/linorobot/rosmecd rosme./install 

설치 프로그램은 시스템의 운영 체제와 아키텍처를 자동으로 감지하므로 설치할 ROS 버전을 걱정할 필요가 없습니다.

4.2 ROS 패키지 설치

4.2.1 개발 머신에 다음을 설치합니다.

cd ~/catkin_ws/srcgit clone https://github.com/linorobot/lino_pidgit clone https://github.com/linorobot/lino_msgsgit clone https://github.com/linorobot/lino_visualizecd .. &&catkin_make 

4.2.2 로봇의 컴퓨터(로봇 베이스)에 Linorobot 설치:

git clone https://github.com/linorobot/lino_installcd lino_install./install mecanum kinect 

로봇 베이스의 펌웨어, 내비게이션 소프트웨어, 하드웨어/센서 드라이버를 설치합니다.

4.2.3 두 컴퓨터에 O'nine 패키지를 설치합니다.

cdgit 복제 https://github.com/grassjelly/onine_installcd onine_install./install 

이것은 로봇 팔의 펌웨어, 운동학 솔버 및 Onine의 자율 작업을 설치합니다.

4.2.4 alexa_tasker 설치:

cd ~/onine_ws/srcgit 복제 https://github.com/grassjelly/onine_alexacdcatkin_make 

그러면 O'nine과 Alexa를 연결하는 MQTT 클라이언트가 다운로드됩니다. 패키지에는 zip 파일로 압축되어 AWS Lambda에 업로드되는 NodeJS 앱도 포함되어 있습니다.

5. 소프트웨어 설정

5.1 설정 위로 알렉사 스킬

5.1.1 가입 및 로그인

여기에서 Alexa 개발자 계정을 만들고 '시작을 클릭하세요. 스킬' :

이메일 주소와 비밀번호를 입력하세요:

5.1.2 Alexa 스킬 시작

'받기를 클릭합니다. 시작됨' Alexa Skills 키트 아래

'추가 클릭 신규 스킬' 상단 맞습니다 창:

5.1.3 스킬 정보

'사용자 지정을 선택합니다. 상호작용 모델' 스킬 유형에서.

'이름' 아래에 기술 이름(선택적으로 로봇 이름)을 입력합니다.

'Invocation 아래에 스킬의 호출 이름(스킬을 활성화할 이름)을 입력합니다. 이름'.

'다음'을 클릭합니다.

5.1.4 상호작용 모델

https://github.com/grassjelly/onine_alexa/blob/master/lamda/assets/schema.json의 코드를 복사하여 '인텐트 스키마'에 붙여넣습니다. .

https://github.com/grassjelly/onine_alexa/blob/master/lamda/assets/utterances.txt의 코드를 복사하여 '샘플에 붙여넣습니다. 발화'.

'다음'을 클릭합니다.

5.1.5 스킬 구성

왼쪽 상단 모서리에서 앱 스킬 ID를 복사하고 5.2단계로 건너뛰어 Lambda 함수를 생성합니다. 함수 생성이 완료되면 Amazon 리소스 이름을 기록해 두십시오.

'AWS를 선택합니다. 람다 ARN' 기본 탭에서 ARN을 입력합니다.

'다음'을 클릭합니다.

5.1.6 기술 테스트

'Enter 아래에 음성 명령을 입력하세요. 발언' 클릭하고 ' 질문 <스킬 이름>'

'서비스 아래에 답장이 있으면 스킬이 작동하는지 확인할 수 있습니다. 응답'.

5.2 설정 업 람다 함수

5.2.1 가입 및 로그인

여기에서 AWS Lamda 계정을 만들고 '서명을 클릭합니다. ~으로 콘솔' 상단 맞습니다 :

이메일 주소와 비밀번호를 입력하세요.

5.2.2 Lambda 함수 생성

'만들기를 클릭합니다. 기능' 창의 오른쪽 상단에서 Lambda 함수 만들기를 시작합니다.

'NodeJS 4.3' 선택 런타임*에서.

'선택을 선택하세요. 기존 역할' 역할* 아래에 있습니다.

'lambda_basic_execution' 선택 기존 역할*에서.

'함수 생성'을 클릭합니다. .

5.2.3 Alexa 연결

트리거를 추가하고 'Alexa를 선택하세요. 기술 키트

Alexa Skill 'skill id' 키 입력 스킬 ID 아래에 있습니다.

그런 다음 '추가'를 클릭하세요.

5.2.4 앱 업로드

함수를 만들기 전에 PubNub의 Pub-Sub 키를 복사하여 함수 코드에 붙여넣습니다.

cd ~/onine_ws/src/onine_alexa/lambda/appnano 

이제 AWS Lambda에 업로드할 zip 파일을 생성합니다.

cd ~/onine_ws/src/onine_alexa/lambda/appnpm install./zipme 

이것은 .zip으로 필요한 람다 함수와 node_modules를 압축합니다.

기능 코드에서 '업로드를 선택합니다. .ZIP 파일' 코드 입력 유형에서.

'업로드'를 클릭합니다. 업로드할 이전에 만든 Onine.zip을 선택합니다.

'저장'을 클릭합니다. 상단 맞습니다 창.

이제 Lambda 기능이 완료되었습니다.

5.3 PubNub 계정 만들기

5.3.1 가입 및 로그인

여기에서 PubNub 계정을 만드십시오.

이메일과 비밀번호 입력:

5.3.2 새 PubNub 앱 만들기

'만들기를 클릭합니다. 신규 앱' 상단 맞습니다 :

' 아래에 앱 이름을 입력하세요. 이름' :

5.3.3 게시 및 구독 키를 기록합니다.

5.3.4 이 라인에 발행 및 구독 키를 입력하십시오.

5.4 만들기 푸스오버 알림

O'nine은 Pushover를 사용하여 사용자의 휴대폰으로 사진을 보냅니다. 여기에서 계정을 등록하고 앱을 다운로드하면 집 안의 무언가를 확인하도록 요청할 때 O'nine에서 사진을 받을 수 있습니다.

5.4.1 푸시오버에 로그인

이메일과 비밀번호를 입력하세요:

로그인에 성공하면 사용자 키를 기록해 두십시오.

5.4.2 애플리케이션 만들기

'앱 및 플러그인'을 클릭합니다. 창 상단에. '만들기를 클릭합니다. 신규 응용 프로그램 / API 토큰' .

'이름' 아래에 애플리케이션 이름을 입력합니다. .

'응용 프로그램' 선택 '유형' 아래에 있습니다.

응용 프로그램에 대한 설명을 입력하십시오.

'만들기를 클릭합니다. 응용 프로그램'

완료되면 API 토큰을 기록해 두십시오.

5.4.3 앱 토큰과 사용자 키를 복사하여 오나인의 'snaptask'에 붙여넣습니다.

5.5 설치 펌웨어

5.5.1 uDev 규칙

마이크로컨트롤러의 직렬 포트는 roslaunch 파일의 정적 이름을 사용하여 정의됩니다. 직렬 포트를 기억하고 고정 이름에 연결하려면 uDev 규칙을 만들어야 합니다. 로봇의 컴퓨터에서 uDev 도구를 실행합니다.

 rosrun lino_udev lino_udev.py 

로봇 베이스의 Teensy 보드를 연결하고 "linobase"를 입력합니다. 수직 리프트 회로에 대해 동일한 작업을 수행하고 이름을 "oninearm"으로 지정합니다. CTRL+C를 눌러 uDev 규칙을 저장합니다.

저장된 udev 규칙을 /etc/udev/rules.d:

에 복사합니다.
sudo cp 58-lino.rules /etc/udev/rules.d/58-lino.rules 

udev 다시 시작:

sudo 서비스 udev reloadsudo 서비스 udev 재시작 

uDev 규칙이 작동했는지 확인:

ls /dev/linobasels /dev/oninearm 

포트가 감지되지 않으면 로봇의 컴퓨터를 다시 시작하고 다시 확인하십시오.

5.5.2 로봇 베이스의 펌웨어 업로드

로봇 베이스의 펌웨어를 업로드하기 전에 휠 직경, 인코더의 PPR 등과 같은 구성 요소 사양을 정의해야 합니다. 여기를 클릭하여 로봇을 구성하십시오.

로봇 베이스의 Teensy 보드를 로봇의 컴퓨터에 연결하고 다음을 실행합니다.

roscd linorobot/firmware/teensyplatformio run --target 업로드 

5.5.3 수직 리프트의 펌웨어 업로드

수직 리프트의 Teensy 보드를 로봇의 컴퓨터에 연결하고 다음을 실행합니다.

cdplatformio run --target 업로드 

5.5.4 로봇 컨트롤러의 펌웨어 업로드

Arduino Uno를 로봇의 컴퓨터에 연결하고 다음을 실행합니다.

cdplatformio run --target 업로드 

수신된 데이터는 시리얼 통신을 통해 Vertical Lift의 Teensy 보드를 통해 중계되므로 코드를 업로드한 후 Arduino Uno의 플러그를 뽑는 것을 잊지 마십시오.

5.6 편집 Linorobot의 코드

Onine을 실행하는 데 필요한 드라이버를 추가하려면 Linorobot(로봇 기반) 실행 파일에서 몇 줄을 편집해야 합니다.

5.6.1 Bringup.launch에서 이 줄 뒤에 다음을 추가합니다.

     <노드 이름="robot_state_publisher" pkg=" robots_state_publisher" type="robot_state_publisher" respawn="true" output="화면" /> 

이것은 수직 리프트의 마이크로컨트롤러와 통신하는 데 필요한 소프트웨어 패키지를 추가하고 Onine은 Onine의 변환(3D 공간에서 Onine의 기계 부품 위치)을 정의합니다.

5.6.2 이 줄을 다음으로 변경:

  

Kinect에서 읽은 포인트 클라우드 데이터를 2D 레이저 스캔 데이터로 변환하는 데 사용할 가상 프레임을 만드는 것입니다.

5.6.3 이 링크에 대한 변환이 Onine의 URDF 파일에 이미 정의되어 있으므로 이 줄을 주석 처리합니다.

5.6.4 다음 줄을

로 바꿉니다.
    <매개변수 이름="범위_최대" 값="4.0" />  

그러면 소프트웨어 패키지가 실행되어 Kinect에서 읽은 포인트 클라우드 데이터를 2D 레이저 스캔 데이터로 변환합니다.

5.6.5 base_link에서 base_footprint로 Linorobot의 기본 참조 프레임 교체:

'base_link에서 변경 '에서 'base_footprint로 ' 다음에 대해:

linorobot/launch/amcl.launch

linorobot/launch/slam.launch

linorobot/param/navigation/global_costmap_params.yaml

linorobot/param/navigation/local_costmap_params.yaml

linorobot/src/lino_base_node.cpp - 90행

linorobot/src/lino_base_node.cpp - lino 111

5.6.6 주행 거리 노드 재컴파일:

cd ~/linorobot_wscatkin_make 

5.7 설정 위로 오나인즈 개체 검출기

O'nine이 객체를 더 쉽게 감지할 수 있도록 AR 태그를 사용하여 픽 앤 플레이스 작업을 수행할 때 관심 객체를 구별합니다. 다음 로봇과 유사한 개념:

아래 이미지를 인쇄하여 오나인이 줍고 싶은 물건에 붙여넣으세요. 이미지의 크기는 2cm x 2cm이어야 합니다. 이 숫자는 임의적이며 Onine의 추적기 실행 파일에서 치수를 변경하는 것을 기억하십시오.

사용된 인식 소프트웨어는 http://wiki.ros.org/ar_track_alvar 입니다. 고유한 물체 감지 소프트웨어를 사용하거나 다음과 같은 다른 ROS 호환 패키지를 사용하는 경우 이를 쉽게 교체할 수 있습니다.

http://wiki.ros.org/find_object_2d

http://wiki.ros.org/tabletop_object_detector

6. 데모 실행

데모를 시작하기 전에 네트워크를 구성했는지 확인하십시오. 보다 포괄적인 자습서는 이 ROS 네트워크를 확인하십시오.

6.1 만들기 지도

O'nine은 미리 생성된 지도를 사용하여 집 주변을 탐색할 때 스스로를 현지화하고 경로를 계획합니다. 다음을 실행하여 지도를 만듭니다.

로봇의 컴퓨터에서 2개의 새 터미널 창을 엽니다. Bringup.launch 실행:

roslaunch linorobot 가져오기.launch 

slam.launch 실행:

roslaunch linorobot slam.launch 

개발 컴퓨터에서 2개의 새 터미널 창을 엽니다. teleop_twist_keyboard를 실행합니다.

rosrun teleop_twist_keyboard teleop_twist_keyboard.py 

rviz 실행:

roscd lino_visualize/rvizrviz -d slam.rviz 

teleop_twist_keyboard를 사용하여 매핑하려는 영역 주위로 로봇을 운전하세요.

매핑이 완료되면 로봇 컴퓨터에서 map_server를 실행하여 지도를 저장합니다.

rosrun map_server map_saver -f ~/linorobot_ws/src/linorobot/maps/map 

map.pgm 및 map.yaml이 저장되었는지 확인:

roscd linorobot/mapsls -a map.pgm map.yaml 

Navigation.launch에서 호출된 지도를 변경하여 고유한 지도를 로드합니다. 'house.yaml' 변경 'map.yaml'으로 .

6.2 목표 목표 좌표 얻기

집 안에서 자율주행이 필요한 작업을 수행하도록 O'nine에게 요청할 때 O'nine은 작업을 수행해야 하는 지점의 좌표를 알아야 합니다.

move_base_simple/goal을 구독하고 Rviz에서 대상 위치를 지정하여 이러한 좌표를 표시할 수 있습니다.

로봇 컴퓨터에 SSH하고 다음을 실행합니다.

Bringup.launch 실행:

roslaunch linorobot 가져오기.launch 

다른 터미널에서 탐색 스택을 실행합니다.

roslaunch linorobot navigation.launch 

개발 컴퓨터에서 Rviz를 실행합니다.

roscd lino_visualize/rvizrviz -d navigation.rviz 

개발 컴퓨터에서 다른 터미널을 열고 다음을 실행합니다.

rostopic 에코 move_base_simple/goal 

This will echo the coordinates and heading of the target pose that you will click on Rviz.

On Rviz, click the point that is approximately 1 meter away from where you want the robot to perform the task and drag towards where the robot is supposed to face when it has reached it's goal. (1 box in Rviz is equals to 1 square meter).

Copy the coordinates on the window where you echo 'move_base_simple/goal '

Edit onine/onine_apps/scripts/fishtask.py and replace Point(x,y,z) with position/x position/y, and position/z from the echoed values. Replace Quaternion(x,y,z,w) with orientation/x, orientation/y, orientation/z, and orientation/w from the echoed values.

6.3 Running O'nine

6.3.1 Open a new terminal on the development computer and run the ROSCORE:

roscore 

Open three new terminals on the development computer and SSH to the robot computer.

6.3.2 Run robot base's and robotic arm's driver:

roslaunch linorobot bringup.launch 

6.3.3 Run the navigation software on the second terminal:

roslaunch linorobot navigate.launch 

6.3.4 Run the object detection software on the third terminal:

roslaunch onine_apps ar_tracker.launch 

On the development computer open two new terminals.

6.3.5 Run MoveIt software:

roslaunch onine_moveit_config demo.launch  

This will run all the software required to move the robotic arm and open Rviz for data visualization.

6.3.6 Run the PubNub client which launches the autonomous task upon voice command through Amazon Echo Dot:

rosrun onine_alexa alexa_tasker.py 

6.3.7 Before talking to executing voice commands, you have to help O'nine localize relative to the map.

On Rviz, click '2D Post Estimate' and click on the map the approximate location of the robot and drag towards O'nine's current heading.

Once O'nine is localized, you're now ready to command Alexa to ask Onine to perform tasks.

Have fun with your new personal home assistant robot!

7. Future Works

7.1 O'nine simulation model

Building the hardware can be time consuming and tedious. I'm planning to create a Gazebo simulation model so that users can play around with O'nine without the need of a hardware. This way, O'nine's Alexa Custom skill can be tried purely with software.

7.2 Better computing power

The first ARM board I used to run O'nine was an Nvidia Jetson TK1 which comes in nifty for computer vision applications. Due to power reasons I replaced it with an Odroid XU4 as it only requires 5V and has a smaller form factor. I'm currently eyeing on a Rock64 board which has 4GB of RAM and hopefully get more juice to run more applications concurrently. The current setup requires to offload some of the applications to my laptop and has to be hardwired to the dev board (ethernet cable) as there's a huge stream of data running across both machines.

<섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

코드

O'nine Software
Contains all robotics related code - Autonomous Navigation, Kinematics Solver, and high level scripts to accomplish pick and place tasks.https://github.com/grassjelly/onine
Alexa - Robot integration
Contains all the codes that integrate Alexa Skill with the robotics system - Lambda App (NodeJS), Robot Tasker (A PubNub client that waits for Alexa commands and runs high level scripts to perform robot tasks).https://github.com/grassjelly/onine_alexa
Robot Base
This is another project of mine - Linorobot. It is a suite of Open Source ROS compatible robots that aims to provide students, developers, and researchers a low-cost platform in creating new exciting applications on top of ROS.https://github.com/linorobot/linorobot

회로도


제조공정

  1. Bluetooth를 통해 제어되는 Raspberry Pi Robot
  2. JQR 4족 자율 로봇
  3. 간단한 파이 로봇
  4. 집에서 DIY 숙제 작성 기계 만들기
  5. 서보 모터로 로봇을 피하는 장애물
  6. 라인 팔로워 로봇
  7. 음성 제어 로봇
  8. Arduino 교육 플랫폼
  9. DIY Arduino 로봇 팔 – 손 제스처로 제어
  10. 멋진 실내 내비게이션용 로봇