tag:blogger.com,1999:blog-45253163581384387872024-03-05T16:08:22.666+07:00ROS.educationR&D of Robot Operating System for EducationROS.educationhttp://www.blogger.com/profile/16240720635722332861noreply@blogger.comBlogger19125tag:blogger.com,1999:blog-4525316358138438787.post-44630497056145449842018-12-19T06:15:00.000+07:002018-12-19T11:18:11.281+07:00การใช้งาน XV-11 Lidar บน ROS kineticXV-11 Lidar คือ Lidar ของหุ่นยนต์ดูดฝุ่น <a href="https://www.neatorobotics.com/robot-vacuum/xv/xv-11/">Neato รุ่น XV-11</a> นั่นเอง ซึ่งหุ่นยนต์รุ่นนี้ได้เปิดตัวมาแล้วในปี 2010 ณ ขณะนี้ทางบริษัทก็ได้เลิกผลิตหุ่นยนต์รุ่นนี้ไปแล้ว แต่ชิ้นส่วนบางอย่างของมัน โดยเฉพาะ Lidar ยังคงมีประโยชน์อย่างมากสำหรับนักสร้างหุ่นยนต์ ซึ่ง Lidar นี้จะเป็นเซนเซอร์สำคัญอันหนึ่งในการสร้างแผนที่และระบุตำแหน่งไปพร้อมกัน หรือเรียกว่า SLAM นั่นเอง (Simultaneous localization and mapping) ซึ่ง XV-11 Lidar นี้สามารถหาซื้อมือสองได้จาก eBay ในราคาไม่เกิน $90 และ Lidar รุ่นนี้สามารถใช้กับ ROS ได้เป็นอย่างดี เพราะมี driver รองรับ<br />
<br />
<h3>
การสร้างอุปกรณ์เชื่อมต่อ</h3>
XV-11 Lidar ที่ซื้อมาจาก eBay นั้นยังไม่พร้อมใช้งาน โดยเราจะต้องสร้างอุปกรณ์สำหรับเชื่อมต่อดังภาพด้านล่าง ซึ่งประกอบไปด้วย<br />
<br />
<b>1. USB to Serial module</b> - อุปกรณ์ชิ้นนี้มีบทบาทสำคัญ เพราะจะเป็นตัวแปลงสัญญาณข้อมูลจาก Lidar ส่งมายัง PC ผ่านพอร์ต USB โมดูลนี้โดยส่วนใหญ่จะให้ output power สองระดับ คือ 3.3V และ 5V ซึ่ง 3.3V จะเป็นไฟเลี้ยงสายสัญญาณ Serial นั่นเอง ส่วน 5V จะต้องถูกแปลงโดย Step down เป็นไฟ 3V เพื่อเลี้ยงมอเตอร์ของ Lidar โดยจะต้องเท่ากับ 3V แบบไม่ขาดไม่เกิน<br />
<br />
<b>2. Step down module</b> - โมดูลนี้จะแปลงไฟ 5V ให้เหลือ 3V เพื่อขับมอเตอร์ของ Lidar ควรเลือกโมดูลที่สามารถปรับค่าได้ละเอียด<br />
<br />
<b>3. JST 2.0 PH 2-Pin connector</b> สำหรับสาย power ของมอเตอร์ และ <b>JST 2.0 PH 4-Pin connector</b> สำหรับสายสัญญาณ Serial<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC-TBUHsObzc0vsb6KY9HcUOLeyNE2b2p6kmB8enMhkHx0aQUi3F1eWmGi0kiE_8xR8YWTumNBPVwxrgScQMhbNYluNsvZUEHYzUul0jD8orshi5-0Ni67oB2LAVxy0yVlfZnC8cP-L14/s1600/XV-11-lidar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC-TBUHsObzc0vsb6KY9HcUOLeyNE2b2p6kmB8enMhkHx0aQUi3F1eWmGi0kiE_8xR8YWTumNBPVwxrgScQMhbNYluNsvZUEHYzUul0jD8orshi5-0Ni67oB2LAVxy0yVlfZnC8cP-L14/s640/XV-11-lidar.png" width="640" /></a></div>
<br />
เราสามารถสร้างอุปกรณ์ตาม diagram ด้านบนได้ตามอิสระ เพื่อความสะดวกและคงทน เราควรบัดกรีอุปกรณ์บน prototype pcb หรือ แผ่นไข่ปลา และทำที่ยึดด้วยแผ่นอคริลิก ตัวอย่างอุปกรณ์ที่ทำสำเร็จแล้วแสดงตามภาพ<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW2gj0U5p0hUVC0pSJ5-AO-IvBXZDn73d2ITM_37E1YsZxszDCh4bXlNOFdvMYlGfGzcLc436pIK-JI2jh0pbWtemUqMulJOkKobdGK1jYBX1f4BuTysPpjMsDpAH7Tl0vK0c0UjPnJqw/s1600/20181218_120414.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1200" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW2gj0U5p0hUVC0pSJ5-AO-IvBXZDn73d2ITM_37E1YsZxszDCh4bXlNOFdvMYlGfGzcLc436pIK-JI2jh0pbWtemUqMulJOkKobdGK1jYBX1f4BuTysPpjMsDpAH7Tl0vK0c0UjPnJqw/s640/20181218_120414.jpg" width="480" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6Q5igrxA7IUysWr1pOYaOTyplXdPF2o4JR6baDMwnv030lHr2Zl_LFx6HHRmTmRFe8CxVV9ZSF5WCTZYicCS44MESE9mxme2dTa5gwr8mznwt0N260sbE4dIBXp2h09jmtr3mD8K_W4A/s1600/20181218_120514.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1200" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6Q5igrxA7IUysWr1pOYaOTyplXdPF2o4JR6baDMwnv030lHr2Zl_LFx6HHRmTmRFe8CxVV9ZSF5WCTZYicCS44MESE9mxme2dTa5gwr8mznwt0N260sbE4dIBXp2h09jmtr3mD8K_W4A/s640/20181218_120514.jpg" width="480" /></a></div>
<br />
<br />
ติดตั้ง
xv_11_laser_driver<br />
เมื่อสร้าง hardware เรียบร้อยแล้ว ขั้นตอนต่อไปก็การติดตั้ง ROS package สำหรับ XV-11 Lidar ผมใช้ ROS kinetic ใน <a href="http://www.ros.education/2017/07/ros-robot-operating-system-raspberry-pi.html">Ubuntu Mate</a> 16.04 บน Raspberry Pi 3 B ดังนั้น คำสั่งในการติดตั้ง driver XV-11 คือ<br />
<br />
$ sudo apt-get install ros-kinetic-xv-11-laser-driver<br />
<br />
<h3>
สร้าง udev rules (optional)</h3>
ขั้นตอนนี้ถือเป็น optional เพราะชื่อพอร์ตของ XV-11 จะขึ้นอยู่กับโมดูล USB Serial ที่เราใช้ โดยปกติจะเป็น /dev/ttyUSB0 หรือ /dev/ttyACM0 แต่เพื่อให้เกิดความสะดวกในการเรียกชื่อพอร์ตของ XV-11 เราจะสร้างไฟล์สำหรับ udev rule ดังนี้<br />
<br />
- ใช้คำสั่ง $ lsusb เพื่อดู idVender และ idProduct ตามภาพ<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCFPKoIpDVXT_qvST2cnYqtPEmU6Wxa3_d8ampCA2S8NaLhrFz0RK06tp0OMxXeaJUk9_O4qBp-n5sTm87DA008LHzv5LFgUkX_zOMEYv6yUw2kmrSt7Hq3WKej4Km-tF1HFQIv985LwI/s1600/Screenshot+at+2018-12-18+11-44-10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="462" data-original-width="737" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCFPKoIpDVXT_qvST2cnYqtPEmU6Wxa3_d8ampCA2S8NaLhrFz0RK06tp0OMxXeaJUk9_O4qBp-n5sTm87DA008LHzv5LFgUkX_zOMEYv6yUw2kmrSt7Hq3WKej4Km-tF1HFQIv985LwI/s640/Screenshot+at+2018-12-18+11-44-10.png" width="640" /></a></div>
<br />
- จากนั้นใช้คำสั่ง text editor อย่างเช่น $ sudo pluma ใน Ubuntu Mate เพื่อสร้างไฟล์และบันทึกลงใน /etc/udev/rules.d/52-lidar.rules แล้วใส่เนื้อหาตามตัวอย่าง โดย idVender และ idProduct ของแต่ละคนอาจจะไม่เหมือนกัน<br />
<br />
SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SYMLINK+="lidar"<br />
<br />
- เมื่อ reboot เราจะพบว่ามีพอร์ต /dev/lidar เกิดขึ้น<br />
<br />
<h3>
สร้าง launch file</h3>
ในกรณีที่เรามี <a href="http://wiki.ros.org/catkin/Tutorials/create_a_workspace">ROS workspace </a>อยู่แล้ว ให้สร้าง launch file ขึ้นมาเพื่อความสะดวกในการสร้างโหนด XV-11 Lidar สมมุติว่าชื่อ test_laser.launch ดังตัวอย่าง<br />
<br />
<?xml version="1.0"?><br />
<br />
<launch><br />
<node pkg="xv_11_laser_driver" type="neato_laser_publisher" name="xv_11_laser_driver"><br />
<param name="port" value="/dev/lidar"/><br />
<param name="firmware_version" value="2"/><br />
<param name="frame_id" value="laser"/><br />
</node><br />
</launch><br />
<br />
<h3>
ทดสอบ XV-11 lidar</h3>
เมื่อผ่านขั้นตอนต่างๆ มากมายมาแล้ว คราวนี้เราทดสอบ XV-11 Lidar ของเรากัน<br />
<br />
- รันโหนดด้วยคำสั่ง<br />
<br />
$ roslaunch package_name test_laser.launch<br />
<br />
โดยที่ package_name ตามที่เราสร้าง<br />
<br />
- ดูค่า scan ด้วย rviz<br />
<br />
รันคำสั่ง rviz จากนั้น Add by topic เลือก /scan ดังภาพ<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLrZ3svu4FaCedGF-ME1154lO8K2kD48scw9oq2whm8NO9uOgEbWwSS25gfULWUiKXmAmi0caDmZ4lfvVpbaDVBwmjSoIFZa544minplRLfaCsDdkJR-CFdZqql4BzX5dHD2U5wErODao/s1600/Screenshot+at+2018-12-18+11-26-24.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="629" data-original-width="502" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLrZ3svu4FaCedGF-ME1154lO8K2kD48scw9oq2whm8NO9uOgEbWwSS25gfULWUiKXmAmi0caDmZ4lfvVpbaDVBwmjSoIFZa544minplRLfaCsDdkJR-CFdZqql4BzX5dHD2U5wErODao/s640/Screenshot+at+2018-12-18+11-26-24.png" width="510" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
แก้ไขตรง Fixed Frame เป็น /laser เราก็จะเห็นข้อมูลที่ XV-11 Lidar สแกนได้ ดังภาพ<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQHaP35Fscek_r_fpOYIA1hhVV409xUz6xINczhfQ8zZ7puSpcKU9T0v45puyGjjxMBlKDuuzeknFmQQDY5YfAErCCIWGXOr06uw4QO-CrfHeGUslYcmgfm9qZJVu7LYPteK1OJf5PLdA/s1600/Screenshot+at+2018-12-18+11-25-22.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="852" data-original-width="1202" height="452" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQHaP35Fscek_r_fpOYIA1hhVV409xUz6xINczhfQ8zZ7puSpcKU9T0v45puyGjjxMBlKDuuzeknFmQQDY5YfAErCCIWGXOr06uw4QO-CrfHeGUslYcmgfm9qZJVu7LYPteK1OJf5PLdA/s640/Screenshot+at+2018-12-18+11-25-22.png" width="640" /></a></div>
<br />
<br />
<b>เอกสารอ้างอิง</b><br />
- <a href="http://wiki.ros.org/xv_11_laser_driver/Tutorials/Running%20the%20XV-11%20Node">http://wiki.ros.org/xv_11_laser_driver/Tutorials/Running%20the%20XV-11%20Node</a><br />
- <a href="http://meetjanez.splet.arnes.si/2015/08/22/neato-xv-11-to-ros-slam">http://meetjanez.splet.arnes.si/2015/08/22/neato-xv-11-to-ros-slam</a>ROS.educationhttp://www.blogger.com/profile/16240720635722332861noreply@blogger.com0tag:blogger.com,1999:blog-4525316358138438787.post-75356376119247789442018-11-10T07:04:00.004+07:002019-02-26T08:52:46.854+07:00 Ubuntu 16.04 และ ROS Kinetic บน MECOOL VS-RK3399 <div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBacRv98kD9r5NO9_0QToACIJ1ZQTnLlVMk89e1gR6TY1hd_jwkiJ-htKCNAF1-yGafYj0ryGRQtUlWURGGNAzXvchxjglFBaGusQjceprGcjDHAx30fKU1oSyRLCAHIi-37XUrxyLvRg/s1600/20181107_180030.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1600" data-original-width="1200" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBacRv98kD9r5NO9_0QToACIJ1ZQTnLlVMk89e1gR6TY1hd_jwkiJ-htKCNAF1-yGafYj0ryGRQtUlWURGGNAzXvchxjglFBaGusQjceprGcjDHAx30fKU1oSyRLCAHIi-37XUrxyLvRg/s320/20181107_180030.jpg" width="240" /></a></div>
<br />
MECOOL VS-RK3399 เป็นบอร์ด rockchip ราคาประหยัดที่หาซื้อได้จาก <a href="https://www.aliexpress.com/wholesale?catId=0&initiative_id=SB_20181109142714&SearchText=Mecool+vs-rk3399">AliExpress</a> ในราคาต่ำกว่า $100 หรือ 3,000 บาท (ณ ตอนที่ผมซื้อ) ในชุดมีอุปกรณ์ครบตามภาพด้านล่าง ประกอบด้วย เคสอคริลิก อะแดปเตอร์ 12V เสาอากาศ รีโมท ได้ทุกอย่างครบชุดในราคานี้ถือว่าคุ้มมาก<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis3pe3K8voEV8loOjb7lKKjj1o6TQpO0qwGZe3Z-JtD5IZNxWSA6hyphenhyphenk4apsCNTv5wejjp3KJxGPtPaJ5hjYLPX50AJFGRiXClolNHYCl6vDzLxinynSQV9VFh9JHsT_yd8e40o0-p_nnM/s1600/HTB11G9ExxSYBuNjSsphq6zGvVXaX.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1052" data-original-width="1000" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis3pe3K8voEV8loOjb7lKKjj1o6TQpO0qwGZe3Z-JtD5IZNxWSA6hyphenhyphenk4apsCNTv5wejjp3KJxGPtPaJ5hjYLPX50AJFGRiXClolNHYCl6vDzLxinynSQV9VFh9JHsT_yd8e40o0-p_nnM/s640/HTB11G9ExxSYBuNjSsphq6zGvVXaX.jpg" width="608" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
สเปคของบอร์ด MECOOL VS-RK3399 ถือว่าไม่น้อยหน้าแบรนด์อื่นในรุ่นเดียวกัน รายละเอียดตามภาพ ซึ่งเหมาะที่จะมาใช้กับ ROS และงานด้าน machine vision กับ AI<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggVggbNRadXzevF4znDsJVuRX4x6NnOr_03Gkokjw_6buzOurzdIz0yiXEjtv24pCwV3dzRarlVaREgHguMj7F24GFn7W3mAUp__De1-8fSA13lg8WtSs7S2mGIHTwbqohVtEpBvm-dtk/s1600/HTB1hy5ZxrGYBuNjy0Foq6AiBFXaW.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="565" data-original-width="800" height="452" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggVggbNRadXzevF4znDsJVuRX4x6NnOr_03Gkokjw_6buzOurzdIz0yiXEjtv24pCwV3dzRarlVaREgHguMj7F24GFn7W3mAUp__De1-8fSA13lg8WtSs7S2mGIHTwbqohVtEpBvm-dtk/s640/HTB1hy5ZxrGYBuNjy0Foq6AiBFXaW.jpg" width="640" /></a></div>
<br />
ในส่วนของซอฟต์แวร์สำหรับบอร์ดนี้ก็ถือว่าไม่ลำบากนัก บอร์ดมาพร้อมกับ Android สำหรับ Smart TV สามารถรีวิวได้จาก CNX-Software (<a href="https://www.cnx-software.com/2017/08/18/videostrong-vs-rd-rk3399-development-board-review-part-1-unboxing-kit-assembly-sdk-and-documentation/">Part 1</a> และ <a href="https://www.cnx-software.com/2017/09/25/checking-out-debian-and-linux-sdk-for-videostrong-vs-rd-rk3399-board/">Part 2</a>)<br />
<br />
แต่เป้าหมายสำหรับผม คือ การติดตั้ง ROS บนบอร์ดนี้ และพบว่ามันสามารถทำงานได้ดี ผมขอสรุปขั้นตอนดังนี้<br />
<br />
<h3 style="text-align: center;">
การแฟลช Ubuntu 16.04 </h3>
1. เราสามารถเข้าไปโหลด Ubuntu 16.04 image จากได้ <a href="https://mega.nz/#F!EHBySBhY!QDmwRDvYFfs5lR6QYuXoOQ">MEGA ของ Videostrong</a> ตามภาพ<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJrG4kckoaL2_f7sb7F8ajLuYGLNAcXe4fjN2eV6q3pzCScjm_f4eEaZkO9O06HkBYRUAfSdas8KS_1zcWOxJdLzOZ3bE41UmNy_yIVjHBytufkiGxF_c8uDaW_gXOXBqzGNnFYXif3g0/s1600/Screenshot_2018-11-09_22-53-12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="335" data-original-width="867" height="246" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJrG4kckoaL2_f7sb7F8ajLuYGLNAcXe4fjN2eV6q3pzCScjm_f4eEaZkO9O06HkBYRUAfSdas8KS_1zcWOxJdLzOZ3bE41UmNy_yIVjHBytufkiGxF_c8uDaW_gXOXBqzGNnFYXif3g0/s640/Screenshot_2018-11-09_22-53-12.png" width="640" /></a></div>
<br />
2. จากนั้นผมก็ทำตามขั้นการแฟลช Debian image จาก <a href="https://www.cnx-software.com/2017/09/25/checking-out-debian-and-linux-sdk-for-videostrong-vs-rd-rk3399-board/">CNX-Software</a> แต่แค่เปลี่ยนมาเป็น Ubuntu เท่านั้น ก่อนอื่นเราต้องโหลด <a href="https://drive.google.com/file/d/0B7HO8lbGgAqAendKNTZMQlBXS2c/view">upgrade_tool</a> ก่อน จากนั้นก็แตกไฟล์ทั้ง upgrade_tool และ Ubuntu image ไปไว้ในโฟล์เดอร์เดียวกัน<br />
<br />
3. เปิดใช้งานบอร์ดโดยการเสียบกับอแดปเตอร์ 12V ที่ได้มาในชุด ต่อจอ HDMI รวมทั้งเมาส์และคีย์บอร์ด จากนั้นต่อสาย USB type C to USB 3.0 ที่มากับชุดอยู่แล้วเข้ากับบอร์ด และ PC ของเรา จากนั้นกดปุ่ม recovery ค้างไว้ แล้วตามด้วยปุ่ม reset นับในใจ 1 2 3 แล้วปล่อยทุกปุ่ม บอร์ดก็จะเข้าสู่โหมดการแฟลช<br />
<br />
4. ตรวจสอบว่า PC ของเราพบบอร์ดหรือยัง ด้วยคำสั่ง sudo ./upgrade_tool ซึ่งเราจะพบข้อความว่าพบบอร์ดแล้ว จากนั้นแฟลช Ubuntu ด้วยคำสั่ง upgrade_tool uf VS-RK3399-UbuntuOS20180306.img<br />
<br />
<h3 style="text-align: center;">
การใช้งาน Ubuntu 16.04 และแก้ปัญหาเบื้องต้น</h3>
หลังจากแฟลชเรียบร้อยบอร์ดก็จะบูทเข้า Ubuntu 16.04 ดังภาพ เมื่อบูทมาเข้ามาก็อย่าตกใจว่าทำไมมีแต่หน้าจอโล่งๆ มันเป็นธีมของเขา น่าจะเป็น <a href="https://www.xfce.org/">Xfce4 desktop</a> ส่วนกล่องข้อความก็แค่แจ้งข้อผิดพลาดเกี่ยวกับ Bluetooth ซึ่งเรายังไม่ได้เปิดใช้งาน<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXSMosc_cYjFpS6IVugOhzWOMkYq3EQgDJ6qc5f27fo253dpes87oZj_2MtXpPKx5NGo34SCUGweGpEMX9xMRZzjbZieV3dJ5K6maocGDUajstJMH6ceAYbvvn0hUBMnMnFUC_e_rlxxE/s1600/Screenshot_2018-11-08_23-46-20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="873" data-original-width="1562" height="356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXSMosc_cYjFpS6IVugOhzWOMkYq3EQgDJ6qc5f27fo253dpes87oZj_2MtXpPKx5NGo34SCUGweGpEMX9xMRZzjbZieV3dJ5K6maocGDUajstJMH6ceAYbvvn0hUBMnMnFUC_e_rlxxE/s640/Screenshot_2018-11-08_23-46-20.png" width="640" /></a></div>
<br />
วิธีการกำจัดกล่องข้อความตามภาพดา้นบน คือ 2 คำสั่งนี้<br />
$ sudo chmod 4754 /usr/lib/dbus-1.0/dbus-daemon-launch-helper<br />
$ sudo chown root:messagebus /usr/lib/dbus-1.0/dbus-daemon-launch-helper<br />
<br />
เมนูการใช้งานจะซ่อนอยู่ในปุ่มเมาส์ขวา ลองคลิ๊กดูก็จะพบภาพนี้<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvrYCfsjURXEaGgLVm5U81pm-vMavE0DAz2sLAl4Do8L8q3pXOfBwrv6FyLBtslVW8o8mb6hyphenhyphenfGpuKpUgfPFisJqadQbgr1vzAxkea3s-aNFNKsu4kAYz5ujZpAnfrntSgFBORA4Dlqxw/s1600/20181109_064739.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1200" data-original-width="1600" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvrYCfsjURXEaGgLVm5U81pm-vMavE0DAz2sLAl4Do8L8q3pXOfBwrv6FyLBtslVW8o8mb6hyphenhyphenfGpuKpUgfPFisJqadQbgr1vzAxkea3s-aNFNKsu4kAYz5ujZpAnfrntSgFBORA4Dlqxw/s640/20181109_064739.jpg" width="640" /></a></div>
<br />
ผมเชื่อมต่อ WiFi โดยการเข้าไปที่ Application->Settings->Network Connections ซึ่งมันไม่มี AP list เหมือนอย่างใน Ubuntu ปกติ เราต้อง Add แล้วเลือก WiFi และใส่ข้อมูลเอง ในแทบ WiFi ใส่ SSID เป็นชื่อ AP ของเรา ส่วน Device เลือกเป็น wlan0 ต่อมาแทบ WiFi Security เลือก WPA & WPA2 Personal และใส่ password สุดท้ายกดปุ่ม Save บอร์ดก็จะเข้า WiFi ทันที เมื่อเข้า WiFi ก็อย่าลืม sudo apt update และ sudo apt upgrade เพื่ออัพเดท Ubuntu ล่าสุดด้วย<br />
<br />
ตรวจสอบทรัพยากรของเครื่องด้วย htop<br />
$ sudo apt install htop<br />
$ htop<br />
<br />
เราจะพบว่าบอร์ดมี CPU จำนวน 6 คอร์ และมี RAM 4 GB ตรงตามสเปค ในรูปด้านล่างนี้ ว้าว!!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYfUG1vCkTdVX1tx721bseGsM0tkZqns-tZvfwyCWPNXvSweSUJ5iRFeWARRv2D47Cn83zGXlaOnJtIfJlFyM5i4R7N8d3D61wh-_A0aUUf6v4dPSfait_cz4zTXfP7P6iNbmcLJpgyjw/s1600/Screenshot_2018-11-11_22-24-39.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="391" data-original-width="583" height="428" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYfUG1vCkTdVX1tx721bseGsM0tkZqns-tZvfwyCWPNXvSweSUJ5iRFeWARRv2D47Cn83zGXlaOnJtIfJlFyM5i4R7N8d3D61wh-_A0aUUf6v4dPSfait_cz4zTXfP7P6iNbmcLJpgyjw/s640/Screenshot_2018-11-11_22-24-39.png" width="640" /></a></div>
<br />
default user ของบอร์ดนี้ คือ videostrong โดยที่บอร์ดนี้ได้ตั้งค่า auto login ไว้ ซึ่งไม่ปลอดภัย อันดับแรกสุดเราต้องสร้าง root password ก่อน แล้วตามด้วยสร้าง sudo user ใหม่ขึ้นมาอีกอัน ด้วยคำสั่ง<br />
$ su passwd<br />
$ sudo adduser <username><br />
$ sudo usermod -aG sudo <username><br />
<br />
โดยที่ <username> คือชื่อที่เรากำหนด ในกรณีของผมคือ ubuntu จากนั้นแก้ไข auto login ดังนี้<br />
$ sudo geany /etc/lightdm/lightdm.conf.d/12-autologin.conf<br />
<div>
<br /></div>
<div>
แล้วใส่เนื้อหาดังนี้
<br />
<pre>[SeatDefaults]
autologin-user=
#user-session=xfce4-session
allow-guest=false
</pre>
</div>
<div>
<br />
เราควรแก้ไข /etc/sudoers โดยให้ลบ NOPASSWD: ออกไปด้วย ถ้าพบข้อความนี้ sudo: /etc/sudoers.d is world writable ให้พิมพ์คำสั่ง<br />
$ pkexec chmod 555 /etc/sudoers.d<br />
$ pkexec chmod 555 /etc/sudoers.d/README</div>
<br />
ควรแก้ไขชื่อเครื่องในไฟล์ /etc/hostname และ /etc/hosts ด้วย text editor อย่าง Geany ($sudo apt install geany) จาก videostrong เป็นชื่อที่เราจำได้ง่าย ของผมคือ turtlebot นั่นเอง<br />
<br />
ผมพบความผิดปกติอย่างหนึ่งคืออยู่ๆก็ disk full จากการตรวจสอบด้วยคำสั่ง sudo du -sh * เริ่มจาก / พบว่าตัวปัญหา คือ ไฟล์ /var/log/cups/error_log ที่เพิ่มขนาดอย่างไม่ทราบสาเหตุ วิธีแก้คือ<br />
$ sudo systemctl stop cups<br />
$ sudo systemctl stop cups-browsed<br />
$ sudo systemctl disable cups<br />
$ sudo systemctl disable cups-browsed<br />
$ sudo systemctl disable cups.socket cups.path cups.service<br />
$ sudo systemctl stop cups.service<br />
$ sudo rm /var/log/cups/error_log<br />
<div>
<br />
การแก้ปัญหา panel ไม่ปรากฏ ก่อนอื่นเราต้องเลือกจอภาพให้ถูกก่อนจาก Settings->Display ในกรณีของผมคือจอที่ 2<br />
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKHgSJZT2DvON0k2HGlOysPx_kRwN-brxEQvy7LeI7yXrUsKdRcFzi80YELnC62PC_vnAFX7vGC8-zSbchaQLCDbAkaxJufuFrDc2pTD_jrowp5sufLYmKsdOnc428WZZDJxz3c0VnP1s/s1600/Screenshot_2018-11-12_12-58-17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="444" data-original-width="623" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKHgSJZT2DvON0k2HGlOysPx_kRwN-brxEQvy7LeI7yXrUsKdRcFzi80YELnC62PC_vnAFX7vGC8-zSbchaQLCDbAkaxJufuFrDc2pTD_jrowp5sufLYmKsdOnc428WZZDJxz3c0VnP1s/s640/Screenshot_2018-11-12_12-58-17.png" width="640" /></a></div>
<br />
จากนั้นก็ไปที่ Settings->Panel ตรงแทบ Dispaly ให้เลือก Output ให้ตรงกับจอภาพของเรา ของผมคือ Monitor 2<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA8TRhyO8jsjtV2EEoEfbd_IDlvBGTFv8Xy5Dyb4wsM9PmkAHbInekJq0sJy21ExSeCwuvn8fVdZO7ZDaGUFlI_hhN096rvGgnDNfsnU_VA9d4m7rvnWdXcvuoTfqM1jajTGXFmkqZ380/s1600/Screenshot_2018-11-12_12-57-03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="589" data-original-width="379" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA8TRhyO8jsjtV2EEoEfbd_IDlvBGTFv8Xy5Dyb4wsM9PmkAHbInekJq0sJy21ExSeCwuvn8fVdZO7ZDaGUFlI_hhN096rvGgnDNfsnU_VA9d4m7rvnWdXcvuoTfqM1jajTGXFmkqZ380/s640/Screenshot_2018-11-12_12-57-03.png" width="410" /></a></div>
<br />
ในที่สุด Panel ก็จะแสดงขึ้นมาที่ด้านบนของ Desktop ทำให้ใช้งานสะดวกขึ้น ตามภาพ<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_og1MEuU68uwYM8NzPVK63F4tbdeRAh3VbcFTWRhzef0Tj43A-JHl7zFDDe6JGwK1SJGjJOivQTt5VndrZ6KbFeUoW07KEsG09Cd4PCjqluAjIF8AV2QvCTM4qZ97FnBJ3La6sQS1ZJE/s1600/Screenshot_2018-11-12_13-08-16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="893" data-original-width="1598" height="356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_og1MEuU68uwYM8NzPVK63F4tbdeRAh3VbcFTWRhzef0Tj43A-JHl7zFDDe6JGwK1SJGjJOivQTt5VndrZ6KbFeUoW07KEsG09Cd4PCjqluAjIF8AV2QvCTM4qZ97FnBJ3La6sQS1ZJE/s640/Screenshot_2018-11-12_13-08-16.png" width="640" /></a></div>
<br />
<h3 style="text-align: center;">
การติดตั้ง ROS</h3>
<a href="http://wiki.ros.org/kinetic/Installation/Ubuntu">การติดตั้ง ROS Kinetic</a> บนบอร์ดนี้ก็ไม่ต่างกับติดตั้ง ROS บน Ubuntu ทั่วไป ผมขอสรุปคำสั่งดังนี้<br />
<br />
$ sudo c_rehash /etc/ssl/certs<br />
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'<br />
$ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116<br />
$ sudo apt-get update<br />
$ sudo apt-get install ros-kinetic-desktop-full<br />
$ sudo rosdep init<br />
$ rosdep update<br />
$ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc<br />
$ source ~/.bashrc<br />
$ sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential<br />
<br />
สุดท้ายก็รันคำสั่ง roscore จะพบภาพด้านล่างนี้ มันแสดงให้เห็นว่าบอร์ดนี้ก็สามารถติดตั้ง ROS ได้ ส่วนการทดสอบขั้นต่อไปก็ คือ การนำไปงานใช้กับหุ่นยนต์จริง อย่างเช่น TurtleBot เป็นต้น<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY0WNz5hKd1MGBDnjVUqBx4Gmc-6eftn1mlk7Rt20aSE9SX3nJ7ARkJEM1HxfEVeqgUe6DYdJFjIJJzs4dc7dy7l0tw1_gQMegTMOgrw4_zpmF0gECzwWKyjFuyaWUdZ1m_4KYSfzuzKw/s1600/Screenshot_2018-11-10_21-21-47.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="509" data-original-width="823" height="394" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY0WNz5hKd1MGBDnjVUqBx4Gmc-6eftn1mlk7Rt20aSE9SX3nJ7ARkJEM1HxfEVeqgUe6DYdJFjIJJzs4dc7dy7l0tw1_gQMegTMOgrw4_zpmF0gECzwWKyjFuyaWUdZ1m_4KYSfzuzKw/s640/Screenshot_2018-11-10_21-21-47.png" width="640" /></a></div>
<br />ROS.educationhttp://www.blogger.com/profile/16240720635722332861noreply@blogger.com0tag:blogger.com,1999:blog-4525316358138438787.post-31295763400054534182018-07-14T16:11:00.001+07:002018-07-21T03:23:35.636+07:00การติดตั้ง Arduino_STM32 และ ROS สำหรับ Maple Mini (STM32F103CBT6)<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC7B_5NYMWw_Gc8Fag81I2L3JUwBemTBLeTWj_1Ar-IzFOhUzyNIOa9oDqQP4CCV9YB3UdNCAdb2PjxSd2pnCCQXJ3rXF4TamuB9mUPQin0mPWZGPPO89GYGwmaEfGQ6iHXbjDItSRU8Nv/s1600/Baite_Maple_Mini_Top_No_Logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="572" data-original-width="1492" height="122" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC7B_5NYMWw_Gc8Fag81I2L3JUwBemTBLeTWj_1Ar-IzFOhUzyNIOa9oDqQP4CCV9YB3UdNCAdb2PjxSd2pnCCQXJ3rXF4TamuB9mUPQin0mPWZGPPO89GYGwmaEfGQ6iHXbjDItSRU8Nv/s320/Baite_Maple_Mini_Top_No_Logo.png" width="320" /></a></div>
<div style="text-align: center;">
ภาพจาก <a href="http://wiki.stm32duino.com/index.php?title=Maple_Mini">stm32duino.com</a></div>
<br />
<a href="http://wiki.stm32duino.com/index.php?title=Maple_Mini">Maple Mini </a>เป็นบอร์ดไมโครคอนโทรลเลอร์ 32 บิทราคาถูกที่หาซื้อได้ทั่วไปจาก <a href="https://www.aliexpress.com/wholesale?catId=0&initiative_id=AS_20180713234015&SearchText=maple+mini">AliExpress</a> ในราคา ~$3.3 หรือ ~120 บาท ซึ่งราคาถูกมากเทียบกับประสิทธิภาพ คุณสมบัติสำคัญของบอร์ดนี้ คือ ใช้ชิป <a href="https://www.st.com/en/microcontrollers/stm32f103cb.html">STM32F103CBT6</a> มี Flash 128 KB RAM 20 KB ความเร็ว 72 MHz ซึ่งเพียงพอต่อการเขียนเฟิร์มแวร์สำหรับ ROS บอร์ดนี้ทำงานที่ 3.3V แต่ก็มีบาง pin ที่รับอิพุท 5V ได้ด้วย ซึ่งสามารถทำงานได้กับเซนเซอร์ 5V บางตัว เช่น Hall sensor encoder หรือ Ultrasonic sensor <a href="https://www.sparkfun.com/products/13959">HC-SR04</a> บอร์ดอัพโหลดโปรแกรมผ่าน mini USB ได้โดยตรงไม่ต้องใช้ ST-Link ดังนั้นบอร์ดนี้จึงเหมาะที่จะนำมาเป็น base controller สำหรับหุ่นยนต์ ROS<br />
<h3 style="text-align: center;">
<b><u><br /></u></b></h3>
<h3 style="text-align: center;">
<b><u>ติดตั้ง Arduino_STM32</u></b></h3>
<a href="https://github.com/rogerclarkmelbourne/Arduino_STM32">Arduino_STM32</a> เป็นซอฟต์แวร์ที่ทำให้เราสามารถเขียนโปรแกรมสำหรับบอร์ด STM32F103 ด้วย <a href="https://www.arduino.cc/en/Main/Software">Arduino IDE</a> ผมได้สรุป<a href="https://github.com/rogerclarkmelbourne/Arduino_STM32/wiki/Installation">วิธีการติดตั้งจากเวบไซต์ของ Arduino_STM32</a> ดังนี้ โดยผมใช้ระบบปฏิบัติการ Ubuntu 16.04 LTS<br />
<br />
1. ติดตั้ง Arduino IDE สำหรับ Linux <a href="https://www.arduino.cc/en/Guide/Linux">ตามคำสั่งนี้</a><br />
<br />
2. เปิด Arduino IDE ขึ้นมา ไปที่ Tools->Boards manager เลือกติดตั้ง Arduino SAM boards (Cortex-M3) ขั้นตอนนี้ต้องทำเพราะมีการติดตั้ง arm-none-eabi-g++ toolchain ด้วย<br />
<br />
3. ดาวน์โหลด <a href="https://github.com/rogerclarkmelbourne/Arduino_STM32/archive/master.zip">Arduino_STM32</a> แล้วแตกไฟล์ในไปไว้ในโฟลเดอร์ hardware ของ Arduino IDE สุดท้ายเราจะได้ ~/Arduino/hardware/Arduino_STM32<br />
<br />
4. รัน ~/Arduino/hardware/Arduino_STM32/tools/linux/install.sh เพื่อติดตั้ง udev rules<br />
<br />
5. ปิดและเปิด Arduino IDE ขึ้นมาใหม่อีกครั้ง เลือก Tools->Board เราก็จะพบว่ามี Maple Mini รวมทั้งบอร์ด STM32 อื่นๆ ที่สนับสนุนให้เลือก ตามภาพ<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1OR4xR7HZKjdxaneEkH2nLSxtEx_PqvkzEXuLdTg1WUCCZrHRcZKnQcbbCPcmAmYXaBqmaJEHz9MtQ7wVx-0zxgWZRo19PbbwckHyPyyrPxifgz7M3kLQFEkzaGEi1yH_cbx3PRDpPAk/s1600/Screenshot+from+2018-07-14+16-01-05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="911" data-original-width="1600" height="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1OR4xR7HZKjdxaneEkH2nLSxtEx_PqvkzEXuLdTg1WUCCZrHRcZKnQcbbCPcmAmYXaBqmaJEHz9MtQ7wVx-0zxgWZRo19PbbwckHyPyyrPxifgz7M3kLQFEkzaGEi1yH_cbx3PRDpPAk/s320/Screenshot+from+2018-07-14+16-01-05.png" width="320" /></a></div>
<br />
ถึงตอนนี้ก็เป็นอันว่าเราสามารถเขียนโปรแกรมในสไตล์ Arduino สำหรับบอร์ด Maple Mini ได้แล้ว ซึ่งการเขียนโปรแกรมไม่แตกต่างจากบอร์ด UNO เลย เพียงแต่ต้องศึกษา pinout จากเวบไชต์ <a href="http://wiki.stm32duino.com/index.php?title=Maple_Mini">stm32duino.com</a> ตามภาพ<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://wiki.stm32duino.com/images/thumb/c/c4/Maple_Mini_Pinout.svg/600px-Maple_Mini_Pinout.svg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="599" data-original-width="600" height="319" src="https://wiki.stm32duino.com/images/thumb/c/c4/Maple_Mini_Pinout.svg/600px-Maple_Mini_Pinout.svg.png" width="320" /></a> </div>
<div class="separator" style="clear: both; text-align: center;">
ภาพจาก <a href="http://wiki.stm32duino.com/index.php?title=Maple_Mini" style="text-align: center;">stm32duino.com</a></div>
<h3 style="text-align: center;">
<b><u><br /></u></b></h3>
<h3 style="text-align: center;">
<b><u>ติดตั้ง ros_lib สำหรับ Arduino</u></b></h3>
<div>
<a href="http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup">ros_lib</a> เป็น library ของ ROS สำหรับ Arduino ซึ่งทำให้เราสร้าง node และส่งข้อมูลผ่าน Serial port จากบอร์ด Microcontroller มายัง PC หรือ Raspberry Pi ได้ ซึ่งวิธีการติดตั้ง ros_lib สำหรับ Ubuntu 16.04 LTS และ ROS kinectic มีดังนี้<br />
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
1. ติดตั้ง <a href="http://wiki.ros.org/rosserial">rosserial</a></div>
<pre class="prettyprint lang-bsh">sudo apt-get install ros-kinetic-rosserial-arduino
sudo apt-get install ros-kinetic-rosserial
</pre>
<br />
2. ติดตั้ง ros_lib
<br />
<pre class="prettyprint lang-bsh">cd ~/Arduino/libraries
rm -rf ros_lib #ลบไฟล์เก่า (ถ้ามี)
rosrun rosserial_arduino make_libraries.py .
</pre>
<br />
3. ปิดแล้วเปิด Arduino IDE ขึ้นมาใหม่ ถ้าการติดตั้งไม่ผิดพลาดเราจะเห็น ros_lib ใน File->Examples ดังภาพ
<br />
<div class="separator" style="clear: both;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR-8NTsit0aJiymm1ALU22WbF_wYwUIP2z35XL7Giq3IKKJr3DKLcYJf0-9x4OX2mNvI23oHXtUcSQ3dPsxugNbYqJput-xg5A7Uwwr647_PFgNQSwcXSZETPhko0BkaxfkbCbXvHWZbE/s1600/Screenshot+from+2018-07-14+16-02-27.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="911" data-original-width="1600" height="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR-8NTsit0aJiymm1ALU22WbF_wYwUIP2z35XL7Giq3IKKJr3DKLcYJf0-9x4OX2mNvI23oHXtUcSQ3dPsxugNbYqJput-xg5A7Uwwr647_PFgNQSwcXSZETPhko0BkaxfkbCbXvHWZbE/s320/Screenshot+from+2018-07-14+16-02-27.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both;">
</div>
<span style="text-align: center;"></span>
หลังจากติดตั้ง ros_lib สำหรับ Maple Mini แล้ว ต่อจากนี้ไปก็ศึกษาการเขียนโปรแกรมตามเวบนี้ <a href="http://wiki.ros.org/rosserial_arduino/Tutorials">rosserial_arduino Tutorials</a>ROS.educationhttp://www.blogger.com/profile/16240720635722332861noreply@blogger.com0tag:blogger.com,1999:blog-4525316358138438787.post-9107853675708623902018-07-14T05:52:00.000+07:002018-07-14T05:52:55.635+07:00ROS networking แบบไม่ต้องจำ IP address ใน<a href="http://wiki.ros.org/ROS/NetworkSetup">การตั้งค่า network เพื่อควบคุมหุ่นยนต์ ROS แบบ remote</a> ผ่าน WiFi ผมประสบปัญหาอย่างหนึ่ง คือ บางครั้ง router มันเปลี่ยนค่า IP address ของเครื่องคอมพิวเตอร์ หรือ บางทีก็จำ IP address ไม่ได้บ้าง ใน<a href="http://www.artificialhumancompanions.com/networking-deep-learning-robot/">เวบนี้</a>มีวิธีแก้ปัญหา คือ แทนที่จะจำ IP address เรามาจำชื่อ url กันดีกว่า เช่น ssh ubuntu@myrobot.local แทนที่จะเป็น ssh ubuntu@192.168.0.1<br />
<br />
1. ตั้งชื่อคอมพิวเตอร์ทั้งเครื่อง local และ remote โดยการแก้ไขไฟล์ /etc/hostname และ /etc/hosts<br />
<br />
2. ติดตั้ง zeroconf ทั้งในเครื่องคอมพิวเตอร์ local และ remote<br />
sudo apt-get install netatalk<br />
sudo apt-get install avahi-daemon<br />
sudo update-rc.d avahi-daemon defaults<br />
<br />
3. ทดสอบการเชื่อมต่อ<br />
ping local-pc.local<br />
ping myrobot.local<br />
<br />
4. ตั้งค่าในไฟล์ .bashrc<br />
<b><span style="color: red;"><u>ในเครื่อง local</u> </span></b>เพิ่ม<br />
export ROS_MASTER_URI=http://myrobot.local:11311<br />
export ROS_HOSTNAME=local-pc.local<br />
<br />
<u><span style="color: red;">ในเครื่อง remote ที่ติดไปกับหุ่นยนต์</span></u> เพิ่ม<br />
export ROS_MASTER_URI=http://localhost:11311<br />
export ROS_HOSTNAME=myrobot.local<br />
<br />
อย่าลืม source .bashrc หลังบันทึกไฟล์แล้ว<br />
<br />
5. ตอนนี้เราก็สามารถ ssh แบบไม่ต้องจำ IP address ได้เช่นกัน<br />
ssh username@myrobot.local<br />
<br />
ถ้าไม่อยากใส่ password ในการ ssh ทุกครั้ง <a href="http://www.ros.education/2018/07/ssh-login-password.html">อ่านบทความนี้</a>ROS.educationhttp://www.blogger.com/profile/16240720635722332861noreply@blogger.com0tag:blogger.com,1999:blog-4525316358138438787.post-87173744705245807762018-07-14T05:21:00.000+07:002018-07-14T05:52:38.394+07:00SSH login แบบไม่ต้องใส่ password ทุกครั้ง<a href="http://wiki.ros.org/ROS/NetworkSetup">การ login เพื่อไปรันโหนดของ ROS</a> ในเครื่อง remote ที่ติดไปกับตัวหุ่นยนต์ เช่น Raspberry Pi หรือ Mini PC หรือ Netbook ก็ตาม เราต้อง ssh กันบ่อยๆ ถ้าต้องใส่ password ทุกครั้งก็เสียเวลา ใน<a href="http://www.linuxproblem.org/art_9.html">เวบนี้</a>มีวิธีแก้ปัญหานี้ สมมุติว่าที่เครื่อง local คอมพิวเตอร์ของเราชื่อ A โดย username คือ a ส่วน remote คอมพิวเตอร์ที่ติดไปกับตัวหุ่นยนต์ชื่อ B โดย username คือ b<br />
<br />
1. สร้างคีย์ที่เครื่อง local<br />
a@A:~> ssh-keygen -t rsa<br />
<br />
2. คัดลอกคีย์ไปที่เครื่อง remote<br />
a@A:~> ssh b@B mkdir -p .ssh<br />
a@A:~> cat .ssh/id_rsa.pub | ssh b@B 'cat >> .ssh/authorized_keys'<br />
<br />
3. login เครื่อง remote ด้วยคำสั่ง<br />
a@A:~> ssh b@B<br />
<br />
ถ้าไม่ได้ผล อาจจะขึ้นอยู่กับเวอร์ชั่นของ SSH ด้วย ในบางระบบอาจจะต้องแก้ไข คือ<br />
<br />
<ul>
<li>เพิ่มคีย์ใน .ssh/authorized_keys2 แทน</li>
<li>เปลี่ยนโหมด .ssh เป็น 700</li>
<li>เปลื่ยนโหมด .ssh/authorized_keys2 เป็น 640</li>
</ul>
<br />
<br />ROS.educationhttp://www.blogger.com/profile/16240720635722332861noreply@blogger.com0tag:blogger.com,1999:blog-4525316358138438787.post-87555509888774788712018-06-21T04:17:00.000+07:002018-07-21T07:36:10.201+07:00ROS.education Kit (ไม่ขาย แต่ให้สร้างเอง)<table align="center">
<tbody>
<tr>
<td align="center"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdxPaTw2TcKti7m_-Dk-9e4ivK9QyYcE-JGR6FxprZYudDa74DcnFn-kguJXfyJRlXAurbYkvt7BNf9UMNib0oj-pgd7FUdlJ_6H9FE38VlgP-WKhSPqCyrfqm1MuEZFHXxghMNf11OYA/s1600/20180712_130550.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="958" data-original-width="718" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdxPaTw2TcKti7m_-Dk-9e4ivK9QyYcE-JGR6FxprZYudDa74DcnFn-kguJXfyJRlXAurbYkvt7BNf9UMNib0oj-pgd7FUdlJ_6H9FE38VlgP-WKhSPqCyrfqm1MuEZFHXxghMNf11OYA/s320/20180712_130550.jpg" width="239" /></a> <br />
<b>Updated platform</b>
</td>
<td align="center"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDoSNtnzCEDiOnL5Bw7yF3DFV3CdnTGUK4ujl3QZ0CyJkBwfiySzkclbk5JGKb-RAC1AsJPQY91ovClbZPfwB0KZZBr3i_OUm-8uTW6SL6Fi0HrvWqzFV49pLkZtBszSTaXOTPpADI9D4/s1600/35760322_465576253855628_8500772252051046400_n.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="960" data-original-width="714" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDoSNtnzCEDiOnL5Bw7yF3DFV3CdnTGUK4ujl3QZ0CyJkBwfiySzkclbk5JGKb-RAC1AsJPQY91ovClbZPfwB0KZZBr3i_OUm-8uTW6SL6Fi0HrvWqzFV49pLkZtBszSTaXOTPpADI9D4/s320/35760322_465576253855628_8500772252051046400_n.jpg" width="238" /></a> <br />
<b>Old platform</b>
</td>
</tr>
</tbody></table>
<div style="text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div style="text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
ROS.education Kit เป็นหุ่นยนต์ที่กำลังพัฒนาและทดสอบเพื่อเป็นชุดเรียนรู้การสร้างหุ่นยนต์ Autonomous Mobile Robot ด้วย <a href="http://www.ros.org/">ROS</a> สำหรับมือใหม่ โดยใช้ซอฟต์แวร์แบบเปิด คือ Linorobot (<a href="https://linorobot.org/">https://linorobot.org</a>) เพื่อให้ได้หุ่นยนต์ ROS ที่ราคาถูก (ต่ำกว่า 10,000 บาท) ผมเลือกใช้ hardware ที่แตกต่างไปจากการออกแบบของ Linorobot โดยส่วนใหญ่ซื้อจาก AliExpress ชุดเรียนรู้นี้จะไม่มีวางขาย เพราะถ้าขายจะมีการบวกค่าแรง ภาษี ค่าใช้จ่ายอื่นๆ สารพัด ทำให้ผิด concept ของหุ่นยนต์ ROS ที่มีราคาต่ำกว่า 10,000 บาท ดังนั้นทางออก คือ ซื้ออุปกรณ์มาสร้างเอง เรียนรู้เอง (พังเอง ซ่อมเอง ^^) ผมได้แสดงรายการอุปกรณ์พร้อมประมาณค่าใช้จ่าย ดังนี้<br />
<br />
<table style="width: 100%;">
<tbody>
<tr>
<td><b>รายอุปกรณ์</b></td>
<td><a href="https://www.aliexpress.com/wholesale?catId=0&initiative_id=&SearchText=YDLIDAR+X4"><b>ราคา</b><b> (USD)</b></a></td>
</tr>
<tr>
<td><a href="https://www.aliexpress.com/wholesale?catId=0&initiative_id=&SearchText=YDLIDAR+X4">YDLIDAR X4</a></td>
<td>99</td>
</tr>
<tr>
</tr>
<tr>
<td><a href="https://www.aliexpress.com/wholesale?catId=0&initiative_id=&SearchText=Orange+Pi+Win+Plus">Orange Pi Win Plus</a></td>
<td>41.4</td>
</tr>
<tr>
<td><a href="https://www.aliexpress.com/wholesale?catId=0&initiative_id=&SearchText=Maple+Mini">Maple Mini STM32F103CBT6</a> </td>
<td>3.3</td>
</tr>
<tr>
</tr>
<tr>
<td><a href="https://www.aliexpress.com/wholesale?catId=400103&initiative_id=AS_20180712125306&SearchText=monster+moto+shield+vnh2sp30">Monster Moto Shield VNH2SP30</a></td>
<td>5</td>
</tr>
<tr><td><strike>GM25-370 DC Motor 9V/150rpm with Hall Sensor Encoder $7 x 2</strike></td>
<td><strike>14</strike></td>
</tr>
<tr>
<td><strike>130mm Wheel+Bracket+Hex coupling+Caster ($7.5+$1+$1.5+$0.25) x 2</strike></td>
<td><strike>20.5</strike></td>
</tr>
<tr>
</tr>
<tr>
<td><a href="https://www.aliexpress.com/wholesale?catId=0&initiative_id=&SearchText=12v+107rpm">12V 107rpm 37mm DC Gear Motor with Encoder + Wheel set ($19.87) x 2</a> <span style="color: red;">***</span></td>
<td>39.7</td>
</tr>
<tr>
<td><a href="https://www.aliexpress.com/wholesale?catId=0&initiative_id=&SearchText=LG+HG2+">3S Li-ion 18650 LG HG2 3000mah </a>($15.6) + <a href="https://www.aliexpress.com/wholesale?catId=0&initiative_id=&SearchText=BMS+25A">BMS 25A</a> ($8.1) (แพคเอง)</td>
<td>23.7</td>
</tr>
<tr>
<td><a href="https://www.aliexpress.com/wholesale?catId=0&initiative_id=&SearchText=12.6V+2A+3S+charger">Adapter DC 12.6V 2A 3S Li-ion 18650 charger</a> </td>
<td>10</td>
</tr>
<tr><td><a href="https://www.aliexpress.com/wholesale?catId=0&initiative_id=SB_20180712125937&SearchText=xl4015">5V step down </a></td>
<td>1.8</td>
</tr>
<tr><td><a href="https://www.aliexpress.com/wholesale?catId=200216616&initiative_id=AS_20180712125938&SearchText=sd+card+16gb+classe+10">SD card 16Gb Class 10</a> </td>
<td>10</td>
</tr>
<tr><td><a href="https://www.aliexpress.com/wholesale?catId=0&initiative_id=&SearchText=MPU+9250+">MPU 9250 </a></td>
<td>2.6</td>
</tr>
<tr>
<td>Acrylic Chassis + Standoff + Nut&Screw + Wire</td>
<td>30</td>
</tr>
<tr>
<td><br /></td>
<td><br /></td>
</tr>
<tr><td><b><strike>รวม</strike></b></td>
<td><b><strike>261.3</strike></b></td>
</tr>
<tr><td><b>รวม</b></td>
<td><b>266.5</b></td>
</tr>
</tbody></table>
<br />
<span style="color: red;">*** </span>คุณภาพของมอเตอร์มีผลต่อความแม่นยำของ Odometry ซึ่งจะทำให้ระบบ navigation ของหุ่นยนต์ถูกต้องมากขึ้น หากต้องการความแม่นยำที่มากขึ้น ควรเลือกซื้อมอเตอร์ที่ noise ต่ำ และ ความละเอียดของ encoder สูง อย่างเช่น <a href="https://www.pololu.com/product/2827">DC Gear motor ของ Pololu </a><br />
* ราคาประมาณคร่าวๆ อาจเปลี่ยนแปลงตามเวลา ยังไม่รวมค่าแรงและอุปกรณ์ปลีกย่อยอื่นๆ<br />
** <b>Disclaimer</b>: <u>หุ่นยนต์ตัวนี้อยู่ในระหว่างทดลอง ไม่รับประกันผลสำเร็จใดๆ ทั้งสิ้น</u><br />
<br />
<br />
<ul>
<li><b>คู่มือการสร้าง [<a href="http://www.ros.education/p/kit.html">link</a>] </b></li>
<li><b>GitHub: <a href="https://github.com/ROS-education/linorobot">https://github.com/ROS-education/linorobot</a></b></li>
</ul>
<br />
<b><br /></b>
<b>สาธิตการทำงาน</b><br />
<b><br /></b>
<br />
<div style="text-align: center;">
การสร้างแผนที่ด้วย SLAM</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimGcwXoqWcT_gp4utnL5F4Md4S4nQ3D9kUQ6tD213SPrSR1lQsjZwRrcPCz_-Ou12bV4ynHDODCKM7cSKN7E-d9aSZmwnxp4XIZI5FcPuPPG99u9mwZFnO7nkOgfJZY_NCG2caoPu1_eg/s1600/20180712_123337.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="909" data-original-width="682" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimGcwXoqWcT_gp4utnL5F4Md4S4nQ3D9kUQ6tD213SPrSR1lQsjZwRrcPCz_-Ou12bV4ynHDODCKM7cSKN7E-d9aSZmwnxp4XIZI5FcPuPPG99u9mwZFnO7nkOgfJZY_NCG2caoPu1_eg/s320/20180712_123337.jpg" width="240" /></a></div>
<br />
<br />
<div style="text-align: center;">
Autonomous navigation</div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/tYf6mCY4kEI/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/tYf6mCY4kEI?feature=player_embedded" width="320"></iframe></div>
<br />
<br />
<b>ตามติดการอัพเดท</b><br />
Facebook: <a href="https://www.facebook.com/turtlebot.rider">https://www.facebook.com/turtlebot.rider</a><br />
Page: <a href="https://www.facebook.com/ROSeducat">https://www.facebook.com/ROSeducat</a><br />
Group: <a href="https://www.facebook.com/groups/thai.ros">https://www.facebook.com/groups/thai.ros</a><br />
<br />ROS.educationhttp://www.blogger.com/profile/16240720635722332861noreply@blogger.com1tag:blogger.com,1999:blog-4525316358138438787.post-60150554034887649012018-06-10T04:50:00.000+07:002018-07-14T15:26:08.789+07:00การแก้ปัญหา USB ไม่เจอ Maple Mini (STM32F103CBT6) ใน Arduino IDEบางครั้งโปรแกรมที่เราเขียนขึ้นอาจเกิดบั๊กบางอย่างที่ไปขัดต่อการเชื่อมต่อกับพอร์ต USB ของ <a href="http://wiki.stm32duino.com/index.php?title=Maple_Mini">Maple Mini (STM32F103CBT6)</a> กับคอมพิวเตอร์ วิธีแก้ปัญหา คือ การอัพโหลดโค๊ดที่ทำงานถูกต้องแล้ว เช่น Blink ใน <a href="https://www.arduino.cc/">Arduino IDE</a> ผ่าน USB to TTL ด้วย perpetual bootloader mode ของ Maple Mini ให้ต่อสายระหว่าง Maple Mini กับ USB to TTL ดังนี้<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC7B_5NYMWw_Gc8Fag81I2L3JUwBemTBLeTWj_1Ar-IzFOhUzyNIOa9oDqQP4CCV9YB3UdNCAdb2PjxSd2pnCCQXJ3rXF4TamuB9mUPQin0mPWZGPPO89GYGwmaEfGQ6iHXbjDItSRU8Nv/s1600/Baite_Maple_Mini_Top_No_Logo.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="572" data-original-width="1492" height="122" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC7B_5NYMWw_Gc8Fag81I2L3JUwBemTBLeTWj_1Ar-IzFOhUzyNIOa9oDqQP4CCV9YB3UdNCAdb2PjxSd2pnCCQXJ3rXF4TamuB9mUPQin0mPWZGPPO89GYGwmaEfGQ6iHXbjDItSRU8Nv/s320/Baite_Maple_Mini_Top_No_Logo.png" width="320" /></a> </div>
<div class="separator" style="clear: both; text-align: center;">
ภาพจาก <a href="http://wiki.stm32duino.com/index.php?title=Maple_Mini">stm32duino.com</a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<table><tbody>
<tr><td>Maple Mini</td><td></td><td>USB to TTL</td></tr>
<tr><td>Tx1 (26) </td><td></td><td>Rx</td></tr>
<tr><td>Rx1 (25)</td><td></td><td>Tx</td></tr>
<tr><td>Gnd</td><td></td><td>Gnd</td></tr>
</tbody></table>
<u>ที่สำคัญ boot1 หรือ pin 2 จะต้องต่อ Gnd ด้วย </u>จากนั้นให้อัพโหลดโค๊ดจาก Arduino IDE แบบปกติ เมื่อขึ้น Uploading ให้กดปุ่ม reset ของ Maple Mini สังเกตุ LED จะกระพริบรัวๆ และตามด้วยกระพริบช้าๆ เมื่อถึงจังหวะนี้ ให้กดปุ่ม but=32 ก็จะสามารถอัพโค๊ดแก้ปัญหานี้ได้ROS.educationhttp://www.blogger.com/profile/16240720635722332861noreply@blogger.com0tag:blogger.com,1999:blog-4525316358138438787.post-73883471710354582222018-05-19T17:29:00.001+07:002018-07-26T12:17:50.388+07:00Coming soon!<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse; width: 100%px;"><tbody>
<tr><td height="28" style="line-height: 28px;"></td></tr>
<tr><td><table border="0" cellpadding="0" cellspacing="0" style="background-color: white; border-collapse: separate; border-radius: 3px; border: 1px solid #dddfe2; font-family: "helvetica" , "arial" , sans-serif; margin: 0px auto; width: 280px;"><tbody>
<tr style="padding-bottom: 8px;"><td><img alt="" class="img" height="146" src="https://scontent.fbkk1-6.fna.fbcdn.net/v/t1.0-0/c0.0.564.294/p320x320/22406390_733999953466449_9152802579703283744_n.jpg?_nc_fx=fbkk1-3&_nc_cat=0&oh=09aae60e4e234d5caf417627ddf3fea8&oe=5B7FC92D" width="280" /></td></tr>
<tr><td style="font-size: 14px; font-weight: bold; padding: 8px 8px 0px 8px; text-align: center;">หุ่นยนต์ไทยใช้ ROS - Robot Operating System Thailand</td></tr>
<tr><td style="color: #90949c; font-size: 12px; font-weight: normal; text-align: center;">กลุ่มบน Facebook · สมาชิก 942 คน</td></tr>
<tr><td style="padding: 8px 12px 12px 12px;"><table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse; width: 100%;"><tbody>
<tr><td style="background-color: #4267b2; border-radius: 3px; text-align: center;"><a href="https://www.facebook.com/plugins/group/join/popup/?group_id=1434138443344328&source=email_campaign_plugin" rel="noopener" style="color: #3b5998; cursor: pointer; text-decoration: none; width: 100%;" target="_blank"><table align="center" border="0" cellpadding="3" cellspacing="0" style="border-collapse: collapse;"><tbody>
<tr><td style="border-bottom: 3px solid #4267b2; border-top: 3px solid #4267b2;"><img src="https://facebook.com/images/groups/plugin/email/app_fb_32_fig_white.png" width="16" /></td><td style="border-bottom: 3px solid #4267b2; border-top: 3px solid #4267b2; color: white; font-family: "helvetica" , "arial" , sans-serif; font-size: 12px; font-weight: bold;">เข้าร่วมกลุ่ม</td></tr>
</tbody></table>
</a></td></tr>
</tbody></table>
</td></tr>
<tr><td style="border-top: 1px solid #dddfe2; font-size: 12px; padding: 8px 12px;">กลุ่มพูดคุยกันแบบสองภาษาไทย/อังกฤษเกี่ยวกับ Robot Operating System - ROS (http://www.ros.org) และ หุ่นยนต์
Thai/English bilingual group for discussio...</td></tr>
</tbody></table>
</td></tr>
<tr><td height="14" style="line-height: 14px;"></td></tr>
</tbody></table>
ROS.educationhttp://www.blogger.com/profile/16240720635722332861noreply@blogger.com0tag:blogger.com,1999:blog-4525316358138438787.post-67475376596989590932018-02-11T15:36:00.000+07:002018-07-15T04:38:01.449+07:00Xiaomi LDS (Laser Distance Sensor) สำหรับการ hack ด้วย Arduino<center>
<a href="http://s.click.aliexpress.com/e/eQFiAEY" target="_parent"><img src="//ae01.alicdn.com/kf/HTB1NAXeazJTMKJjSZFPq6zHUFXam/1-piece-Robot-Vacuum-Cleaner-Laser-Sensor-font-b-LDS-b-font-for-font-b-xiaomi.jpg_220x220.jpg" /></a><span style="display: block;"><br /></span><span style="display: block;"></span></center>
<b>LDS (Laser Distance Sensor)</b> ของหุ่นยนต์ดูดฝุ่น <b>Xiaomi</b> มีความน่าสนใจที่จะเอามา hack เพื่อใช้กับหุ่นยนต์มาก ข้อมูล <a href="http://www.robotreviews.com/chat/viewtopic.php?f=4&t=19881">จากเวบนี้</a> ทำให้ทราบว่าที่จริงแล้ว Xiaomi LDS ใช้ไมโครคอนโทรลเลอร์แบบเดียวกับ XV-11 LDS ของ Neato จึงสามารถจะใช้ซอฟต์แวร์ <a href="https://github.com/getSurreal/XV_Lidar_Controller">XV Lidar Controller</a> มาควบคุม Xiaomi LDS ด้วย Arduino ได้<br />
<br />
<b>Schematic</b>: <a href="http://www.fotos-hochladen.net/uploads/xiaomiarduinov2p0e9bqa5.jpg" target="_blank">Link</a><br />
<span style="display: block;"><b>Arduino code</b>: <a href="https://github.com/getSurreal/XV_Lidar_Controller">https://github.com/getSurreal/XV_Lidar_Controller</a></span><span style="display: block;"><br /></span><span style="display: block;"><b>Video tutorials</b>:</span><br />
<center>
<iframe allow="autoplay; encrypted-media" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/HrM0PuDlsGs" width="560"></iframe></center>
<center>
<br /></center>
<center>
<br /></center>
<center>
<br /></center>
<center>
</center>
<center>
</center>
<center>
</center>
<center>
</center>
<center>
</center>
<center>
</center>
<center>
</center>
<center>
</center>
<center>
</center>
<center>
</center>
<center>
</center>
<center>
</center>
<center>
</center>
<center>
<span style="display: block;"><iframe allow="autoplay; encrypted-media" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/b5hEG3b_Kec" width="560"></iframe></span> <br /></center>
<center>
</center>
<center>
</center>
<center>
</center>
<center>
</center>
ROS.educationhttp://www.blogger.com/profile/16240720635722332861noreply@blogger.com0tag:blogger.com,1999:blog-4525316358138438787.post-66240677241669605422018-02-11T14:25:00.000+07:002018-07-15T04:38:41.391+07:00VL53L0X + STM32 Time-of-Flight (ToF) ranging sensor ที่มีเอาท์พุทแบบ Serial และ PWM<center>
<a href="http://s.click.aliexpress.com/e/RvrfUfI" target="_parent"><img src="//ae01.alicdn.com/kf/HTB1FtH8SpXXXXXbXpXXxh4dFXXXs/1PC-GY-53-VL53L0X-Laser-font-b-Flight-b-font-font-b-Time-b-font-Range.jpeg_220x220.jpeg" /></a><span style="display: block;"><br /></span> </center>
GY-53 (VL53L0X + STM32 Laser Flight Time Range Sensor) คือ โมดูลวัดระยะทางขนาดเล็กที่ใช้ชิพ VL53L0X จาก <a href="http://www.st.com/en/imaging-and-photonics-solutions/vl53l0x.html" target="_blank">STMicroelectronics</a> และมีไมโครคอนโทรลเลอร์ STM32 มาในตัว ทำให้ลดขั้นตอนการประมวลลง โดยให้ค่าเอาท์พุทออกมา 2 แบบ คือ Serial และ PWM แต่ตัวโมดูลยังคงสามารถเชื่อมต่อผ่าน I2C ได้อีกด้วย<br />
<br />
<b>Arduino Code</b>: <a href="https://github.com/Play-Zone/GY-VL53L0X">https://github.com/Play-Zone/GY-VL53L0X</a>ROS.educationhttp://www.blogger.com/profile/16240720635722332861noreply@blogger.com0tag:blogger.com,1999:blog-4525316358138438787.post-64043790892258979612017-12-12T04:24:00.000+07:002018-07-14T04:50:37.883+07:00ติดตั้ง TensorFlow 1.4 บน Ubutu 16.04 LST ก้าวแรกสู่ Deep Learning จากคู่มือของ <a href="https://www.tensorflow.org/install/install_linux">TensorFlow</a> สำหรับ GPU ตอนนี้เวอร์ชั่น 1.4 สนับสนุน CUDA 8.0 และ cuDNN 6.0 ให้ติดตั้ง<a href="http://blog.robots.in.th/2017/12/cuda-toolkit-80-cudnn-60-ubuntu-1604-lts.html">ตามนี้</a>ก่อน<br /><br />1. เมื่อสำเร็จแล้วติดตั้ง TensorFlow ตามนี้ <br /><pre>$sudo apt-get install libcupti-dev<br />$pip3 install tensorflow-gpu<br /></pre><br />2. ทดสอบการติดตั้งโดยการรันโปรแกรมง่ายๆ ดังนี้ <br /><pre># Python<br />import tensorflow as tf<br />hello = tf.constant('Hello, TensorFlow!')<br />sess = tf.Session()<br />print(sess.run(hello))<br /></pre>ROS.educationhttp://www.blogger.com/profile/16240720635722332861noreply@blogger.com0tag:blogger.com,1999:blog-4525316358138438787.post-10134195660739177382017-12-12T04:15:00.000+07:002018-07-14T04:50:37.475+07:00ติดตั้ง CUDA Toolkit 8.0 และ cuDNN 6.0 บน Ubuntu 16.04 LTSจากการแนะนำของ<a href="http://www.pradeepadiga.me/blog/2017/03/22/installing-cuda-toolkit-8-0-on-ubuntu-16-04/">บลอกนี้</a> และคู่มือจากเวบของ <a href="http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html">NVIDIA</a><br /><br />1. ดาวน์โหลด CUDA Toolkit 8.0 GA2 จาก <a href="https://developer.nvidia.com/cuda-toolkit-archive">https://developer.nvidia.com/cuda-toolkit-archive</a> โดยเลือกไฟล์ตามระบบปฏิบัติการที่ต้องการ สุดท้ายเลือก Installer Type แบบ deb (network)<br /><br />2. คำสั่งติดตั้งดังนี้<br /><br /><pre>$sudo dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.deb<br />$sudo apt-get update<br />$sudo apt-get install cuda-8-0 (<a href="https://devtalk.nvidia.com/default/topic/1024342/cuda-setup-and-installation/unable-to-uninstall-cuda-9-0-completely-and-install-8-0-instead/">จากระทู้นี้</a>)<br /></pre><br />3. edit ตัวแปร environment<br /><pre>$sudo nano /etc/environment (แล้วเติม :/usr/local/cuda-8.0/bin)<br />$source /etc/environment (ถ้าไม่เวิร์คให้รีบูต)<br />$nvcc -V (เพื่อทดสอบ)<br /></pre><br />4. ดาวน์โหลด cuDNN 6.0 for CUDA 8.0 จาก <a href="https://developer.nvidia.com/rdp/cudnn-download">https://developer.nvidia.com/rdp/cudnn-download</a> โดยต้องเป็นสมาชิกก่อน โดยเลือกโหลดดังนี้ cuDNN v6.0 Runtime Library for Ubuntu16.04 (Deb) และ cuDNN v6.0 Developer Library for Ubuntu16.04 (Deb)<br /><br />5. คำสั่งติดตั้ง<br /><pre>$sudo dpkg -i <library_name>.deb (โดยให้ติดตั้ง Runtime Library ก่อนแล้วตามด้วย Developer Library)<br /></library_name></pre>ROS.educationhttp://www.blogger.com/profile/16240720635722332861noreply@blogger.com0tag:blogger.com,1999:blog-4525316358138438787.post-19286058457622640372017-09-25T14:02:00.000+07:002018-07-14T04:50:37.592+07:00การติดตั้ง ROS TurtleBot ใน Jetson TK1หลังจากติดตั้ง OS และ ซอฟต์แวร์ต่างๆ ด้วย <a href="https://developer.nvidia.com/embedded/jetpack-notes">JetPack 3.1</a> ลงบน <a href="http://www.nvidia.com/object/jetson-tk1-embedded-dev-kit.html">Jetson TK1</a> ผมก็พยายามติดตั้ง <a href="http://www.ros.org/">ROS</a> และ <a href="http://wiki.ros.org/Robots/TurtleBot">TurtleBot</a> package แต่ไม่ประสบความสำเร็จเนื่องจากมีปัญหาเล็กน้อยๆ เกี่ยวกับ driver และ uvcvideo ซึ่งจำเป็นต่อการตั้งตั้ง librealsense แม้ว่าเราจะไม่ได้ใช้ก็ตาม แต่มันเป็น dependency ของ TurtleBot ผมได้พบวิธีแก้ปัญหาจาก<a href="https://answers.ros.org/question/259982/turtlebot-minimallaunch-not-working-with-jetson-tk1/">กระทู้นี้</a> และนำมาปรับใช้จนกระทั่งพบกับความสำเร็จ ผมขอสรุปขั้นตอนดังนี้ โดยขอย้ำว่าอย่าทำสลับลำดับเด็ดขาด<br /><br />1. ลง JetPack ล่าสุด ในที่นี้ของผมใช้ <a href="https://developer.nvidia.com/embedded/jetpack-notes">JetPack 3.1</a> มาพร้อมกับ <a href="https://developer.nvidia.com/linux-tegra-r215">L4T 21.5</a> โดยตัว OS คือ <a href="http://releases.ubuntu.com/14.04/">Ubuntu 14.04 LTS (Trusty Tahr)</a> โดยมี kernel version: 3.10.40 <a href="http://docs.nvidia.com/jetpack-l4t/index.html#developertools/mobile/jetpack/l4t/3.0/jetpack_l4t_install.htm">ขั้นตอนวิธีติดตั้งอ่านที่นี่</a><br /><br />2. คอมไฟล์ kernel เพื่อติดตั้งโมดูล uvcvideo ตามการแนะนำจาก <a href="http://www.jetsonhacks.com/2016/06/20/intel-realsense-camera-installation-nvidia-jetson-tk1/">jetsonhacks.com</a> แต่มีบางขั้นตอนที่ต้องดัดแปลง ซึ่งขั้นตอนในส่วนนี้มีดังนี้<br /><br /><ul><li>git clone <a href="https://github.com/jetsonhacks/installLibrealsense">https://github.com/jetsonhacks/installLibrealsense</a>.git</li><li>cd installLibrealsense/UVCKernelPatches</li><li>เปิดไฟล์ scripts/installKernelSources.sh แล้วแก้บรรทัดนี้ wget http://developer.download.nvidia.com/embedded/L4T/r21_Release_v4.0/source/kernel_src.tbz2 ให้เป็น wget http://developer.download.nvidia.com/embedded/L4T/r21_Release_v5.0/source/kernel_src.tbz2 เนื่องจาก L4T เป็นเวอร์ชัน 21.5 นั่นเอง</li><li>./getKernelSources.sh หลังนั้นจะมีหน้าต่าง kernel config โผล่ขึ้นมา ให้แก้ไข General Setup -> Local version – append to kernel release: โดยดูจาก $uname -r โดยเครื่องหมาย - ห้ามนำออก จากนั้น Device Drivers -> Multimedia Support -> Media USB Adapters -> USB Video Class (UVC) ให้เลือกเป็นรูป วงกลม สุดท้าย save</li><li>./applyUVCPatch.sh</li><li>./buildKernel.sh</li><li>./copyzImages.sh</li><li>cd .. และ ./setupTK1.sh เพื่อแก้ไขปัญหา USB 3.0 </li><li>สุดท้าย reboot แล้วใช้คำสั่ง lsmod จะพบว่ามี uvcvideo แล้ว</li></ul><div>3. หลังจากขั้นที่ 2 เสร็จสิ้น เราสามารถลง <a href="http://wiki.ros.org/indigo/Installation/UbuntuARM">ROS Indigo บน UbuntuARM</a> ด้วยวิธีปกติ หรือ เพื่อความสะดวกใช้สคริปต์จาก <a href="https://github.com/jetsonhacks/installROS">https://github.com/jetsonhacks/installROS</a></div><div>4. ลง <a href="http://wiki.ros.org/turtlebot/Tutorials/indigo/Turtlebot%20Installation">ROS TurtleBot </a>ตามปกติ </div><div>5. rosrun kobuki_ftdi create_udev_rules เพื่อแก้ไขปัญหา driver สำหรับ Kobuki base</div><div>6. sudo usermod -a -G video $USER </div><div>7. เพิ่ม บรรทัดข้างล้างนี้ ใน .bashrc</div><div>export TURTLEBOT_BASE=kobuki</div><br /><div>export TURTLEBOT_3D_SENSOR=asus_xtion_pro </div><div>8. ติดตั้ง Grinch kernel จาก <a href="https://github.com/jetsonhacks/installGrinch">https://github.com/jetsonhacks/installGrinch</a> จากนั้น reboot ก็จะใช้งานได้ตามปกติ</div><div><br /></div><div>อ่านเพิ่มเติม</div><div><ul><li><a href="http://www.artificialhumancompanions.com/autonomous-deep-learning-robot-the-missing-instructions/">http://www.artificialhumancompanions.com/autonomous-deep-learning-robot-the-missing-instructions/</a></li><li><a href="http://www.artificialhumancompanions.com/networking-deep-learning-robot/#more-181">http://www.artificialhumancompanions.com/networking-deep-learning-robot/#more-181</a></li><li><a href="http://www.artificialhumancompanions.com/slam-autonomous-navigation-deep-learning-robot/#more-231">http://www.artificialhumancompanions.com/slam-autonomous-navigation-deep-learning-robot/#more-231</a></li></ul></div>ROS.educationhttp://www.blogger.com/profile/16240720635722332861noreply@blogger.com0tag:blogger.com,1999:blog-4525316358138438787.post-27437689216414246272017-09-18T13:06:00.000+07:002018-11-01T19:43:06.582+07:00Ubuntu 16.04 LTS บน Orange Pi Win Plusแม้ว่า <a href="https://www.raspberrypi.org/">Raspberry Pi</a> จะเป็นที่นิยม แต่อย่างไรก็ตามมันมี RAM แค่ 1 GB เท่านั้น ผมได้พบกับ <a href="http://www.orangepi.org/OrangePiWin_WinPlus/">Orange Pi Win Plus</a> ที่มาพร้อมกับ RAM ขนาด 2 GB ที่คิดว่าจะใช้ <a href="http://www.ros.org/">ROS</a> ได้อย่างลื่นสบาย<br />
<br />
ผมได้ทำตามการติดตั้งโดยเลือกใช้ image แบบ <a href="http://www.orangepi.org/downloadresources/orangepiwin/orangepiwin_e4e90e355caea583ddc1d955.html">Ubuntu Desktop Xenial</a> ซึ่ง flash ลงบน SD card ด้วยโปรแกรม <a href="https://sourceforge.net/projects/win32diskimager/">Win32 Disk Imager</a> แบบปกติ<br />
<br />
เมื่อใส่ SD card ที่ flash แล้วลงในบอร์ด แล้วต่อเมาส์ คีย์บอร์ด และ จอ ผ่าน HDMI-to-VGA จากนั้นก็ boot พบว่า จอไม่รองรับเนื่องจาก resolution ที่ตั้งไว้สูงเกินไป<br />
<br />
ผมได้พบวิธีแก้จาก<a href="http://www.orangepi.org/orangepibbsen/forum.php?mod=viewthread&tid=2931">บอร์ดนี้</a> คือให้ดาวน์โหลด <a href="https://github.com/avafinger/opi-win-a64-firmware/issues/1#issuecomment-321518096">DTB ที่ตั้งค่า resoltion 720p</a> จากนั้นถอด SD card ไปใส่ที่เครื่อง PC ที่ใช้งานปกติก่อน นั้นแตกไฟล์ DTB ที่โหลดมาไปแทนที่ BOOT/orangepi/OrangePi-A64.dtb ใน SD card ซึ่งก็สามารถแก้ปัญหาได้<br />
<br />
สุดท้ายขยาย SD card ให้ใช้พื้นที่เต็มที่ด้วยคำสั่ง resize_rootfs.shROS.educationhttp://www.blogger.com/profile/16240720635722332861noreply@blogger.com0tag:blogger.com,1999:blog-4525316358138438787.post-52496570551328898222017-07-26T05:36:00.000+07:002018-07-22T04:53:03.535+07:00เริ่มต้นกับ ROS (Robot Operating System) บน Raspberry Pi 3<a href="http://www.ros.org/">ROS (Robot Operating System)</a> คือ ระบบปฏิบัติการหุ่นยนต์ ที่ประกอบไปด้วย library และ โปรแกรมต่างๆ ที่จะอำนวยความสะดวกในการสร้างหุ่นยนต์ บทความนี้จะรวบรวมข้อมูลในการตั้งต้นสำหรับการใช้งาน ROS บน Raspberry Pi 3 ที่ติดตั้ง Ubuntu MATE<br />
<br />
1. <b>ติดตั้ง Ubuntu MATE บน Raspberry Pi </b>โดยส่วนตัวแล้วผมไม่คุ้นเคยกับระบบปฏิบัติการอย่างเป็นทางการของ Raspberry Pi นั่นคือ <a href="https://www.raspberrypi.org/downloads/raspbian/">Raspbian </a>แต่ผมได้ใช้ Ubuntu มาอย่างยาวนาน น่าจะสักตั้งแต่ปี 2007 โชคดีที่ใน<a href="https://www.raspberrypi.org/downloads/">หน้าดาวน์โหลดของ Raspberry Pi</a> มี OS ทางเลือกที่เป็น Ubuntu MATE การติดตั้ง Ubuntu MATE บน Raspberry Pi 3 <a href="https://ubuntu-mate.org/raspberry-pi/">ให้ทำตามเอกสารนี้</a> ณ ขณะที่เขียนนี้ Ubuntu MATE เป็นเวอร์ชั่น 16.04 LTS<br />
<br />
ปรับแต่ง Raspbery Pi เพื่อเตรียมพร้อมจะใช้งาน ROS ดังนี้<br />
<br />
<ul>
<li><a href="http://ros.education/2017/07/vnc-ubuntu-mate-1604-raspberry-pi-3.html">ติดตั้ง VNC เพื่อทำ Remote Access</a> </li>
<li><a href="http://ros.education/2017/07/uart-raspberry-pi-3.html">เปิดการใช้งาน hardware serial port</a> </li>
<li><a href="http://ros.education/2017/07/i2c-raspberry-pi-3-ubuntu-mate-1604.html">เปิดการใช้งาน I2C</a> </li>
</ul>
<br />
2. <b>ติดตั้ง ROS </b>ณ ขณะนี้ เวอร์ชั่นที่เป็น LTS คือ Kinectic Kame สำหรับการติดตั้ง ROS ใน Ubuntu MATE บน Raspberry Pi ให้ทำตามขั้นตอนใน<a href="http://wiki.ros.org/ROSberryPi/Installing%20ROS%20Kinetic%20on%20the%20Raspberry%20Pi">เอกสารในเวบไซต์ของ ROS</a> หรือ <a href="https://www.intorobotics.com/how-to-install-ros-kinetic-on-raspberry-pi-3-ubuntu-mate/">www.intorobotics.com</a><br />
<br />
3. <b>ติดตั้ง ROS สำหรับ Arduino</b> เป็นที่รู้กันว่า Raspberry Pi 3 นั้นมี PWM แค่ 1 ช่อง และไม่มี ADC ซึ่งจำเป็นต่อการสร้างหุ่นยนต์มาก ดังนั้นเพื่อเป็นการเติมเต็มส่วนที่ขาดหาย เราจะเชื่อมต่อ Raspberry Pi กับ <a href="https://www.arduino.cc/">Arduino</a> ผ่าน serial port นั่นเอง การติดตั้งขอให้ทำตามเอกสารใน<a href="http://wiki.ros.org/rosserial_arduino/Tutorials/Arduino%20IDE%20Setup">เวบไซต์ของ ROS</a><br />
<br />
4. <b>ศึกษา Tutorial</b> เมื่อทุกอย่างทำงานอย่างลงตัว ให้ศึกษาตัวอย่าง<br />
<br />
<ul>
<li><a href="http://wiki.ros.org/ROS/Tutorials">การใช้งาน ROS</a> </li>
<li><a href="http://wiki.ros.org/rosserial_arduino/Tutorials">rosserial_arduino</a></li>
</ul>
ROS.educationhttp://www.blogger.com/profile/16240720635722332861noreply@blogger.com0tag:blogger.com,1999:blog-4525316358138438787.post-65909964215023054812017-07-25T21:04:00.000+07:002018-07-14T04:50:37.941+07:00ติดตั้ง RTIMULib เพื่อเชื่อมต่อกับ MPU9250 บน Raspberry Pi 3เราจะติดตั้ง <a href="https://github.com/RPi-Distro/RTIMULib">RTIMULib</a> เพื่ออ่านค่าของเซนเซอร์ใน MPU9250 ซึ่งประกอบด้วย accelerometer, gyroscpope และ magnetometer ผ่าน I2C ดังนั้น<a href="http://blog.robots.in.th/2017/07/i2c-raspberry-pi-3-ubuntu-mate-1604.html">ต้องเปิดการใช้งาน I2C ตามนี้ก่อน</a> จากนั้นให้ทำตามขั้นตอนตาม<a href="https://github.com/RPi-Distro/RTIMULib/tree/master/Linux">คู่มือของ RTIMULib </a> ดังนี้<br /><br />1. ติดตั้ง CMake<br /><br /><pre>sudo apt-get install cmake</pre><br />2. ติดตั้ง Qt dev<br /><br /><pre>sudo apt-get install libqt4-dev</pre><br />3. โคลนซอร์สโค๊ด<br /><br /><pre>git clone https://github.com/RPi-Distro/RTIMULib/</pre><br />4. คอมไฟล์ library<br /><br /><pre>cd RTIMULib/RTIMULib/<br />mkdir build<br />cd build<br />cmake ..<br />make -j4<br />sudo make install<br />sudo ldconfig<br /></pre><br />ใน RTIMULib/Linux จะมีโปรแกรมต่างๆ เช่น RTIMULibCal, RTIMULibDrive, RTIMULibDrive10 and RTIMULibDrive11 ให้คอมไพล์ ตามนี้ <br /><br /><pre>make -j4<br />sudo make install<br /></pre><br />ในกรณีที่ Device ID ของ MPU9250 เป็น 115 (0x73) ให้แก้ไขไฟล์ RTIMULib/RTIMULib/IMUDrivers/RTIMUDefs.h คือ <br /><br /><pre></pre><pre>#define MPU9250_ID 0x73<br /></pre><pre></pre><pre></pre>แล้วคอมไฟล์อีกครั้ง <br /><br />ในบางครั้งโมดูลที่เราซื้อมาอาจจะเป็น MPU9255 ซึ่งเป็นชิปเบอร์ใหม่กว่า โดยเฉพาะที่ซื้อจากประเทศจีน แต่โชคดีที่มีคนทำ RTIMULib สำหรับ MPU9255 ไว้ ให้ไปดูรายละเอียดที่<br /><a href="https://github.com/Nick-Currawong/RTIMULib2">https://github.com/Nick-Currawong/RTIMULib2</a><br /><br />ในการใช้งานร่วมกับ ROS ศึกษารายละเอียดต่อที่นี่<br /><a href="http://www.jetsonhacks.com/2015/07/01/bosch-imu-under-ros-on-nvidia-jetson-tk1/">http://www.jetsonhacks.com/2015/07/01/bosch-imu-under-ros-on-nvidia-jetson-tk1/</a>ROS.educationhttp://www.blogger.com/profile/16240720635722332861noreply@blogger.com0tag:blogger.com,1999:blog-4525316358138438787.post-19186609994254657862017-07-25T20:26:00.000+07:002018-07-14T04:50:37.534+07:00เปิดการใช้งาน I2C บน Raspberry Pi 3 ที่ติดตั้ง Ubuntu MATE 16.04จากข้อมูล <a href="https://raspberrypi.stackexchange.com/questions/61905/enable-i2c-on-ubuntu-mate-raspberry-pi-3">raspberrypi.stackexchange.com</a>, <a href="https://github.com/RPi-Distro/RTIMULib/tree/master/Linux">github.com/RPi-Distro/RTIMULib</a> และ <a href="http://kingtidesailing.blogspot.com/2016/02/how-to-setup-mpu-9250-on-raspberry-pi_25.html">kingtidesailing.blogspot.com</a> การเปิดงานใช้งาน <a href="https://en.wikipedia.org/wiki/I%C2%B2C">I2C</a> เพื่อเชื่อมต่อ Raspberry Pi 3 กับโมดูลต่างๆ มีขั้นตอนดังนี้<br /><br />1. เปิดการใช้งาน I2C โดยใช้คำสั่ง<br /><br /><pre>sudo raspi-config</pre><pre></pre><br />จากนั้นเลือก Advance Interface แล้วเลือก I2C จากนั้นทำตามคำสั่งที่โปรแกรมกำหนด<br /><br />2. เปิดไฟล์ /etc/modules จะพบ<br /><br /><pre>i2c-dev</pre><br />ถ้าไม่พบให้เพิ่มเข้าไป<br /><br />3. เปิดไฟล์ /etc/modprobe.d/raspi-blacklist.conf จะไม่พบข้อความเกี่ยวกับ i2c ในนั้น ถ้าพบให้ใส่คอมเมนต์ เช่น <br /><br /><pre></pre><pre></pre><pre></pre><pre># blacklist i2c-bcm2708</pre><br />4. สังเกตุว่า /dev/i2c-1 จะเป็นโหมด 666 เพื่อใช้ user ธรรมดาไม่ใช่ root ใช้งานได้ (ไม่ต้องพิมพ์คำสั่ง sudo) แต่ถ้าไม่ใช่ให้เพิ่มไฟล์ /etc/udev/rules.d/90-i2c.rules โดยเพิ่ม <br /><br /><pre>KERNEL=="i2c-[0-7]",MODE="0666"</pre><br />5. แก้ไข /boot/config.txt เพื่อให้ i2c ทำงานที่ความถี่สูงสุด 400 kHz โดยเพิ่มข้อความนี้<br /><br /><pre>dtparam=i2c1_baudrate=400000</pre><pre></pre><pre></pre><br />6. รีบู๊ต <br /><pre></pre><pre></pre><br />7. ติดตั้ง I2C tool <br /><br /><pre>sudo apt-get install i2c-tools</pre><pre></pre><pre></pre><br />8. เชื่อมต่อ Raspberry Pi 3 กับโมดูล I2C โดยใช้ Pin 3 (SDA) และ Pin 5 (SCL) แล้วใช้คำสั่งเพื่อดู adress ของอุปกรณ์นั้น <br /><br /><pre>i2cdetect -y 1</pre><pre></pre><pre></pre><br />หากพบ address ของอุปกรณ์ ก็แสดงว่า I2C ก็พร้อมใช้งานแล้ว ROS.educationhttp://www.blogger.com/profile/16240720635722332861noreply@blogger.com0tag:blogger.com,1999:blog-4525316358138438787.post-39185120188569267232017-07-21T21:13:00.000+07:002018-07-14T04:50:37.709+07:00เปิดการใช้งาน UART บน Raspberry Pi 3ผมต้องการเปิดใช้งาน hardware serial บน Raspberry Pi 3 เพื่อในอนาคตจะเชื่อมต่อกับ Arduino ผ่านสายสัญญาณ Tx (Pin 8) และ Rx (Pin 10) จากการสืบเสาะข้อมูลจากเวบของ <a href="https://www.raspberrypi.org/documentation/configuration/uart.md">Raspberry Pi</a> และ <a href="https://raspberrypi.stackexchange.com/questions/45570/how-do-i-make-serial-work-on-the-raspberry-pi3">stackexchange</a> สรุปได้ว่าใน Rasberry Pi 3 มี serial port อยู่ 2 ช่อง คือ /dev/ttyS0 ซึ่งติดต่ออยู่กับ serial console และ /dev/ttyAMA0 ซึ่งติดต่ออยู่ BlueTooth เพื่อจะทำให้ /dev/ttyAMA0 เชื่อมต่อกับ Tx (Pin 8) และ Rx (Pin 10) เราต้องดำเนินการดังนี้<br /><br />1. ปิด serial console ก่อน โดยระบบปรับแต่งค่า<br /><pre>sudo raspi-config</pre><pre></pre>2. แก้ไข /boot/config.txt <br /><pre>sudo pluma /boot/config.txt<br /></pre><pre></pre>เพิ่มเนื้อหาดังต่อไปนี้ แล้ว save<br />a) เปิดใช้งาน UART<br />enable_uart=1<br /><br /> b) ค่าความเร็วของ CPU ให้คงที่ <br /><pre>force_turbo=1<br />arm_freq=1200<br />core_freq=250<br /></pre><pre></pre><pre></pre>c) ปิดการใช้งาน BlueTooth <br /><pre>dtoverlay=pi3-disable-bt<br /></pre><pre></pre><pre></pre><pre></pre><pre></pre><pre>3. แก้ไข /boot/cmdline.txt</pre><pre>sudo pluma /boot/cmdline.txt<br /></pre><pre></pre><pre>ลบข้อความ "console=serial0,115200" หรือ "console=ttyAMA0,115200" ออก แล้วเซฟ</pre><pre></pre><pre></pre><pre>4. ปิดการใช้งาน modem</pre><pre>sudo systemctl disable hciuart<br /></pre><pre></pre><pre>5. reboot</pre><pre></pre>ROS.educationhttp://www.blogger.com/profile/16240720635722332861noreply@blogger.com0tag:blogger.com,1999:blog-4525316358138438787.post-42087166048967203512017-07-21T20:40:00.000+07:002018-11-02T07:24:01.450+07:00การติดตั้ง VNC ใน Ubuntu MATE 16.04 บน Raspberry Pi 3บทความนี้เราจะติดตั้ง <a href="http://tightvnc.com/">TightVNC</a> เพื่อทำระบบ remote control แบบไร้สายผ่าน WiFi สำหรับ <a href="https://www.raspberrypi.org/">Raspberry Pi 3</a> ที่ติดตั้ง <a href="https://ubuntu-mate.org/raspberry-pi/">Ubuntu Mate</a> 16.04 โดยมีขั้นตอนดังนี้<br />
<br />
<br />
1. ติดตั้ง <a href="http://tightvnc.com/">TightVNC</a><br />
<br />
<pre>sudo apt-get update
sudo apt-get install tightvncserver</pre>
<br />
2. ตั้งค่า lightdm<br />
<br />
<pre>sudo pluma /etc/lightdm/lightdm.conf
จากนั้นใส่เนื้อหาดังนี้ แล้ว save
<pre>[VNCServer]
enabled=true
port=5900
width=800
height=600
depth=16</pre>
</pre>
3. จากนั้นรีสตาร์ท lightdm <br />
<br />
<pre>sudo /etc/init.d/lightdm restart</pre>
<pre>
</pre>
<pre></pre>
4. ตั้งค่า WiFi เพื่อให้เชื่อมต่ออินเทอร์เนตก่อนจะ login โดยการเข้าไปที่ Edit connection เลือก Edit ชื่อ WiFi hot spot ที่เชื่อมต่อ ในแทบ General เลือก All users may allow to connect <br />
<br />
ที่มา<br />
<a href="http://panjitalk.com/connecting-ubuntu-mate-in-raspberry-pi-using-tightvnc/">http://panjitalk.com/connecting-ubuntu-mate-in-raspberry-pi-using-tightvnc/</a><br />
<pre></pre>
ROS.educationhttp://www.blogger.com/profile/16240720635722332861noreply@blogger.com0