03 พฤศจิกายน 2561

หุ่นยนต์ติดตามวัตถุ (ลูกปิงปอง) ใช้ ROS

....


1. สร้างไฟล์ x_sensor.py

เปิดโปรแกรม IDLE (using Python-2.7) คลิก New File เพื่อสร้างไฟล์ใหม่

เขียนโค้ดดังนี้



#!/usr/bin/env python
import cv2
import numpy as np
import rospy
from std_msgs.msg import Float32
from collections import deque
import argparse
import imutils
import sys


def talker():
 rospy.init_node('x_sensor', anonymous=True)
 pub=rospy.Publisher('x_coordinates',Float32,queue_size=1)
 rate = rospy.Rate(20) # 10hz
        ap = argparse.ArgumentParser()
 ap.add_argument("-v", "--video", dest="/home/robot/catkin_ws/src/robot_pkg/scripts/ball_tracking_example.mp4",help="path")
 ap.add_argument("-b", "--buffer", type=int, default=64,help="max buffer size")
 args = vars(ap.parse_args())

 greenLower = (20, 100, 100)
 greenUpper = (64, 255, 255)
 pts = deque(maxlen=64)
 if not args.get("video", False):
  camera = cv2.VideoCapture(0)
 else:
  camera = cv2.VideoCapture('args["video"]')

 while not rospy.is_shutdown():
  (grabbed, frame) = camera.read()
  if args.get("video") and not grabbed:
   break
  frame = imutils.resize(frame, width=533)
  frame = imutils.rotate(frame, angle=90)
  hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
  mask = cv2.inRange(hsv, greenLower, greenUpper)
  mask = cv2.erode(mask, None, iterations=2)
  mask = cv2.dilate(mask, None, iterations=2)
  cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[-2]
  center = None
  if len(cnts) > 0:
   c = max(cnts, key=cv2.contourArea)
   ((x, y), radius) = cv2.minEnclosingCircle(c)
   M = cv2.moments(c)
   center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))
   #print(center)
   pub.publish(int(M["m01"] / M["m00"]))
   rospy.loginfo(int(M["m01"] / M["m00"]))
   rate.sleep()
   if radius > 10:
    cv2.circle(frame, (int(x), int(y)), int(radius),(0, 255, 255), 2)
    cv2.circle(frame, center, 5, (0, 0, 255), -1)
  pts.appendleft(center)
  for i in xrange(1, len(pts)):
   if pts[i - 1] is None or pts[i] is None:
    continue
   thickness = int(np.sqrt(64 / float(i + 1)) * 2.5)
   cv2.line(frame, pts[i - 1], pts[i], (0, 0, 255), thickness)

  cv2.imshow("Frame", frame)
  if cv2.waitKey(1) & 0xFF==ord('q'):
   break

 rospy.spin()

if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSInterruptException:
 video_capture.release()
 cv2.destroyAllWindows()
 pass



หรือ ดาวน์โหลด ได้ที่

https://drive.google.com/open?id=1JdAgk75DMnbPNBrnN5OmOiXb3gvGbHaq

ไฟล์ :  x_sensor.py

เขียนโค้ดเสร็จแล้ว Save As.. เก็บไฟล์ไว้ที่ โฟลเดอร์ robot_pkg/scripts



ต้องการให้เป็นไฟล์ที่ ROS  เรียกใช้งานได้ โดยคำสั่ง:

cd catkin_ws/src/robot_pkg/scripts
chmod u+x x_sensor.py
2. สร้างไฟล์ dc_motor.py

เปิดโปรแกรม IDLE (using Python-2.7) คลิก New File เพื่อสร้างไฟล์ใหม่

เขียนโค้ดดังนี้



#!/usr/bin/env python
import cv2
import numpy as np
import rospy
from std_msgs.msg import Float32
from collections import deque
import argparse
import imutils
import sys


def talker():
 rospy.init_node('x_sensor', anonymous=True)
 pub=rospy.Publisher('x_coordinates',Float32,queue_size=1)
 rate = rospy.Rate(20) # 10hz
        ap = argparse.ArgumentParser()
 ap.add_argument("-v", "--video", dest="/home/robot/catkin_ws/src/robot_pkg/scripts/ball_tracking_example.mp4",help="path")
 ap.add_argument("-b", "--buffer", type=int, default=64,help="max buffer size")
 args = vars(ap.parse_args())

 greenLower = (20, 100, 100)
 greenUpper = (64, 255, 255)
 pts = deque(maxlen=64)
 if not args.get("video", False):
  camera = cv2.VideoCapture(0)
 else:
  camera = cv2.VideoCapture('args["video"]')

 while not rospy.is_shutdown():
  (grabbed, frame) = camera.read()
  if args.get("video") and not grabbed:
   break
  frame = imutils.resize(frame, width=800)
  frame = imutils.rotate(frame, angle=90)
  hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
  mask = cv2.inRange(hsv, greenLower, greenUpper)
  mask = cv2.erode(mask, None, iterations=2)
  mask = cv2.dilate(mask, None, iterations=2)
  cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[-2]
  center = None
  if len(cnts) > 0:
   c = max(cnts, key=cv2.contourArea)
   ((x, y), radius) = cv2.minEnclosingCircle(c)
   M = cv2.moments(c)
   center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))
   #print(center)
   pub.publish(int(M["m01"] / M["m00"]))
   rospy.loginfo(int(M["m01"] / M["m00"]))
   rate.sleep()
   if radius > 10:
    cv2.circle(frame, (int(x), int(y)), int(radius),(0, 255, 255), 2)
    cv2.circle(frame, center, 5, (0, 0, 255), -1)
  pts.appendleft(center)
  for i in xrange(1, len(pts)):
   if pts[i - 1] is None or pts[i] is None:
    continue
   thickness = int(np.sqrt(64 / float(i + 1)) * 2.5)
   cv2.line(frame, pts[i - 1], pts[i], (0, 0, 255), thickness)

  cv2.imshow("Frame", frame)
  if cv2.waitKey(1) & 0xFF==ord('q'):
   break

 rospy.spin()

if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSInterruptException:
 video_capture.release()
 cv2.destroyAllWindows()
 pass



หรือ ดาวน์โหลด ได้ที่

...

ไฟล์ :  dc_motor.py

เขียนโค้ดเสร็จแล้ว Save As.. เก็บไฟล์ไว้ที่ โฟลเดอร์ robot_pkg/scripts



ต้องการให้เป็นไฟล์ที่ ROS  เรียกใช้งานได้ โดยคำสั่ง:

cd catkin_ws/src/robot_pkg/scripts
chmod u+x dc_motor.py
ทดสอบการทำงาน

หน้าต่างที่1 เราจะ RUN ระบบ ROS จะต้องมี Core ที่ทำหน้าที่เป็นหัวใจของระบบ


roscore

หลังจากนั้นจึง Run Node ของเราได้

หน้าต่างที่ 2 เปิดการทำงาน 
x_sensor.py

rosrun robot_pkg x_sensor.py

หน้าต่างที่ 3 เปิดการทำงาน dc_motor.py

rosrun robot_pkg dc_motor.py


ผลลัพธ์การทำงาน แสดงการติดตามวัตถุ


..


...

30 ตุลาคม 2561

ติดตั้ง Webcam และ การติดตามวัตถุ


เสียบ Webcam เข้าที่ พอร์ต USB ของ Raspberry Pi  แล้วทำการติดตั้ง  mplayer เพื่อให้ Webcam ทำงาน

ติดตั้ง  mplayer

sudo apt-get install mplayer

ทดสอบการทำงานของ Webcam

sudo mplayer tv://



Motion เป็นโปรแกรมที่มีให้ใช้ สามารถดูภาพกล้องผ่านทางหน้าเว็บได้และยังมี Function ในการดักจับความเคลื่อนไหวของภาพเพื่อบันทึกและเก็บข้อมูลเป็นไฟล์ ภาพ หรือ วีดีโอ เก็บไว้ได้

ติดตั้ง  motion

sudo apt-get install motion

- ทำการรีบูทเครื่องใหม่

sudo reboot

เปิดโปรแกรม IDLE (using Python-2.7) คลิก New File เพื่อสร้างไฟล์ใหม่

เขียนโค้ดดังนี้


#!/usr/bin/env python
import rospy
from collections import deque
from imutils.video import VideoStream
import numpy as np
import argparse
import cv2
import imutils
import time

# construct the argument parse and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-v", "--video",
 help="path to the (optional) video file")
ap.add_argument("-b", "--buffer", type=int, default=64,
 help="max buffer size")
args = vars(ap.parse_args())

# define the lower and upper boundaries of the "green"
# ball in the HSV color space, then initialize the
# list of tracked points
greenLower = (29, 86, 6)
greenUpper = (64, 255, 255)
pts = deque(maxlen=args["buffer"])

# if a video path was not supplied, grab the reference
# to the webcam
if not args.get("video", False):
 vs = VideoStream(src=0).start()

# otherwise, grab a reference to the video file
else:
 vs = cv2.VideoCapture(args["video"])

# allow the camera or video file to warm up
time.sleep(2.0)

# keep looping
while True:
 # grab the current frame
 frame = vs.read()

 # handle the frame from VideoCapture or VideoStream
 frame = frame[1] if args.get("video", False) else frame

 # if we are viewing a video and we did not grab a frame,
 # then we have reached the end of the video
 if frame is None:
  break

 # resize the frame, blur it, and convert it to the HSV
 # color space
 frame = imutils.resize(frame, width=600)
 blurred = cv2.GaussianBlur(frame, (11, 11), 0)
 hsv = cv2.cvtColor(blurred, cv2.COLOR_BGR2HSV)

 # construct a mask for the color "green", then perform
 # a series of dilations and erosions to remove any small
 # blobs left in the mask
 mask = cv2.inRange(hsv, greenLower, greenUpper)
 mask = cv2.erode(mask, None, iterations=2)
 mask = cv2.dilate(mask, None, iterations=2)

 # find contours in the mask and initialize the current
 # (x, y) center of the ball
 cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,
  cv2.CHAIN_APPROX_SIMPLE)
 cnts = cnts[0] if imutils.is_cv2() else cnts[1]
 center = None

 # only proceed if at least one contour was found
 if len(cnts) > 0:
  # find the largest contour in the mask, then use
  # it to compute the minimum enclosing circle and
  # centroid
  c = max(cnts, key=cv2.contourArea)
  ((x, y), radius) = cv2.minEnclosingCircle(c)
  M = cv2.moments(c)
  center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))

  # only proceed if the radius meets a minimum size
  if radius > 10:
   # draw the circle and centroid on the frame,
   # then update the list of tracked points
   cv2.circle(frame, (int(x), int(y)), int(radius),
    (0, 255, 255), 2)
   cv2.circle(frame, center, 5, (0, 0, 255), -1)

 # update the points queue
 pts.appendleft(center)

 # loop over the set of tracked points
 for i in range(1, len(pts)):
  # if either of the tracked points are None, ignore
  # them
  if pts[i - 1] is None or pts[i] is None:
   continue

  # otherwise, compute the thickness of the line and
  # draw the connecting lines
  thickness = int(np.sqrt(args["buffer"] / float(i + 1)) * 2.5)
  cv2.line(frame, pts[i - 1], pts[i], (0, 0, 255), thickness)

 # show the frame to our screen
 cv2.imshow("Frame", frame)
 key = cv2.waitKey(1) & 0xFF

 # if the 'q' key is pressed, stop the loop
 if key == ord("q"):
  break

# if we are not using a video file, stop the camera video stream
if not args.get("video", False):
 vs.stop()

# otherwise, release the camera
else:
 vs.release()

# close all windows
cv2.destroyAllWindows()

ไฟล์ : 
ball_tracking.py


เขียนโค้ดเสร็จแล้ว Save As.. เก็บไฟล์ไว้ที่ โฟลเดอร์ robot_pkg/scripts



ต้องการให้เป็นไฟล์ที่ ROS  เรียกใช้งานได้ โดยคำสั่ง:

cd catkin_ws/src/robot_pkg/scripts
chmod u+x ball_tracking.py

หลังจากเขียนโค้ดเสร็จแล้ว ให้ทำการ Build

cd catkin_ws
catkin_make
ทดสอบการทำงาน

หน้าต่างที่1 เราจะ RUN ระบบ ROS จะต้องมี Core ที่ทำหน้าที่เป็นหัวใจของระบบ


roscore

หลังจากนั้นจึง Run Node ของเราได้

หน้าต่างที่ 2 เปิดการทำงาน 
ball_tracking.py

rosrun robot_pkg ball_tracking.py

ผลลัพธ์การทำงาน แสดงการติดตามวัตถุ



หมายเหตุ : เรียบเรียงและแก้ไขดัดแปลงจากบทความต้นฉบับด้านล่าง



25 ตุลาคม 2561

ติดตั้ง OpenCV 3.4.0 ให้กับ หุ่นยนต์ ROS


OpenCV คือ โปรแกรมที่พัฒนาขึ้นโดยได้รับการสนับสนุนจาก Intel Corporation จำกัด เป็นซอฟต์แวร์ แบบเปิดเผยรหัส (Library Open Source) สำหรับใช้ในการประมวลผลภาพ (Image Processing) เพื่อให้สามารถนำไปต่อยอดพัฒนาโปรแกรมต่าง ๆ ได้ง่าย ใช้ได้บนระบบปฏิบัติการที่เป็น Linux และ Microsoft Windows และสามารถพัฒนาโปรแกรมได้หลากหลายภาษา

**** การใช้ประโยขน์ ****

เพื่อให้การพัฒนาโปรแกรมทางด้าน การมองเห็นของคอมพิวเตอร์ (Computer Vision) คือสามารถประมวลผลภาพดิจิตอลได้ทั้งภาพนิ่ง และภาพเคลื่อนไหวเช่น ภาพจากกล้อง VDO หรือ VDO File เป็นไปได้อย่างสะดวก มีฟังก์ชันสำเร็จรูปสำหรับจัดการข้อมูลภาพ และการประมวลผลภาพพื้นฐานเช่น การหาขอบภาพ การกรองข้อมูลภาพ



ก่อนติดตั้ง ติดตั้ง OpenCV 

เปิด Terminal  โดย คลิกขวา ที่ Home แล้ว เลือก Open in Terminal
Update and Upgrade and Cleanup

sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo apt-get -y autoremove

-เมื่อทำการอัพเดตเรียบร้อยต้องทำการรีบูทเครื่องใหม่

sudo reboot

** หลัง Reboot พบปัญหา Firefox Web Browser ไม่สามารถใช้งานได้ **

- แก้ปัญหาโดย ติดตั้ง Chromium Web Browser

sudo apt install -y chromium-browser

เปิดใช้งาน

chromium-browser

หรือ



Install Dependencies

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

- ติดตั้ง image I/O packages พวกนามสกุล JPEG, PNG, TIFF, etc

sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

- ติดตั้งฟังก์ชันเกี่ยวกับการใช้งานวีดีโอ

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev

For GUI:

sudo apt-get install libgtk-3-dev

For optimization:

sudo apt-get install libatlas-base-dev gfortran pylint

To build OpenCV binding for both python 2 and 3.

sudo apt-get install python2.7-dev python3.5-dev


ติดตั้ง OpenCV

Download OpenCV 3.4.0, go to terminal and type:

wget https://github.com/opencv/opencv/archive/3.4.0.zip -O opencv-3.4.0.zip

Download OpenCV Contrib 3.4.0

wget https://github.com/opencv/opencv_contrib/archive/3.4.0.zip -O opencv_contrib-3.4.0.zip

We need to unzip to extract the zip files.

sudo apt-get install unzip

Now extract OpenCV and OpenCV Contrib:

unzip opencv-3.4.0.zip
unzip opencv_contrib-3.4.0.zip

Make a directory named build inside OpenCV-3.4.0:

cd  opencv-3.4.0
mkdir build
cd build

Now we are going to configure cmake:

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.4.0/modules -DOPENCV_ENABLE_NONFREE=True ..

The command will take some time to execute.

make -j4

Install in the location /usr/local using command

sudo make install



Reinitialize static libs using the following command

sudo ldconfig

Finally, check OpenCV version.

python
import cv2
cv2.__version__




เราจะใช้ imutils คอลเลกชันของ OpenCV เพื่ออำนวยความสะดวกในการทำงานขั้นพื้นฐานบางอย่าง (เช่นปรับขนาด) ได้ง่ายขึ้น

ทำการติดตั้ง imutils ดังนี้

pip install --user imutils




ทดสอบ OpenCV

cd  opencv-3.4.0
cd samples/python
python video.py



ผลลัพธ์การทำงาน



แสดงว่า OpenCV  สามารถใช้งานได้แล้วครับ


หมายเหตุ : เรียบเรียงและแก้ไขดัดแปลงจากบทความต้นฉบับด้านล่าง

23 ตุลาคม 2561

ทดสอบการเคลื่อนที่ของหุ่นยนต์ ROS


เริ่มต้นจากการเปิด Terminal  โดย คลิกขวา ที่ Home แล้ว เลือก Open in Terminal


สร้าง Package ใหม่ ชื่อ robot_pkg ขึ้นมา ซึ่ง Package จะต้องอยู่ใน src ของ Workspace



cd catkin_ws/src
catkin_create_pkg robot_pkg std_msgs rospy


แล้วสร้างโฟลเดอร์ ที่มีชื่อว่า  scripts ให้อยู่ภายใต้ โฟลเดอร์ robot_pkg


mkdir catkin_ws/src/robot_pkg/scripts



เปิดโปรแกรม IDLE (using Python-2.7)



คลิก New File เพื่อสร้างไฟล์ใหม่ เขียนโค้ดเสร็จแล้ว Save As.. เก็บไฟล์ไว้ที่ โฟลเดอร์ robot_pkg/scripts



เขียนโค้ดดังนี้

ไฟล์ : test_motor.py

#!/usr/bin/env python
import rospy
import RPi.GPIO as GPIO
GPIO.setwarnings(False)
import time

GPIO.setmode(GPIO.BOARD)
GPIO.setup(11,GPIO.OUT)
GPIO.setup(13,GPIO.OUT)
GPIO.setup(35,GPIO.OUT)
GPIO.setup(37,GPIO.OUT)
#ForWard
GPIO.output(11,True)
GPIO.output(13,False)
GPIO.output(35,True)
GPIO.output(37,False)
time.sleep(0.4)
#Stop
GPIO.output(11,False)
GPIO.output(13,False)
GPIO.output(35,False)
GPIO.output(37,False)
time.sleep(0.6)
#BackWard
GPIO.output(11,False)
GPIO.output(13,True)
GPIO.output(35,False)
GPIO.output(37,True)
time.sleep(0.4)
#TurnLeft
GPIO.output(11,True)
GPIO.output(13,False)
GPIO.output(35,False)
GPIO.output(37,False)
time.sleep(0.6)
#Stop
GPIO.output(11,False)
GPIO.output(13,False)
GPIO.output(35,False)
GPIO.output(37,False)
time.sleep(0.6)
#TurnRight
GPIO.output(11,False)
GPIO.output(13,False)
GPIO.output(35,True)
GPIO.output(37,False)
time.sleep(0.6)
GPIO.cleanup()




ต้องการให้เป็นไฟล์ที่ ROS  เรียกใช้งานได้ โดยคำสั่ง:

cd catkin_ws/src/robot_pkg/scripts
chmod u+x test_motor.py


หลังจากเขียนโค้ดเสร็จแล้ว ให้ทำการ Build

cd catkin_ws
catkin_make


ทดสอบการทำงาน

 เปิด เพาเวอร์สวิตซ์ จะมีไฟสีแดงติดที่ Motor Driver 



หาอุปกรณ์ เช่น แก้วน้ำ ยกตัวหุ่นยนต์ให้สูงขึ้น เพื่อให้ล้อของหุ่นยนต์หมุนได้



หน้าต่างที่1 เราจะ RUN ระบบ ROS จะต้องมี Core ที่ทำหน้าที่เป็นหัวใจของระบบ

roscore

หลังจากนั้นจึง Run Node ของเราได้

หน้าต่างที่ 2 เปิดการทำงาน test_motor.py


rosrun robot_pkg test_motor.py


ผลลัพธ์การทำงาน ที่ควรจะเป็น

1. ล้อทั้ง 4 ล้อ หมุนเดินหน้า

2. ล้อทั้ง 4 ล้อ หมุนถอยหลัง

3. ล้อทั้ง 2 ล้อ ด้านขวาของหุ่นยนต์หมุน

4. ล้อทั้ง 2 ล้อ ด้านซ้ายของหุ่นยนต์หมุน


จากนั้น ให้ Shutdown หุ่นยนต์ และถอดอุปกรณ์ต่อพ่วงคอมพิวเตอร์ออก หาพื้นที่ ทดสอบการเคลื่อนที่ของหุ่นยนต์ ROS  แล้ว เปิดไฟเข้าระบบ

เสียบ Power Bank เข้ากับ Raspberry Pi

เปิด เพาเวอร์สวิตซ์ จะมีไฟสีแดงติดที่ Motor Driver


เปิดใช้งาน Remote Desktop หุ่นยนต์ ROS ขั้นตอนตามลิงค์ด้านล่าง

เปิดใช้งาน Remote Desktop หุ่นยนต์ ROS


หน้าต่างที่1 เราจะ RUN ระบบ ROS จะต้องมี Core ที่ทำหน้าที่เป็นหัวใจของระบบ


roscore


หน้าต่างที่ 2 เปิดการทำงาน test_motor.py

rosrun robot_pkg test_motor.py


ผลลัพธ์การทำงาน




Shutdown หุ่นยนต์ ด้วยคำสั่ง

sudo poweroff



เปิดใช้งาน Remote Desktop หุ่นยนต์ ROS




เพื่อความสะดวกในการทดสอบหุ่นยนต์ ROS  ให้เปิดการใช้งาน รีโมทเดสท็อป (Remote Desktop) จากคอมพิวเตอร์ PC ระบบปฏิบัติการ Windows เพื่อใช้ในการรีโมตล็อกอิน (Remote Login) เข้าไปยัง หุ่นยนต์ ROS

ซึ่งสามารถใช้ในการควบคุมการทำงานของ หุ่นยนต์ ROS ได้จาก คอมพิวเตอร์ PC  และต้องการถอดการเชื่อมต่อสายต่างๆ ออกจาก หุ่นยนต์ เพื่อให้หุ่นยนต์มีอิสระในการเคลื่อนที่นั่นเอง

โดยมีขั้นตอนดังนี้

เชื่อมต่อระบบคอมพิวเตอร์เข้ากับตัวหุ่นยนต์ และเปิดระบบ


เริ่มต้นจากการเปิด Terminal  โดย คลิกขวา ที่ Home แล้ว เลือก Open in Terminal

1. ติดตั้ง xrdp ให้กับ 
หุ่นยนต์ ROS
sudo apt-get install xrdp
sudo apt-get update

2. ติดตั้ง Alternative Desktop ให้กับ หุ่นยนต์ ROS

sudo apt-get install mate-core mate-desktop-environment mate-notification-daemon

3. ตั้งค่าให้ xrdp ให้ใช้งานแบบ Remote Desktop
sudo sed -i.bak '/fi/a #xrdp multiple users configuration \n mate-session \n' /etc/xrdp/startwm.sh

4. ตรวจสอบ IP ของ หุ่นยนต์ ROS
ifconfig

ในตัวอย่าง IP ของ หุ่นยนต์ ROS คือ 192.168.1.40 (IP ที่ได้แต่ละครั้งอาจไม่เหมือนกัน ให้ตรวจสอบทุกครั้งที่มีการเชื่อมต่อใหม่)



5. รีสตาร์ท หุ่นยนต์ ROS 
sudo reboot

โดยยังไม่ต้อง ล็อกอิน เข้าสู่ระบบ




6. เปิดโปรแกรม Remote Desktop Connection ของ คอมพิวเตอร์ PC

ที่คอมพิวเตอร์ PC ระบบปฏิบัติการ Windows ให้ไปที่สตาร์ทเมนูของ ในตัวอย่างเป็น Windows 7 (ด้านล่างซ้ายมือสุด) ให้พิมพ์คำว่า remote ที่ช่องค้นหา ในส่วนของ Programs จะเห็นโปรแกรม Remote Desktop Connection ให้คลิกเข้าไป



จะมีหน้าต่าง Remote Desktop Connection ปรากฏขึ้นมา


 ใส่ IP ของ หุ่นยนต์ ROS ที่ได้จากขั้นตอนที่ 4 ในตัวอย่าง คือ 192.168.1.40 คลิก Connect

คลิก Yes

ใส่ username และ password ในการเข้าสู่ระบบ หุ่นยนต์ ROS


เข้าสู่ระบบ ของ หุ่นยนต์ ROS



7. ทดสอบการทำงานของ หุ่นยนต์ ROS ผ่านใช้งาน Remote Desktop

จากขั้นตอนการทำงาน สร้าง Packages ภาษา Python ให้กับ Raspberry Pi ที่เคยสร้างไว้ก่อนหน้านี้

คลิกขวา ที่ Home แล้ว เลือก Open in Terminal



หน้าต่างที่1 เราจะ RUN ระบบ ROS จะต้องมี Core ที่ทำหน้าที่เป็นหัวใจของระบบ

roscore



หลังจากนั้นจึง Run Node ของเราได้

หน้าต่างที่ 2 เปิด Publisher (ตัวส่งข้อมูล)


rosrun test_python random_number.py



หน้าต่างที่ 3 เปิด Subscriber (ตัวฟัง/รับข้อมูล)
rosrun test_python random_subscriber.py


ถ้าทำงานได้ตามปรกติ แสดงว่า การใช้งาน Remote Desktop กับหุ่นยนต์ ROS ของเรานั้นพร้อมทำงานแล้วครับ


หมายเหตุ : เรียบเรียงและแก้ไขดัดแปลงจากบทความต้นฉบับด้านล่าง