raspberry pi 2,ubuntu,raspbian

最近找到的作業系統有四個,其中有三個已經安裝了ROS indigo,img檔案:

PXFmini_ErleBrain2_03_03_20162015-04-06-ubuntu-trusty2015-10-14-ubuntu-trustyaristoteles

第一個是raspbian,其它都是ubuntu,這裡也有介紹如何在raspbian安裝ROS indigo:

http://wiki.ros.org/ROSberryPi/Installing%20ROS%20Indigo%20on%20Raspberry%20Pi

不過我還是盡量採用簡單的方法。

目前遇到的問題都是wifi連線,當初買wifi dongle的時候沒有考慮到它的射程,因為turtlebot還有無人機會在設定的範圍內跑來跑去,所以到時候還是要再買射程較遠的wifi dongle.現在遇到的問題就先跳過去吧。

然後來整理一下爬文的心得,其中也包括鳥哥私房菜,花時間去那邊看看,對於netmask、gateway這一類東西可以有一些基本的理解。

通常,大部分教我們設定wifi的文章會提到wpa_supplicant.conf,實際上在PXFmini_ErleBrain2_03_03_2016這個系統上只要在/etc/network/interfaces做好設定(固定或浮動ip),就可以連上網路了,不過,要先按照這裡的說明把power_mgnt關掉,網路才不會自己斷線。當然,事情不會那麼順利的,雖然可以透過wifi上網,但是連線速度非常緩慢。另外,接上網路線的時候,輸入

apt-cache search ros-indigo

……它不會出現任何東西,這個img的版本是:Raspbian GNU/Linux 8 (jessie)、Linux 4.1.7-v7+、arm,如果要下載,它會要求輸入訂單號碼(我跟他們買了PXFmini飛控板),然後透過email傳送下載連結。erle robotics是一家西班牙公司,PXFmini_ErleBrain2_03_03_2016這個img預設的keyboard layout是"gb",不需要登入就會進入圖形介面,一開始的這個視窗pick_your_drone直接關掉就可以,當然,如果你買了他們家的產品,點選之後就可以開始玩,以後只要開機,它就會自己啟動ROS、autopilot……,然後就不會有"startx"這個動作了。……這是/home目錄的結構home_dir他們是以raspbian為基礎build出這個系統,所以有個方便的地方,只要用raspi-config就能擴充磁碟容量。

接下來這兩個就簡單帶過:

2015-04-06-ubuntu-trusty—>Ubuntu 14.04.2 LTS、Linux 3.18.0-20-rpi2、armv71

2015-10-14-ubuntu-trusty—>Ubuntu 14.04.3 LTS、Linux 3.18.0-25-rpi2、armv71

這兩個就沒有辦法用wifi上網,我確認過/etc/udev//rules.d/70-persistent.rules,裡面的地址跟wlan0的HWaddr是一致的,所以理論上應該不用動到這個檔案。輸入ifconfig,插上網路線可以看到wlan0的ip,拔掉網路線就不見了。……另外,我裝了Lubuntu,所以遇到vim顏色設定的問題,這邊的shell底色預設為黑色,深藍色的註解就看不清楚啦,可以參考這個網頁,下載desert256.vim、建立資料夾,然後在~/.vimrc加上

color desert256

這一列,就可以了。註解變成了比較亮的顏色: photo vim_color_zpsmkv0982b.png

最後是這個亞里斯多德:Ubuntu 14.04.2 LTS、Linux 3.18.0-20-rpi2、armv71,它的hostname是aristoteles,img檔也用這個名稱,這個檔案有15GB,16G的記憶卡裝不下,雖然有調整的方法,但是,拿一個32G的記憶卡來裝比較快。…它預設是義大利的鍵盤配置,startx之後,wow這個桌面真不錯,但是它的鍵盤不能改成US配置,在文字介面是沒問題的,進入圖形介面就變成預設的鍵盤配置,大概需要特殊的方法去改,反正圖形介面對我來講用處不大,不管他。

網路方面呢,即使插上網路線也連不上網路,通常下了ifconfig命令之後還可以看到HWaddr,但是這裡什麼都看不到,eth0、wlan0都沒有出現,那就這樣吧

sudo rm /etc/udev/rules.d/70-persistent-net.rules

把這個檔案砍了,接下來一切都恢復正常了,有線網路OK、無線網路OK,wifi_ok連上wifi,ping google.com,沒問題。安裝套件也沒問題。然後

apt-cache search ros-indigo-turtlebot

嗯,桌面版有的,這裡也有,接下來可以準備測試raspi-turtlebot了。……我發現它有network manager,單純只是好奇,進去圖形介面試用
network_mgr
別人家的網路訊號那麼強,擺在旁邊的分享器訊號卻很弱…
wpa_driver
換一個driver,再refresh,訊號就變強了,但是無論如何都連不上wifi,算了,這應該不重要。

順便記錄一下這個 photo remove_key_zpsy4yrc7ys.pngssh的時候如果遇到這個狀況,只要根據提示的訊息,把某一個line刪掉就好。

turtlebot note 8

 

看了一下以前的posts,turtlebot note 這個主題也把turtlebot_arm包在裡面了,所以,現在要寫turtlebot_arm_block_manipulation,自然就是“turtlebot note 8”了

基本上,turtlebot_arm的ik solver是可以用的,首先,來使用turtlebot_arm_kinect_calibration 吧,這種camera的特性是不能離被測物太近,所以我把turtlebot的脖子拉長
了,目前是這個樣子:
 photo block_manipulation_host_1_zpsiwd6lnnd.png

跟turtlebot note 7的時候已經不同了。然後用turtlebot_rviz_launchers 來確認它是不是真的“看到了”:
roslaunch turtlebot_bringup minimal.launch

roslaunch turtlebot_bringup 3dsensor.launch (這個檔案預設使用openni2,我的camera是xtion pro,所以要把openni2改成openni)

roslaunch turtlebot_rviz_launchers view_robot.launch (勾選 Registered PointCloud,確認可以看到整個 checkerboard)
 photo wifi_zpsribdt3ge.png

接下來的步驟:
roslaunch turtlebot_arm_bringup arm.launch

roslaunch turtlebot_bringup 3dsensor.launch

roslaunch turtlebot_arm_bringup cal_arm.launch

roslaunch turtlebot_arm_kinect_calibration calibrate.launch

cal_arm.launch是自己寫的,檔案在此:
https://drive.google.com/open?id=0B_5mtlyMHvbqZ3FDX2RRLUdnM2s

其它部分就跟這個tutorial差不多:
http://wiki.ros.org/turtlebot_kinect_arm_calibration/Tutorials/CalibratingKinectToTurtleBotArm
只是我不太確定On-board跟Off-board具體上會有什麼差異,雖然我是用“external kinect(xtion pro)”但是xtion pro是裝在turtlebot上面、也有完整的urdf模型…
現在跑block_manipulation_demo的時候,我是先執行下面這一串東西:
 photo 994344bb-09bb-423b-8735-886b61593bb8_zpsp1jqqfva.png

具體的步驟如下:
roslaunch turtlebot_arm_block_manipulation block_manipulation_moveit.launch

rosrun tf static_transform_publisher …………….

roslaunch turtlebot_arm_block_manipulation block_manipulation_demo.launch

另外就是,indigo版本比較依賴moveit,所以目前是把turtlebot跟turtlebot_arm分開,這樣比較單純,如果要把他們合體,在moveit裡面joint、ik solver如何定義,還要研究一下。

最後,我錄了兩個影片,一個是robot的動作,一個是Rviz的畫面,這兩個影片並不是同一次的抓取動作,當然這兩次的抓取都沒有成功,我想應該是調整一下參數就可以搞定了:

kamerider筆記之二

上一篇筆記,到了最後那個字串“hello”沒有被print出來,為什麼呢?其實對我來講也不是那麼重要,只要實作ok,也懶得去追究。
kamerider tutorial在軟體部分有8個步驟,這一篇從第四個步驟開始,不過我怎麼看都覺得他寫得有點怪,所以就不管他,反正安裝arduino沒什麼困難,裝好之後把arbotix-master裡面的東西按照下圖的位置放著就好。 Continue reading “kamerider筆記之二"

kamerider筆記之一

我終於放棄了,雖然turtlebot_arm這個package有一個能在moveit!裡面使用的ik solver,但是一直玩不起來,也許單純玩那隻手臂是OK的吧,如果再加一個mobile base,就不知道怎麼玩了。
畢竟也沒見過相關的demo影片,只有groovy版的turtlebot_arm有一些實作的影片,不過,kamerider算是很完整的project,雖然他是在hydro環境開發,但是不使用moveit!…
反正就是一隻4 dof的手臂嘛,以後弄一隻6或7 dof的手臂再來玩moveit!好了。 Continue reading “kamerider筆記之一"

turtlebot note 6

關於ikfast的plugin,已經知道問題出在哪裡,重點是move_group crash,而且這個問題如果不解決,也確實會影響到後面的練習。

首先,一直看到“no joint corresponding to base_footprint”這個訊息,就覺得不爽,在不知道真正原因的情況下,我一直以為我的urdf有問題,所以就乖乖地來寫一個urdf吧,實際上並沒有從零開始寫,既然我在turtlebot上面裝了一些東西,那就直接修改它的urdf.

turtlebot裡面沒有純urdf的格式,and,這個package整合了數個相關package,最後我選擇kobuki_description裡面的kobuki.urdf.xacro,把自己加裝的東西都寫到這個檔案裡面,再使用xacro.py產生一個純urdf檔案給moveit!–>如下圖: photo bot_kobuki_zpseexd01vy.png

當然這並沒有解決move_group crash的問題,不過這個做法也有好處,比如說gyro、cliff sensor都已經定義好了,對於往後相關的應用比較方便。

然後,move_group的問題,其實已經被修正了,但是我安裝moveit!的時候是用比較方便的方式:apt-get install

解決方法也很簡單,在github找到moveit_core,下載之後放到

~/catkin_ws/src

再把catkin_ws編譯一次就好了,這樣move_group的問題就解決了。

還有一個在moveit!裡面要不要設定passive_joint的問題,書上的說法是視情況而定,他的範例也沒有用到passive_joint,所以我就沒有特別注意,但是turtlebot_arm_arm_kinematics/IKFastKinematicsPlugin有規定joint的數量就是5個,所以這裡必須要給它一個passive_joint,也就是把“arm”這個group的tip_link(它本來就是個dummy link)設定為passive_joint,這樣就符合5個joint的條件了。

總算有一點進度了,接下來就是參考範例,寫一個python程式來控制機器人了…

turtlebot note 5

最近又卡關了,終於發現主要的問題點在於這個東西:

turtlebot_arm_arm_kinematics/IKFastKinematicsPlugin

延續之前的筆記,自己的package是my_turtlebot2,所以moveit!的package叫做my_turtlebot2_moveit_config,然後參考用的範例是ros_by_example的pi_robot還有turtlebot_arm(indigo).

完成了my_turtlebot2_moveit_config之後,裡面有一個demo.launch,這一次執行demo.launch的時候出問題了,繞了一大圈才發現,只要把moveit setup assistant叫出來,Planning Groups的Kinematic Solver改成kdl_kinematics_plugin/KDLKinematicsPlugin就沒有這個問題,所以,最好是能有一隻6 DOF的手,可以省掉很多麻煩,不過目前還沒有足夠的經費……

這篇記錄主要分兩個部分:urdf還有moveit!,先從urdf的部分開始,執行demo.launch的時候,有一個警告:

The root link base_footprint has an inertia specified in the URDF, but KDL does not support a root link with an inertia.  As a workaround, you can add an extra dummy link to your URDF.

這個模型在別的地方使用都很正常,但是到了moveit!就會有問題,本來在CAD軟體裡面,為了方便定義組合件的結合條件、計算距離,我的base_footprint是一個長、寬50 mm x 50 mm,厚度 1 mm的物體,參考pi_robot的base_footprint,它也是這樣的一個box,但是沒有定義質量、慣性。也就是說,base_footprint不能是一個實體。

大概直接修改urdf也可以解決此問題,我是重新輸出一個urdf檔,經過這一番折騰,意外地對於urdf exporter更加熟悉。參考別人寫的urdf,對於fixed類型的joint,其實沒有Reference Axis,但是如果在urdf exporter的Reference Axis選單裡面選了none,最後它還是自己產生了一些基準軸,所以,選none或者auto的結果是一樣的,而這兩種選擇通常有比較高的機率會造成輸出失敗:點了輸出按鈕之後,電腦跑了一陣子就卡住,必須重來一次。

因此我自己手動建立了每一個Link需要的Reference Axis,然後,child link參考的基準軸應該就是parent link,對於fixed類型的joint可以這樣設定。但是revolute 類型的joint就不能這樣做,可旋轉的joint還是必須參考自己的旋轉軸軸心,在ROS裡面才會有正確的動作。

再來是moveit!的部分,關於設定的方法,官方教學、還有書上的說明都還算清楚,照做就好,比較麻煩的是Planning Groups還有End Effectors.

這隻turtlebot_arm有5個關節,arm_shoulder_pan_joint、arm_shoulder_lift_joint、arm_elbow_joint、arm_wrist_joint、gripper_joint. 設定Planning Groups的時候,前面4個關節放在一個group(group name: arm),最後一個關節放在另一個group(group name: gripper)。arm這個group是一個chain,要定義base link還有tip link,而tip link就是一個dummy link,我把它叫做gripper_assembly_link,它的parent link是arm_wrist_link,它的座標系位置在夾爪的頂點(如下圖) photo gripper_link_zpsyf07kylf.png

定義gripper這個group的時候,不需要包含gripper_assembly_link,到了End Effectors的步驟,再把gripper_assembly_link設定為end effector的parent link.

到目前為止,my_turtlebot2_moveit_config 的demo.launch還是不能用,總是出現一個訊息:

no joint corresponding to base_footprint

書上沒有相關說明,google也找不到解法。demo.launch的關聯檔案都逐一對照過,即使參考pi_robot、turtlebot_arm也看不出來問題在哪裡,現在只能先跳過這個問題了,基本上不會影響接下來的進度……