ROS 강좌 107 rosblidge client 만들기
환경
이 기사는 다음 환경에서 작동합니다.
품목
값
CPU
Core i5-8250U
우분투
16.04
ROS
키네틱
Gazebo
7.0.0
파이썬
2.7.12
설치에 대한 자세한 내용은 ROS 강좌02 설치을 참조하십시오.
또한이 기사의 프로그램은 github에 업로드되었습니다. ROS 강좌 11 git 저장소을 참조하십시오.
개요
지난번 에 rosbridge_server를 세우고 브라우저의 javascript에서 액세스하는 예를 소개했습니다. 이번에는 roslibpy
를 사용하여 rosbridge_server에 연결하는 클라이언트를 파이썬으로 만듭니다.
설치
pip 문제
이번에는 roslibpy를 설치하기 위해 pip를 사용합니다. pip(라고 하는 것보다도 python)의 곤란한 일로서 인스톨 하는 디렉토리가 다양하고, 섞으면 꽤 귀찮게 됩니다. 예를 들면
지난번 에 rosbridge_server를 세우고 브라우저의 javascript에서 액세스하는 예를 소개했습니다. 이번에는
roslibpy
를 사용하여 rosbridge_server에 연결하는 클라이언트를 파이썬으로 만듭니다.설치
pip 문제
이번에는 roslibpy를 설치하기 위해 pip를 사용합니다. pip(라고 하는 것보다도 python)의 곤란한 일로서 인스톨 하는 디렉토리가 다양하고, 섞으면 꽤 귀찮게 됩니다. 예를 들면
/usr/local/lib/python2.7/
)apt로 pip를 취득한 경우 ·
sudo pip
로 취득했을 경우 ~/.local/lib/python2.7/
)pip --user
에 넣은 경우 이렇게하면 다음 명령을 실행하면 환경이 더러워지고 pip에서 오류가 발생합니다.
이 작업을 수행 한 후 오류가 발생합니다.
sudo apt install python-pip
pip install --upgrade pip
apt와 pip를 함께 사용하면 문제가 많으므로 apt를 사용하지 않고 설치하는 것이 좋습니다. 위의 작업을 수행 할 때 해결책으로 다음 명령을 사용하여 pip를 모두 제거 할 수 있습니다.
pip 제거
sudo python -m pip uninstall pip
sudo apt autoremove python-pip
실행할 명령
다음을 실행하면 roslibpy를 설치할 수 있습니다.
roslibpy 설치
curl -kL https://bootstrap.pypa.io/get-pip.py | sudo python
sudo pip install roslibpy
sudo pip install service_identity
소스 코드
web_lecture/scripts/rosbridge_client.py#!/usr/bin/env python
# -*- coding:utf8 -*-
import time
from roslibpy import Message, Ros, Topic
import time
class rosbridge_client:
def __init__(self):
self.ros_client = Ros('127.0.0.1', 9090)
print("wait for server")
self.publisher = Topic(self.ros_client, '/cmd_vel', 'geometry_msgs/Twist')
self.listener = Topic(self.ros_client, '/odom', 'nav_msgs/Odometry')
self.listener.subscribe(self.callback)
self.ros_client.on_ready(self.start_thread, run_in_thread=True)
self.ros_client.run_forever()
def callback(self, message):
x = message["pose"]["pose"]["position"]["x"]
y = message["pose"]["pose"]["position"]["y"]
print(x, y)
def start_thread(self):
while True:
if self.ros_client.is_connected:
self.publisher.publish(Message({
'linear': {
'x': 0.5,
'y': 0,
'z': 0
},
'angular': {
'x': 0,
'y': 0,
'z': 0.5
}
}))
else:
print("Disconnect")
break
time.sleep(1.0)
if __name__ == '__main__':
rosbridge_client()
#!/usr/bin/env python
# -*- coding:utf8 -*-
import time
from roslibpy import Message, Ros, Topic
import time
class rosbridge_client:
def __init__(self):
self.ros_client = Ros('127.0.0.1', 9090)
print("wait for server")
self.publisher = Topic(self.ros_client, '/cmd_vel', 'geometry_msgs/Twist')
self.listener = Topic(self.ros_client, '/odom', 'nav_msgs/Odometry')
self.listener.subscribe(self.callback)
self.ros_client.on_ready(self.start_thread, run_in_thread=True)
self.ros_client.run_forever()
def callback(self, message):
x = message["pose"]["pose"]["position"]["x"]
y = message["pose"]["pose"]["position"]["y"]
print(x, y)
def start_thread(self):
while True:
if self.ros_client.is_connected:
self.publisher.publish(Message({
'linear': {
'x': 0.5,
'y': 0,
'z': 0
},
'angular': {
'x': 0,
'y': 0,
'z': 0.5
}
}))
else:
print("Disconnect")
break
time.sleep(1.0)
if __name__ == '__main__':
rosbridge_client()
self.ros_client = Ros('127.0.0.1', 9090)
에서 rosbridge_server에 대한 연결을 설정합니다. self.ros_client.is_connected
로 rosbridge_server에 연결되어 있는지 확인합니다.self.ros_client.connect()
로 재연결을 시도합니다. Message()
에서 메시지를 json으로 작성하고 self.publisher.publish()
로 publish합니다. self.listener.subscribe(self.callback)
로 subscribe했을 때의 callback을 등록합니다. callback 함수의 인수로 수신 메시지를 건네줄 수 있어, x = message["pose"]["pose"]["position"]["x"]
와 같이 액세스 합니다. self.ros_client.on_ready(self.start_thread, run_in_thread=True)
에서 스레드를 생성할 수 있습니다. 실행
sim 실행roslaunch web_lecture web_if.launch
roslibpy 클라이언트 실행roscd web_lecture/scripts && rospy_client.py`で実行できます。
사용 사례
rosbridge는 원래 ros가 설치되지 않은 시스템에서 ros에 액세스하는 도구입니다. 그러나이 느슨하게 결합 된 시스템을 사용하면 아래 그림과 같이 멀티 마스터 시스템을 구성 할 수 있습니다.
참고
roslibpy의 example
구현에 대해 자세히 알아보기
목차 페이지 링크
ROS 강좌의 목차에 대한 링크
Reference
이 문제에 관하여(ROS 강좌 107 rosblidge client 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/srs/items/b95add62815a2a1d268a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
roslaunch web_lecture web_if.launch
roscd web_lecture/scripts && rospy_client.py`で実行できます。
rosbridge는 원래 ros가 설치되지 않은 시스템에서 ros에 액세스하는 도구입니다. 그러나이 느슨하게 결합 된 시스템을 사용하면 아래 그림과 같이 멀티 마스터 시스템을 구성 할 수 있습니다.
참고
roslibpy의 example
구현에 대해 자세히 알아보기
목차 페이지 링크
ROS 강좌의 목차에 대한 링크
Reference
이 문제에 관하여(ROS 강좌 107 rosblidge client 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/srs/items/b95add62815a2a1d268a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
ROS 강좌의 목차에 대한 링크
Reference
이 문제에 관하여(ROS 강좌 107 rosblidge client 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/srs/items/b95add62815a2a1d268a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)