วันจันทร์ที่ 23 ธันวาคม พ.ศ. 2562
#3 เริ่ม Create ROS Workspace
การสร้าง .Workspace ใน ROS
การสร้าง Folder ของ Workspaceการ Initial workspace
การสร้าง package
การกำหนด source
#6 ROS on multiple machines ทำอย่างไรให้ติดต่อ ROS มากกว่า 2 ตัว
ROS on multiple machines ทำอย่างไรให้ติดต่อ ROS
มากกว่า 2 ตัว
ในบทความนี้จะพูดถึงการติดต่อกันระหว่าง ROS 2 ตัว โดยจะให้ตัวที่ 1 . Run roscore เพื่อเป็น Master ในการประมวลผล และอีกตัวหนึ่งเป็นการติดต่อ Master เพื่อรับและส่งข้อมูลระหว่าง ROS มากกว่า 1 ตัว
ในตัวอย่างต่อไปนี้ เราจะมาทดสอบ Turtlesim โดยให้ MASTER เป็นตัวที่แสดงผลโปรแกรม และ Client จะเป็นส่วนของการควบคุมโดยในที่นี้เราจะใช้ turtlesim_teleop โดยผลลัพธ์ที่ได้คือเราสามารถใช้งานร่วมกันระหว่าง ROS 2 ตัวได้
#5 ROS + Joy Stick
ROS + Joy Stick USB
การเชื่อมต่ออุปกรณ์ Joy Stick กับ ROS (Robot Operation Systems) เพื่อควบคุมการทำงานกับอุปกรณ์ต่างๆ เช่นควบคุม motor ต่างๆ
การติดต่อกับ Joy Stick จะต้องลง package ubuntu ตามคำสั่งนี้
และต้องลง Package ของ ROS . ชื่อ #sudo apt-get install ros-melodic-joy
การใช้งาน อุปกรณ์ Joystick จะอยู่ที่ . # ls /dev/input/js0 หรือ js1 ต้องลองดูว่าสามารถใช้ตัวไหนได้บ้างโดยใช้คำสั่ง . # sudo jstest /dev/input/js0 . จะเห็นข้อมูลต่างๆ ของปุ่มบน joystick . ทดลองกดได้เลย ลองดูการเปลี่ยนแปลงของชุดข้อมูล
VDO สอน
การเชื่อมต่ออุปกรณ์ Joy Stick กับ ROS (Robot Operation Systems) เพื่อควบคุมการทำงานกับอุปกรณ์ต่างๆ เช่นควบคุม motor ต่างๆ
การติดต่อกับ Joy Stick จะต้องลง package ubuntu ตามคำสั่งนี้
และต้องลง Package ของ ROS . ชื่อ #sudo apt-get install ros-melodic-joy
การใช้งาน อุปกรณ์ Joystick จะอยู่ที่ . # ls /dev/input/js0 หรือ js1 ต้องลองดูว่าสามารถใช้ตัวไหนได้บ้างโดยใช้คำสั่ง . # sudo jstest /dev/input/js0 . จะเห็นข้อมูลต่างๆ ของปุ่มบน joystick . ทดลองกดได้เลย ลองดูการเปลี่ยนแปลงของชุดข้อมูล
VDO สอน
#2 เริ่มต้นใช้ ROS ด้วย Turtlesim
เริ่มต้นใช้ ROS
การติดตั้ง Ubuntu กับ ROS melodic สามารถดูได้ที่ http://wiki.ros.org/melodic/Installation/Ubuntu
มาเรียนรู้ tutlesim
tutlesim คือ โปรแกรมที่ติดตั้งมากับ ROS เพื่อเป็นพื้นฐานการเรียนรู้การทำงานของ ROS โดยการจำลอง เต่า มา 1 ตัวในกรอบ ซึ่งจะเป็นตัวอย่างจะควบคุมการทำงาน ROS
การเรียนรู้ Public / Subscripts เรียนรู้คำสั่งต่างๆ ที่เกี่ยวกับ ROS
1. เปิด terminal เพื่อ Runคำสั่ง # roscore เพื่อพร้อมกับการใช้งาน ROS
2. เปิด terminal ใหม่เพื่อสร้าง tutlesim ขึ้นมา โดยใช้คำสั่ง # rosrun turtlesim turtlesim_node
อธิบายการทำงาน . rosrun คือคำสั่ง run node tultlesim ขึ้นมา
รูปแบบ # rosrun
อธิบายง่ายๆ turtlesim_node คือโปรแกรมที่รอรับคำสั่งเพื่อทำให้เต่าเคลื่อนที่ไปได้ ในขั้นตอนนี้คือ initial ค่าเริ่มต้นและรอคำสั่งในขั้นตอนต่อไป
3. เปิด Terminal ใหม่เพื่อสร้างการรับข้อมูลจาก Keyboard โดยใช้คำสั่ง
# rosrun turtlesim turtle_teleop_key
คำสั่งนี้เมื่อ run แล้ว จะหน้าจอจะค้าง . เราสามารถกดปุ่ม ขึ้น ลง ซ้าย ขวา โดยสั่งเกตุหน้าต่าง turtlesim_node . จะมีการเคลื่อนไหวแล้ว
4. เปิด Terminal ใหม่เพื่อเปิดโปรแกรม rqt_graph เพื่อแสดงความสัมพันธ์การทำงาน การส่ง Message ภายในตัว Turtlesim
5. เปิด Terminal ใหม่เพื่อทดสอบการใช้ Command line
-> rosnode list
-> rostopublic list
-> rostopblic echo /turtle/cmd_vel
#1 What is Robots ? and What is ROS ( Robot Operating Systems )?
หุ่นยนต์ ROBOTS
แบ่งประเภทหุ่นยนต์หลักๆได้ 2 ประเภท
Stationary Robots ยังแบ่งย่อยออกเป็น ชนิดต่างๆ
- Cartesian Robots
- Cylindrical
- Spherical
- SCARA
- Articulated
- Parallel
ROS (Robot Operating System) คือ
ROS มีโครงสร้างการทำงานแบบ node ซึ่งมีหลายๆ node ทำงานร่วมกันและมีการส่อสารด้วยวิธี การ Public และ SubscriptROS คือ โครงการโอเพนซอร์สที่สร้าง Framework โดยรวบรวม library และเครื่องมือต่างๆ ทั้ง Hardware และ Software เพื่อลดความซับซ้อนและเพิ่มประสิทธิภาพในการ สร้างหุ่นยนต์ โดยนำ . ROS ไปใช้ประโยชน์ในการสร้างหุ่นยนต์ด้านอุตสาหกรรม หรือ หุ่นยนต์ที่มีความซับซ้อนสูง
ROS เราสามารถเขียนโปรแกรมเพิ่มเติมได้ด้วย ภาษา Python และ C++ ทำให้พัฒนาโปรแกรมได้สะดวก รวมทั้ง ROS เป็น OpenSource สามารถปรับแต่งและพัฒนาต่อยอดได้
Website สำหรับ ROS www.ros.org
ROS เป็น OpenSource Framework ที่ต้อง Run บนระบบปฎิบัติการ Linux ซึ่ง ROS จะ Support Ubuntu 18.04 สำหรับ ROS Version Melodic
Website สำหรับ ROS www.ros.org
ROS เป็น OpenSource Framework ที่ต้อง Run บนระบบปฎิบัติการ Linux ซึ่ง ROS จะ Support Ubuntu 18.04 สำหรับ ROS Version Melodic
ตัวอย่างรูปแบบการทำงานของ ROS
เครื่องมือที่ช่วยในการพัฒนาใน ROS
1. rqt_graph . rqt_graph จะเป็นการแสดงกราฟการเชื่อมต่อกันระหว่าง nodes ต่างๆที่มีการส่งข้อมูลหากัน ผ่าน GUI
2. rviz โปรแกรมสำหรับเชื่อมต่อข้อมูลแสดงเป็น . User Interface
3. Gazebo เป็น simulator ที่สนับสนุนหุ่นยนต์หลายตระกูล
วันอาทิตย์ที่ 14 สิงหาคม พ.ศ. 2559
เปิดปิด Relay บอร์ด nudemcu กับ netpie ง่ายๆ ไม่ยากอย่างที่คิด
ก่อนอื่นต้องขอบอกก่อนว่า เคยลองเล่น nodemcu (ESP2866) เมื่อ ประมาณ 1 ปีมาแล้ว แต่ไม่ได้ทำอะไรต่อ วันนี้เป็นโอกาสดี ลองทบทวนความรู้ที่เรียนมาสักหน่อย โดยจะขออธิบายวิธีการทำง่ายๆ ให้เข้าใจกัน โดยเราจะวางแผนก่อน
1. การต่อวงจร ระหว่าง nodemcu กับ relay
2. สมัคร Netpie และสร้าง Application
3. เขียนโปรแกรมลง Nodemcu ร่วมกับการใช้ netpie
4. เชื่อมต่อกับ netpie FreeBoard
4 ขั้นตอน เริ่มกันเลย
ขั้นตอนที่ 1 การต่อวงจร ระหว่าง nodemcu กับ relay
จะต่อรูปแบบนี้
จัดการต่อสาย VCC GND และ output (GPIO 12, 13)

ต่อเข้ากับ Relay ให้ตรงกัน
เสร็จขั้นตอนแรกแล้ว
ขั้นตอนที่ 2 สมัคร Netpie และสร้าง Application
1. เข้าไปที่ https://netpie.io
2. ทำการสมัคร ระบบจะส่ง SMS มาให้เพื่อ Confirm
3. เข้ามาเมนู Application
ขั้นตอนที่ 3 เขียนโปรแกรมลง Nodemcu ร่วมกับการใช้ netpie
7. เลือก Button เราจะทำปุ่มเปิดไฟ
ตอนนี้สร้าง 2 Switch มี เปิด / ปิด และสถานะการเปิดปิด
จากนั้น กลับไปดูที่ Code เราสนใจ onMsghandler เป็น Event ที่คอยดักจับ Message ที่เข้ามา
SW1ON, SW2ON, SW1OFF, SW2OFF ==> คือ message จาก Freeboard เราทำการเลือกเงื่อนไข
โดยใน Code นี้ จะเป็นการเปิด และ ปิดไฟ ที่ GPIO ต่างๆ
ลองทำทดสอบดู ครับ ..... ครั้งหน้าจะทำเป็น VDO มาให้ดูครับ
1. การต่อวงจร ระหว่าง nodemcu กับ relay
2. สมัคร Netpie และสร้าง Application
3. เขียนโปรแกรมลง Nodemcu ร่วมกับการใช้ netpie
4. เชื่อมต่อกับ netpie FreeBoard
4 ขั้นตอน เริ่มกันเลย
ขั้นตอนที่ 1 การต่อวงจร ระหว่าง nodemcu กับ relay
จะต่อรูปแบบนี้
จัดการต่อสาย VCC GND และ output (GPIO 12, 13)

ต่อเข้ากับ Relay ให้ตรงกัน
เสร็จขั้นตอนแรกแล้ว
ขั้นตอนที่ 2 สมัคร Netpie และสร้าง Application
1. เข้าไปที่ https://netpie.io
2. ทำการสมัคร ระบบจะส่ง SMS มาให้เพื่อ Confirm
3. เข้ามาเมนู Application
4. กดปุ่ม + Application ใส่ชื่อ App ที่ต้องการตั้งให้เรียบร้อย จากนั้นรอการเขียน Code จาก nodemcu
1. install microgear ก่อน
2. install esp2866
3. เมื่อ install ทั้ง 2 เสร็จแล้ว ให้เข้าไปที่ โค้ดตัวอย่าง
4. ปรับแต่ง Code นี้หน่อย
1. เพิ่ม Esp2866WIFI มาก่อน
2. ใส่ Key และ Password จาก Netpie โดยเข้าไปยัง Application ที่เราสร้างไว้ใน Netpie แล้ว Copy Key / Password มาใส่ใน Code ตามตัวอย่าง
ปรับ Network และ AppID KEY SECRET ALIAS ให้เรียบร้อย
5. ลองทดสอบ Upload Code เข้า Node MCU
Code
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
const char* ssid = "T-TECH";
const char* password = "xxxxx";
#define APPID "NetPieApp1"
#define KEY "xxxxx"
#define SECRET "xxxx"
#define ALIAS "esp8266"
WiFiClient client;
int timer = 0;
int i =1;
MicroGear microgear(client);
/* If a new message arrives, do this */
void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) {
Serial.print("Incoming message --> ");
msg[msglen] = '\0';
char strState[msglen];
for (int i = 0; i < msglen; i++)
{
strState[i] = (char)msg[i];
Serial.print((char)msg[i]);
}
Serial.println();
String stateStr = String(strState).substring(0, msglen);
//=========== ช่วงประมวลผลคำสั่ง =============
if (stateStr == "SW1ON")
{
digitalWrite(13, HIGH);
microgear.chat("sw1", "ON"); //==== คำสั่ง chat เพื่อบอกส่งค่าสถานะไปยังหลอด LED บน NETPIE Freeboard
}
else if (stateStr == "SW1OFF")
{
digitalWrite(13, LOW);
microgear.chat("sw1", "OFF"); //==== คำสั่ง chat เพื่อบอกส่งค่าสถานะไปยังหลอด LED บน NETPIE Freeboard
}else if (stateStr == "SW2ON")
{
digitalWrite(12, HIGH);
microgear.chat("sw2", "ON"); //==== คำสั่ง chat เพื่อบอกส่งค่าสถานะไปยังหลอด LED บน NETPIE Freeboard
}
else if (stateStr == "SW2OFF")
{
digitalWrite(12, LOW);
microgear.chat("sw2", "OFF"); //==== คำสั่ง chat เพื่อบอกส่งค่าสถานะไปยังหลอด LED บน NETPIE Freeboard
}
//=========== ช่วงประมวลผลคำสั่ง =============
}
void onFoundgear(char *attribute, uint8_t* msg, unsigned int msglen) {
Serial.print("Found new member --> ");
for (int i=0; i
Serial.print((char)msg[i]);
Serial.println();
}
void onLostgear(char *attribute, uint8_t* msg, unsigned int msglen) {
Serial.print("Lost member --> ");
for (int i=0; i
Serial.print((char)msg[i]);
Serial.println();
}
/* When a microgear is connected, do this */
void onConnected(char *attribute, uint8_t* msg, unsigned int msglen) {
Serial.println("Connected to NETPIE...");
/* Set the alias of this microgear ALIAS */
microgear.setAlias(ALIAS);
}
void setup() {
/* Add Event listeners */
/* Call onMsghandler() when new message arraives */
microgear.on(MESSAGE,onMsghandler);
/* Call onFoundgear() when new gear appear */
microgear.on(PRESENT,onFoundgear);
/* Call onLostgear() when some gear goes offline */
microgear.on(ABSENT,onLostgear);
/* Call onConnected() when NETPIE connection is established */
microgear.on(CONNECTED,onConnected);
Serial.begin(115200);
Serial.println("Starting...");
/* Initial WIFI, this is just a basic method to configure WIFI on ESP8266. */
/* You may want to use other method that is more complicated, but provide better user experience */
if (WiFi.begin(ssid, password)) {
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
}
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
/* Initial with KEY, SECRET and also set the ALIAS here */
microgear.init(KEY,SECRET,ALIAS);
/* connect to NETPIE to a specific APPID */
microgear.connect(APPID);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
/* To check if the microgear is still connected */
if (microgear.connected()) {
Serial.println("connected");
/* Call this method regularly otherwise the connection may be lost */
microgear.loop();
}
else {
Serial.println("connection lost, reconnect...");
if (timer >= 5000) {
microgear.connect(APPID);
timer = 0;
}
else timer += 100;
}
delay(100);
}
6. ถ้าทุกอย่างไม่ผิดผลาด จะ Connect Netpie ได้
7. ลองกลับไปดูที่ Application ใน Netpie จะมี Device เพิ่มขึ้นมาแล้ว
ขั้นตอนที่ 4. เชื่อมต่อกับ netpie FreeBoard
1. ไป Download Freeboard ที่ https://github.com/netpieio
2. เมื่อ Load เรียบร้อยแล้ว แตก Zip แล้ว เข้าไป Folder จากนั้น เปิด index.html ออกมาเลย
3. Add
4. เลือก microgear
5. กำหนด ค่า ต่าง
กรอกข้อมูล Applicaiton Key / Password จาก Application บน NETPIE
และที่สำคัญคือ microgear refferance เพื่ออ้างอิง จากนั้น SAVE
6. Add pane เพื่อเลือก UI ต่างๆ
8. กำหนดค่าตามรูป เดี๋ยวอธิบายอีกที
ตรงนี้คือการกำหนดปุ่ม และเมื่อกดปุ่มแล้วจะส่งค่า ไปยังอุปกรณ์ของเรา Nodemcu โดย Action ที่จำเป็นคือ onclick action รูปแบบการใส่จะเป็น microgear["device"].chat("esp8266","SW1ON")
device = เกิดจากการรกำหนดค่า ในข้อ 5 คือ Refferance
esp8266 = ห้องของการส่ง Message ตรงนี้จะสัมพันธ์กับ Code ภาษา C
SW1ON = message ที่ส่งเข้าอุปกรณ์ ยกตัวอย่าง SW1ON คือ switch 1 ให้ on หรือ SW1OFF คือ Switch 1 ให้ OFF ค่า Message นี้จะถูกไปเปรียบเทียบใน Code C ต่อไป
จากนั้น กลับไปดูที่ Code เราสนใจ onMsghandler เป็น Event ที่คอยดักจับ Message ที่เข้ามา
SW1ON, SW2ON, SW1OFF, SW2OFF ==> คือ message จาก Freeboard เราทำการเลือกเงื่อนไข
โดยใน Code นี้ จะเป็นการเปิด และ ปิดไฟ ที่ GPIO ต่างๆ
/* If a new message arrives, do this */
void onMsghandler(char *topic, uint8_t* msg, unsigned int msglen) {
Serial.print("Incoming message --> ");
msg[msglen] = '\0';
char strState[msglen];
for (int i = 0; i < msglen; i++)
{
strState[i] = (char)msg[i];
Serial.print((char)msg[i]);
}
Serial.println();
String stateStr = String(strState).substring(0, msglen);
//=========== ช่วงประมวลผลคำสั่ง =============
if (stateStr == "SW1ON")
{
digitalWrite(13, HIGH);
microgear.chat("sw1", "ON"); //==== คำสั่ง chat เพื่อบอกส่งค่าสถานะไปยังหลอด LED บน NETPIE Freeboard
}
else if (stateStr == "SW1OFF")
{
digitalWrite(13, LOW);
microgear.chat("sw1", "OFF"); //==== คำสั่ง chat เพื่อบอกส่งค่าสถานะไปยังหลอด LED บน NETPIE Freeboard
}else if (stateStr == "SW2ON")
{
digitalWrite(12, HIGH);
microgear.chat("sw2", "ON"); //==== คำสั่ง chat เพื่อบอกส่งค่าสถานะไปยังหลอด LED บน NETPIE Freeboard
}
else if (stateStr == "SW2OFF")
{
digitalWrite(12, LOW);
microgear.chat("sw2", "OFF"); //==== คำสั่ง chat เพื่อบอกส่งค่าสถานะไปยังหลอด LED บน NETPIE Freeboard
}
//=========== ช่วงประมวลผลคำสั่ง =============
}
ลองทำทดสอบดู ครับ ..... ครั้งหน้าจะทำเป็น VDO มาให้ดูครับ
สมัครสมาชิก:
บทความ (Atom)
สอนเขียนโปรแกรม ในขอนแก่น และภาคอีสาน
สอนเขียนโปรแกรม ในขอนแก่น และภาคอีสาน (Programming , KhonKaen ) ประสบการณ์.มากกว่า 18 ปี ป.ตรี วิทยาการคอมพิวเตอร์ ม.กรุงเทพ ป.โท วิทยาการคอ...
-
เริ่มต้นใช้ ROS การติดตั้ง Ubuntu กับ ROS melodic สามารถดูได้ที่ http://wiki.ros.org/melodic/Installation/Ubuntu มาเรียนรู้ tutle...
-
วิธีการตั้งค่า Font และขนาด ใน LibreOffice ขั้นตอนง่ายๆ 1. Install Font จาก Sipa 13Fonts 2. เปิด LibreOffice ขึ้นมา แล้วเข้าเมนู ...
-
ก่อนอื่นต้องขอบอกก่อนว่า เคยลองเล่น nodemcu (ESP2866) เมื่อ ประมาณ 1 ปีมาแล้ว แต่ไม่ได้ทำอะไรต่อ วันนี้เป็นโอกาสดี ลองทบทวนความร...






































