1. 개발환경
개발환경은 이전에 포스팅했던 내용과 같다.
필자는 rpi 3 B+에 우분투 서버 20.04와 ROS noetic을 설치했다.
https://upgrade-sechan.tistory.com/23
[ROS] rpi에 ROS noetic 설치하기
1. 개발환경 개발환경은 이전에 포스팅했던 내용과 같다. 필자는 rpi 3 B+, 우분투 서버 20.04의 개발환경을 사용한다. https://upgrade-sechan.tistory.com/22 [ROS] rpi에 Ubuntu server 20.04 설치 & 와이파이..
upgrade-sechan.tistory.com
또한 workspace 생성과 gpio 권한설정 등을 이전 포스팅에서 세팅했다.
workspace 생성 : https://upgrade-sechan.tistory.com/28
gpio 권한 설정 : https://upgrade-sechan.tistory.com/29
2. led Tutorial
가장 기초적인 led를 제어하는 Tutorial을 진행한다. 이번 포스팅은 아래의 사이트를 따라하기 쉽게 하는 것에 그 목적을 둔다.
https://roboticsbackend.com/raspberry-pi-ros-service-example-with-gpios/
Raspberry Pi ROS Service Example With GPIOs - The Robotics Back-End
Write a complete ROS Service on your Raspberry Pi. Learn how to create a service client/server to actuate real hardware, using the GPIO header.
roboticsbackend.com
0) hardware 구성
하드웨어 구성은 저기 위에 있는 사이트가서 보고 똑같이 따라하면 된다.
1) workspace 만들기
이번 Tutorial을 진행하기 전에 먼저 workspace를 만들어야 하는데, 이것은 이전 포스팅에서 다루었던 부분이다.
다음 링크를 따라서 workspace를 만든다.
https://upgrade-sechan.tistory.com/28
[ROS] workspace 생성하기
1. 개발환경 필자는 rpi 3 B+에 우분투 서버 20.04와 ROS noetic을 설치했다. https://upgrade-sechan.tistory.com/23 [ROS] 라즈베리파이에 ROS noetic 설치하기 1. 개발환경 개발환경은 이전에 포스팅했던 내용..
upgrade-sechan.tistory.com
이제부터 이전 포스팅을 읽었던 독자들도 따라하면 된다.
~/catkin_ws/src 디렉터리로 이동한다.
cd ~/catkin_ws/src
rpi_ros_tutorials 패키지를 만든다.
catkin_create_pkg rpi_ros_tutorials
새로운 패키지를 만들었으니 빌드를 하고
cd ~/catkin_ws
catkin_make
rpi_ros_tutorials 디렉터리로 이동한다.
cd ~/catkin_ws/src/rpi_ros_tutorials
2) ROS Service Server
led_service_server.py 파일을 생성하고 실행가능하게 만든다. (정확히는 실행권한을 부여한다.)
touch led_service_server.py
chmod +x led_service_server.py
led_service_server.py 파일을 수정한다.
sudo nano led_service_server.py
그러면 nano 편집기가 열리면서 빈 공간이 나올 것이다. 아래의 코드를 붙여넣는다.
#!/usr/bin/env python
import rospy
from std_srvs.srv import SetBool
import RPi.GPIO as GPIO
LED_GPIO = 20
def set_led_state_callback(req):
GPIO.output(LED_GPIO, req.data)
return { 'success': True,
'message': 'Successfully changed LED state' }
if __name__ == '__main__':
rospy.init_node('led_actuator')
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED_GPIO, GPIO.OUT)
rospy.Service('set_led_state', SetBool, set_led_state_callback)
rospy.loginfo("Service server started. Ready to get requests.")
rospy.spin()
GPIO.cleanup()
ctl+x를 눌러서 nano 편집을 종료한다. 이때, 변경사항을 저장하는지 묻는데, y를 누르고 엔터를 누른다.
3) ROS Service Client
button_service_client.py 파일을 생성하고 실행가능하게 만든다. (정확히는 실행권한을 부여한다.)
touch button_service_client.py
chmod +x button_service_client.py
button_service_client.py 파일을 수정한다.
sudo nano button_service_client.py
그러면 nano 편집기가 열리면서 빈 공간이 나올 것이다. 아래의 코드를 붙여넣는다.
#!/usr/bin/env python
import rospy
from std_srvs.srv import SetBool
import RPi.GPIO as GPIO
BUTTON_GPIO = 16
def button_callback(channel):
power_on_led = not GPIO.input(BUTTON_GPIO)
rospy.wait_for_service('set_led_state')
try:
set_led_state = rospy.ServiceProxy('set_led_state', SetBool)
resp = set_led_state(power_on_led)
except rospy.ServiceException as e:
rospy.logwarn(e)
if __name__ == '__main__':
rospy.init_node('button_monitor')
GPIO.setmode(GPIO.BCM)
GPIO.setup(BUTTON_GPIO, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.add_event_detect(BUTTON_GPIO, GPIO.BOTH,
callback=button_callback, bouncetime=50)
rospy.spin()
GPIO.cleanup()
ctl+x를 눌러서 nano 편집을 종료한다. 이때, 변경사항을 저장하는지 묻는데, y를 누르고 엔터를 누른다.
4) 파일 실행
이제 터미널 3개가 필요하기 때문에 명령프롬프트를 3개 이상 열고 각각 ssh 접속을 해준다.
아래의 명령을 각각 다른 터미널에서 실행한다. 이때, roscore 명령을 가장 먼저 실행해야 한다.
roscore
rosrun rpi_ros_tutorials led_service_server.py
rosrun rpi_ros_tutorials button_service_client.py
* 이때 gpio 권한이 필요하다는 에러가 뜰 경우 아래의 링크를 통해 해결한다.
https://forum.pine64.org/showthread.php?tid=2233
Fixing GPIO user permission errors
Fixing GPIO user permission errors 09-18-2016, 04:54 AM A known issue from Raspberry Pi land that also effects the Pine64 is the need to use sudo in order to manipulate GPIO bits... which gets annoying pretty quickly... and tempts you to stay logged in as
forum.pine64.org
3. 작동영상
영상 설명 : 버튼을 누르면 켜지고 안 누르면 꺼진다.
4. 코드 해석
다음 포스팅에서 코드를 한 줄씩 해석하도록 하겠다.
https://upgrade-sechan.tistory.com/25
[ROS noetic] led Tutorial 코드 해석
1. 개발환경 필자는 rpi 3 B+에 우분투 서버 20.04와 ROS noetic을 설치했다. https://upgrade-sechan.tistory.com/23 [ROS] rpi에 ROS noetic 설치하기 1. 개발환경 개발환경은 이전에 포스팅했던 내용과 같다...
upgrade-sechan.tistory.com
'프로그래밍 > ROS1' 카테고리의 다른 글
[roscpp tutorial] 간단한 Publisher와 Subscriber 작성하기 (0) | 2021.07.16 |
---|---|
[rospy tutorial] 간단한 Publisher와 Subscriber 작성하기 (0) | 2021.07.13 |
[rospy tutorial] led Tutorial 코드 해석 (0) | 2021.07.12 |
[ROS] 라즈베리파이에 ROS noetic 설치하기 (1) | 2021.07.11 |
[Ubuntu] 라즈베리파이에 Ubuntu server 20.04 설치 & 와이파이 설정 (0) | 2021.07.11 |