「利用SLAM重回邊緣角落#01」自學資源整理 SLAM 即時定位與地圖構建 & ROS 機器人作業系統

Standard

以下附上我找到的部分
還請路過的大神推薦其他更棒的自學資源

線上課程
1.SLAM course by Cyrill Stachniss
http://ais.informatik.uni-freiburg.de/teaching/ws13/mapping/

書籍資源    (適用於ROS indigo版本)
1.机器人操作系统ROS浅析
(A Gentle Introduction to ROS)(中文翻譯書)
https://www.cse.sc.edu/~jokane/agitr/机器人操作系统(ROS)浅析.pdf

2.Mastering ROS for Robotics Programming (原文書)
https://www.amazon.com/Mastering-Robotics-Programming-Lentin-Joseph/dp/1783551798/ref=sr_1_1?s=books&ie=UTF8&qid=1513885920&sr=1-1&keywords=Mastering+ROS+for+Robotics+Programming

3.Programming Robots with ROS(原文書)
https://www.amazon.com/Programming-Robots-ROS-Practical-Introduction/dp/1449323898

4.視覺SLAM十四講:從理論到實踐 (中文書)
http://www.books.com.tw/products/CN11430891

投影片
1.介紹ROS by HyhpaROS
(ROS Ecosystem & Applications [HyphaROS] -- by HaoChih)
https://www.slideshare.net/HaoChihLin/ros-ecosystem-applications-hypharos-by-haochih

其他網站
1.Robot Ignite Academy 線上ROS相關技術教學平台
http://www.theconstructsim.com/construct-learn-develop-robots-using-ros/robotigniteacademy_learnros/

2.ROS Develop Studio(RDS) ROS線上模擬開發平台
http://www.theconstructsim.com/rds-ros-development-studio/

3.SLAM發展史
https://www.how321.com/183762.html

4.open slam 搜集了很多SLAM的方法
http://openslam.org/

5.open slam的github
https://github.com/OpenSLAM/slambook
https://github.com/OpenSLAM/awesome-SLAM-list

6.維基百科list of slam
https://en.wikipedia.org/wiki/List_of_SLAM_Methods






「ROS從入門到放棄#5」試著寫一個簡單的 Subscriber 筆記 教學

Standard

「ROS從入門到放棄#0」ROS & SLAM 資源整理篇 持續更新中
「ROS從入門到放棄#1」ROS 常見的指令集 筆記 教學
「ROS從入門到放棄#2」Hello World ! ROS ! 建構工作區 寫個簡單的node來輸出訊息 筆記 教學
「ROS從入門到放棄#3」turtlesim 試著跑一個簡單的package 經典烏龜模擬器 筆記 教學
「ROS從入門到放棄#4」試著寫一個簡單的 Publisher 筆記 教學
「ROS從入門到放棄#5」試著寫一個簡單的 Subscriber 筆記 教學


我們現在要寫一個subscriber的node來接收topic
回傳「ROS從入門到放棄#4」的turtlesim裡的烏龜的位置


1.建立Package
和「ROS從入門到放棄#2」一樣
catkin_create_pkg turtlesim_subscriber
然後新增檔案
vim subscriber_main.cpp


2.寫主程式
我覺得這次大概分成五大part
(1)header file
(2)建立callback function,也就是topic裡面有訊息的時候會呼叫的function
(3)初始化
(4)建立subscriber
(5)透過ros::spin()讓有訊息進來topic的時候呼叫callback function直到node結束

3.編輯package.xml
把資訊補上即可
就算沒補也可以跑過XDDDDDD
所以這邊我就懶的補了
各位有興趣可以自己補上

4.編輯CMakeList.txt

5.執行
rosrun turtlesim_subscriber turtlesim_subscriber_exe

「ROS從入門到放棄#4」試著寫一個簡單的 Publisher 筆記 教學

Standard


「ROS從入門到放棄#0」ROS & SLAM 資源整理篇 持續更新中
「ROS從入門到放棄#1」ROS 常見的指令集 筆記 教學
「ROS從入門到放棄#2」Hello World ! ROS ! 建構工作區 寫個簡單的node來輸出訊息 筆記 教學
「ROS從入門到放棄#3」turtlesim 試著跑一個簡單的package 經典烏龜模擬器 筆記 教學
「ROS從入門到放棄#4」試著寫一個簡單的 Publisher 筆記 教學
「ROS從入門到放棄#5」試著寫一個簡單的 Subscriber 筆記 教學


我們現在要寫一個publisher的node來丟topic
讓「ROS從入門到放棄#4」的turtlesim裡的烏龜亂走


1.建立Package
和「ROS從入門到放棄#2」一樣
catkin_create_pkg turtlesim_publisher
然後新增檔案
vim publisher_main.cpp


2.寫主程式
我覺得大概分成七大part
(1)header file
(2)初始化
(3)建立publisher
(4)把資料寫入message
(5)publish message
(6)output訊息到terminal
(7)控制送出頻率


3.編輯package.xml
前面的資訊懶得改只改後面


4.編輯CMakeList.txt



5.執行
rosrun turtlesim_publisher turtlesim_publisher_exe

#為什麼
在建立publisher或subscriber時給的queue_size是什麼意思?
https://answers.ros.org/question/243855/how-do-publishersubscriber-message-queues-work/

「ROS從入門到放棄#3」turtlesim 試著跑一個簡單的package 經典烏龜模擬器 筆記 教學

Standard
「ROS從入門到放棄#0」ROS & SLAM 資源整理篇 持續更新中
「ROS從入門到放棄#1」ROS 常見的指令集 筆記 教學
「ROS從入門到放棄#2」Hello World ! ROS ! 建構工作區 寫個簡單的node來輸出訊息 筆記 教學
「ROS從入門到放棄#3」turtlesim 試著跑一個簡單的package 經典烏龜模擬器 筆記 教學
「ROS從入門到放棄#4」試著寫一個簡單的 Publisher 筆記 教學
「ROS從入門到放棄#5」試著寫一個簡單的 Subscriber 筆記 教學


1.下載
sudo apt-get update
sudo apt-get install ros-indigo-turtlesim

2.執行
分三個terminal執行(分頁or獨立視窗)
roscore                                                   //開啟節點管理器,所有ROS程序都必須
rosrun turtlesim turtlesim_node          //開啟烏龜模擬器
rosrun turtlesim turtle_teleop_key       //可以用上下左右見控制視窗中的烏龜

3.成果
可以搭配「ROS從入門到放棄#1」查看這支pkg有哪些node,丟了哪些topic,topic裡面是什麼type的msg,跑跑看rqt_graph之類的,之後的「ROS從入門到放棄#4」與「ROS從入門到放棄#5」將會分別寫publisher和subscriber和這個pkg互動

「ROS從入門到放棄#2」Hello World ! ROS ! 建構工作區 寫個簡單的node來輸出訊息 筆記 教學

Standard
「ROS從入門到放棄#0」ROS & SLAM 資源整理篇 持續更新中
「ROS從入門到放棄#1」ROS 常見的指令集 筆記 教學
「ROS從入門到放棄#2」Hello World ! ROS ! 建構工作區 寫個簡單的node來輸出訊息 筆記 教學
「ROS從入門到放棄#3」turtlesim 試著跑一個簡單的package 經典烏龜模擬器 筆記 教學
「ROS從入門到放棄#4」試著寫一個簡單的 Publisher 筆記 教學
「ROS從入門到放棄#5」試著寫一個簡單的 Subscriber 筆記 教學


1.建立工作區
ROS的工作區架構大概像以下這樣分三層
ROScode/ 進去ROScode
build/ devel/ src/ 進去src
package_name1/  package_name2/  package_name3/


2.建立Package
新增package的時候可以打
catkin_create_pkg package_name
會自動生成一個資料夾裡面附package.xml和CMakeList.txt

這裡我們使用
catkin_create_pkg hello
裡面將會有三個檔案,前兩個是自動生成,.cpp檔是我們自己寫的

所以現在整體架構會是
ROScode/ 進去ROScode
build/ devel/ src/ 進去src
hello/ 進去hello
package.xml  CMakeList.txt  hello_world.cpp


3.完成主要執行檔


4.編輯package相關資訊
在package.xml前段編輯package_name、version、description、maintainer、license等等
雖然package.xml裡面寫的東西基本上都不影響到程式執行
但是當你的package要給別人用的時候就很重要
其他使用者可以從這個檔案中獲取必要的資訊或是在debug中跳出正確的錯誤訊息
像下面會講到的depend,如果package.xml有寫清楚,使用者沒有裝哪個工具,編譯器都能跳出正確的提示告知使用者有哪些package需要但沒有裝


5.宣告相依的libraries
在CMakeList.txt中
更改find_package(catkin REQUIRED)

find_package(catkin REQUIRED COMPONENTS roscpp)

在package.xml中
更改<build_depend>package_name</build_depend>
更改<run_depend>package_name</run_depend>

<build_depend>roscpp</build_depend>
<run_depend>roscpp</run_depend>



6.宣告可執行的文件
在CMakeList.txt中把註解打開
更改add_executable(executable_name source _files)
更改target_link_library(executable_name source _files)
可以自己取executable_name

add_executable(hello_world_exe hello_world.cpp)
target_link_library(hello_world_exe $(catkin_LIBRARIES))


7.編譯workspace
到build/ devel/ src/ 這層打
catkin_make


8.設定環境變數
讓ROS能找到我們新建的Package與檔案
source devel/setup.bash
這個步驟只要這個workspace不變就只需要在每個terminal執行一次
但這樣還是太麻煩
所以要改去家目錄底下更改.bashrc,讓terminal每次開啟時都自動執行這行,步驟如下
cd ~
vim .bashrc
至文件最下方,如果已經有舊的source就助解掉,然後貼上這行
source ~/PATH_TO_WORKSPACE/ROScode/devel/setup.bash


9. 執行程式
要先開節點管理器
roscore
然後就可以執行了rosrun package_name executable_name
rosrun hello hello_world_exe


#後續
之後再次新增package時只需要做2345679即可


#名詞整理
folder_name       資料夾名通常就是package_name,ex: hello
package_name      package名通常等於資料夾名,是在package.xml裡取的,ex: hello
executable_name      自己取的之後rosrun會call的名字,是在CMakeList.txt裡取的,ex: hello_world_exe
source_files      實際實作code的檔案,可能是一個或多個,ex: hello_world.cpp
node_name        node名在rqt_graph裡會顯示,是在source_files裡面取的,ex: hello_world_node
topic_name        topic的名字,ex: /turtle/cmd_vel
message_type_name       topic裡面的message type的名字,ex: geometry_msgs/Twist


#為什麼
為什麼要寫 int main(int argc, char** argv){}
那你一定是C++沒學好,跟我一樣,以下連結有清楚的解釋
https://stackoverflow.com/questions/3024197/what-does-int-argc-char-argv-mean
還有什麼是char**
http://bbs.csdn.net/topics/90016932
這則回得不錯
指针的指针,
保存指针的地址 ...
char ch;      //字符
char *a=&ch;  //ch 的地址
char **b=&a;  //a  的地址
那么有:
*b == a
*a == ch
**b == ch .......

「ROS從入門到放棄#1」ROS 常見的指令集 筆記 教學

Standard

「ROS從入門到放棄#0」ROS & SLAM 資源整理篇 持續更新中
「ROS從入門到放棄#1」ROS 常見的指令集 筆記 教學
「ROS從入門到放棄#2」Hello World ! ROS ! 建構工作區 寫個簡單的node來輸出訊息 筆記 教學
「ROS從入門到放棄#3」turtlesim 試著跑一個簡單的package 經典烏龜模擬器 筆記 教學
「ROS從入門到放棄#4」試著寫一個簡單的 Publisher 筆記 教學
「ROS從入門到放棄#5」試著寫一個簡單的 Subscriber 筆記 教學

rospack list
-列出安裝過的package的名字+位置 清單

rospack find package_name
-找特定package

rospack find partial_package_name
-搭配tab來查尋只知道部分名字的package

--------------------------------------------------------------------------------

rosls package_name
-跟ls一樣,列出那個package資料夾底下的檔案,但不會進去

roscd package_name
-直接進去那個package所在的資料夾

eog photo_name.png
-用來打開圖片的工具

--------------------------------------------------------------------------------

roscore
-節點管理器,ROS使用期間全程開啟

rosrun package_name executable_name
-執行ROS node,這裡注意package_name、executable_name、node_name是不一樣的東西

rosrun package_name executable_name__name:=node_name
-拿來更改default的node_name成自己想要的,注意是"_"+"_"+name,有兩段底線

--------------------------------------------------------------------------------

rosnode list
-於運行時使用,能看到現在有哪些節點

rosnode info node_name
-包含publications、Subscription等、process identifier(pid)

rosnode kill node_name
-關閉正在執行的node,這部分也可以使用ctrl+C,但node的名字可能還會留在roscore裡

rosnode cleanup
-把上面說到的一些已經關掉的節點從列表中移除

rqt_graph
-以圖形化視覺來表達節點間的關係

--------------------------------------------------------------------------------

rostopic list
-列出目前有的topic

rostopic echo topic_name
-output某個話題上的message

rostopic hz topic_name
-每秒發布message的數量

rostopic bw topic_name
-每秒發布message所佔用的容量(bytes)

rostopic info topic_name
-輸出message type、publishers、subscribers

--------------------------------------------------------------------------------

rosmsg show message_type_name
-查看這個message type的格式、變數型態

rostopic pub -r rate-in-hz topic_name message_type_name message_content
-手動發布message,在message_type_name+空格後按下tab即可自動生成格式
-另外-1模式,是一次性的發佈,-r,是頻率是的發佈,-l,是鎖存式,確保新的訂閱者也能收到
-貌似還有-f但沒看懂

--------------------------------------------------------------------------------

roswtf
-最後大絕,debug用,但可能還是google會比較快


「椅子懷舊特輯」合太谷日誌#01,舊楓之谷 Maple Story v113 BB前 私服(不是 台大谷 是 合太谷 喔 XDD

Standard


以下是在玩私服 合太谷 的特輯
各種椅子!以前在正服都買不起
來私服就要滿足一下以前的遺願~

可以用ctrl+F來找想看的椅子喔
以下是目前的搜集進度