머리말
"로스 로봇 프로그래밍 연습,"세 번째 장 루틴이 가상의 정의 데이터 형식.
구현 과정
참조 이전 장 블로그를 작업 공간을 만들기 :
ROS 로봇 프로그래밍 연습 (3.1) - 주제의 보도 자료를
파일 구조 기본 패키지 봐 :
cd ~/catkin_ws/src/basic
ls
tree
확인하자가 작동 시작
1, 우리는 메시지 유형을 작성, 파일이 Complex.msg 작성
cd ~/catkin_ws/src/basic
mkdir msg
cd msg
vi Complex.msg
정력과 편집, 내가 누르면 키보드 입력 모드에서 입력은 그대로 다음 :
저장하고 종료 "WQ"(참고 : 따옴표에있는 모든 내용이 "") Esc 키를 눌러 편집 모드, 입력을 종료 할 수 있습니다.
2, 파일을 편집 package.xml
cd ..
vi package.xml
2.1 상기 <build_depend> rospy </ build_depend> <build_depend> std_msgs </ build_depend>
첨가 이러한 build_depend 근방 :
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
참고 : ROS의 인디고 버전 인 경우, exec_depend 필요가 run_depend를 교체합니다.
2.2
위의 ESC 출구 편집 모드, 입력 "WQ는"저장하고 종료합니다.
3, 파일을 편집 CMakeLists.txt
vi CMakeLists.txt
3.1 변형 find_package () 플러스 message_generation :
3.2 검토 catkin_package () 플러스 message_runtime :
3.3 검토 add_message_files () 플러스 Complex.msg :
: 함께 발생 시스템 3.4 검토 generate_message ()는 제거 주이며
, 4 SRC에 기본 패키지에있는 파일을 message_publisher.py을 추가하고 message_subscriber.py :
cd src
vi message_publisher.py
vi message_subscriber.py
코드에 각각 붙여 넣기 :
message_publisher.py
#!/usr/bin/env python
import roslib; roslib.load_manifest('basic')
import rospy
from basic.msg import Complex
from random import random
rospy.init_node('message_publisher')
pub=rospy.Publisher('complex',Complex)
rate=rospy.Rate(2)
while not rospy.is_shutdown():
msg=Complex()
msg.real=random()
msg.imaginary=random()
pub.publish(msg)
rate.sleep()
message_subscriber.py
#!/usr/bin/env python
import roslib; roslib.load_manifest('basic')
import rospy
from basic.msg import Complex
def callback(msg):
print 'Real:',msg.real
print 'Imaginary',msg.imaginary
print
rospy.init_node('message_subscriber')
sub = rospy.Subscriber('complex', Complex,callback)
rospy.spin()
5, 터미널 실행 roscore를 엽니 다
roscore
6, 수익률은 루트 디렉토리, catkin_make 컴파일 및 실행되는 스크립트 술집 catkin_ws
cd ~/catkin_ws
catkin_make
source devel/setup.bash
rosrun basic message_publisher.py
7, 다른 터미널을 실행 subscriber.py을 엽니 다
rosrun basic message_subscriber.py
8, 운영 결과 :