2017年5月24日 星期三

ROS - MoveIt 快速搭建機器人運動規劃平台

  MoveIt是由ROS中一系列運動操作的功能包组成,包含運動規劃、操作控制、3D感知、運動學、碰撞檢測等等,並包含GUI控制介面。另外,MoveIt官網上還有相當詳細的教學與API說明。
  MoveIt官網:http://moveit.ros.org/


MoveIt架構

下圖是MoveIt的系統架構圖


move_group是MoveIt的核心部分,可以綜合機器人的各獨立組件,為用戶提供一系列需要的動作指令和服務。從架構圖中我們可以看到,move_group類似於一個積分器,本身並不具備豐富的功能,主要做各功能包、插件的集成。它通過消息或服務的形式接收機器人上傳的點雲信息、joints的狀態消息,還有機器人的tf tree,另外還需要ROS的參數服務器提供機器人的運動學參數,這些參數會在使用setup assistant的過程中根據機器人的URDF模型文件,創建生成(SRDF和配置文件)。

一、安裝

sudo apt-get install ros-kinetic-moveit
 以下將使用《master ros for robotics programming》的案例進行學習,tutorial source code如下
git clone https://github.com/qboticslabs/mastering_ros.git

二、Setup Assistant Tutorial

1. To start the MoveIt Setup Assistant:
roslaunch moveit_setup_assistant setup_assistant.launch

開啟MoveIt Setup Assistant」之後,選擇「Create New MoveIt Configuration Package」建立新的Configuration Package。

這裡有兩個選擇,一個是新建一個配置功能包,一個是使用已有的配置功能包。這裡我們選擇新建配置功能包,並在程式碼中找到urdf文件(seven_dof_arm.urdf)。如果已有配置功能包,那麼新建後會覆蓋原有的文件。

2. Generate Self-Collision Matrix
然後點擊左側的第二項配置步驟,配置自碰撞矩陣,MoveIt!可以讓我們設置一定數量的隨機採樣點,根據這些點生成配裝參數,可想而知,過多的點會造成運算速度慢,過少的點會導致參數不完善,默認的採樣點數量是10000個,官方稱經過實踐,要獲得不錯的效果,10000是最低要求,我們就按照這個預設值生成碰撞矩陣。

3. Add Virtual Joints
虛擬關節主要是用來描述機器人在world坐標系下的位置,如果機器人是移動的,虛擬關節可以與移動基座關聯,不過一般的機械臂都是固定不動的,所以也可以不需要虛擬關節。

4. Add Planning Groups
Planning Group用於描述機器人的不同部分,例如定義手臂或末端夾具部分。這一步可以將機器人的多個組成部分(links,joints)集成到一個Planning Group當中。之後Motion Planning會針對個別的Planning Group完成運動規劃,在規劃的過程中還可以選擇運動學解析器( kinematic solver)。

這裡創建兩個組,一個是機械臂部分(arm),一個是夾具部分(gripper)。

5. Add Robot Poses
Setup Assistant允許在配置中添加某些固定的姿勢(Pose),例如機器人的零點位置(Home)、初始位置等等,當然這些位置是用戶根據場景自定義的,不一定要和機器人本身的零點位置、初始位置相同。這樣做的好處就是我們使用MoveIt的API時,可以直接調用這些位置。

6. Label End Effectors
在添加了夾具的Planning Group之後,將這些群組指定為end-effectors可以在內部進行一些特殊操作。

7. Add Passive Joints
機器人上的某些關節可能在規劃控制的過程中不會使用到,可以先宣告出來。這裡沒有就不用管了。

8. Generate Configuration Files
最後一步,生成配置文件。一般會取名[robot_name]_moveit_config。這裡,會提示覆蓋已有的配置文件。

MotionPlanning

在完成配置之後即可退出 Setup Assistant,接著執行「demo.launch」看看:
$ roslaunch seven_moveit_config/launch/demo.launch


*若是要執行Motion Planning的話,還需要再執行「move_group.launch」,導入Planning Library:
$ roslaunch seven_moveit_config/launch/move_group.launch
  
這個介面是在rviz的基礎上加入了MoveIt Plugin,通過左下角的Plugin,我們可以選擇機械手臂的目標位置,進行運動規劃。或者拖動機械臂的前端,也可以改變機械臂的姿態。
在規劃頁面點擊「Plan and Execute」,MoveIt即會開始路徑規劃,並且可以看到機械臂開始向目標位置移動!


參考資料:
ROS MoveIt - tutorials
古月居 ROS探索总结—MoveIt基础
运动规划 (Motion Planning): MoveIt! 与 OMPL


2017年5月23日 星期二

VirtualBox與host分享資料夾

  在VirtualBox 5. 1的「虛擬機器(Virtual Machine) 」安裝作業系統以後,如果主電腦Host和虛擬機器的客體(Guest)作業系統之間要共用資料,必須設定「共用資料夾」。要使用「共用資料夾」,必須在虛擬機器安裝「Guest Additions」,詳細的操作說明如下:


1. 選擇裝置 -> 插入Guest Additions CD映像」。
 

2. 輸入使用者密碼。

3. 等待VirtualBox Guest Additions安裝完成。

4. 選擇裝置」 ->共用資料夾」 ->共用資料夾設定...」。

5. 設定"資料夾路徑",並且選擇自動掛載」&設為永久」,VirtualBox會自動將共用資料夾掛載於Guest Linux系統中/media/sf_資料夾名稱」。

6.  設定完成之後,可以輸入「sudo ln -s [共用資料夾路徑]    [連結路徑]」方便之後使用。



參考資料:
VirtualBox 4.1安裝Ubuntu 11.10與Windows 7共用資料夾
Error mounting VirtualBox shared folders in an Ubuntu guest

2017年5月18日 星期四

tortoisegit 常見錯誤: disconnected no supported authentication methods available

1. 在從github上面pull/push資料時遇到錯誤:
disconnected no supported authentication methods available(server sent: publickey) 


但經過確認之後發現,透過git bash操作並沒有問題。
確認是因為git和小烏龜有衝突,解决方法:
右鍵 --> 小烏龜 --> settings --> network --> 修改ssh client為git的"ssh.exe"即可。



2017年5月17日 星期三

ROS使用Dynamixel Package


●  對於Dynamixel 1.0 protocol的馬達,可以使用package [dynamixel-motor]。


1. $ sudo apt-get install ros-kinetic-dynamixel-motor
2. $ roslaunch dynamixel_tutorials contorller_manager.launch




●  但對於使 用Dynamixel 2.0 protocol的馬達,package dynamixel-motor會無法辨識。因此要改為使用dynamixel-workbench-controller



Step 1: Install ROS package
$ sudo apt-get install ros-kinetic-dynamixel-workbench-controller

Step 2: Create package
$ roscreate-pkg my_dynamixel_workbench_tutorial dynamixel_workbench_single_manager std_msgs roscpp

Step 3: Create a launch file for the single manager node
1. Make a launch file in ros package which we created
$ cd my_dynamixel_workbench_tutorial
$ mkdir launch
$ cd launch
$ vim single_manager.launch

2. Type or copy&paste code below to connect dynamixel_workbench_single manager packages and set parameters
<launch>
  <arg name="device_name" default="/dev/ttyUSB0"/>
  <arg name="baud_rate" default="115200"/>

  <param name="device_name"      value="$(arg device_name)"/>
  <param name="baud_rate"        value="$(arg baud_rate)"/>

  <node name="single_manager_tutorial" pkg="dynamixel_workbench_single_manager" type="dynamixel_workbench_single_manager" required="true" output="screen"/>
</launch>

3. Before we operating this package, we need to access permission for USB device
$ sudo chmod a+rw /dev/ttyUSB0

4. Now we can run tutorial package:
$ roslaunch my_dynamixel_workbench_tutorial single_manager.launch

Step 4: Check state of Dynamixel
Now, we can check a state of linked Dynamixel through /dynamixel_workbench_single_manager/motor_state topic:
$ rostopic echo /dynamixel_workbench_single_manager/motor_state


Step 5: Send command to Dynamixel
We operate a Dynamixel using command. Address names can be checked published message or using table command. 
 [CMD]torque_enable 1
 [CMD]goal_position 2048

#1. Run single_manager and single_manager_gui
And we run single_manager_gui:
$ rosrun dynamixel_workbench_single_manager_gui dynamixel_workbench_single_manager_gui

#2. Controlled by roscpp

github - test for ROS dynamixel_workbench_single_manager(set position)


參考資料:

2017年5月16日 星期二

Virtualbox使用USB設備

1. Virtualbox 主控程式預設並沒有安裝可以連接USB的程式模組,必須要另外到Virtualbox官網上的下載區來下載與安裝 Virtualbox Extension Pack。

PS. Virtualbox Extension Pack需要安裝與Virtualbox主控程式相同的版本。


2. 最後關閉所有程式號後再重新登入。重新開啟virtualbox的虛擬機器,就可以在USB中新增已連接的USB設備了。


3. 加入要使用的裝置












4. Linux對於USB裝置預設存取權限沒有開啟,可以用chmod每次自行開啟,或者修改USB預設權限。

$ sudo vim /etc/udev/rules.d/60-vboxadd.rules

貼上

KERNEL=="ttyUSB[0-9]*",NAME="tts/USB%n",GROUP="users",MODE="0666"


參考資料:

apt-get update異常處理

1. 問題描述 系統環境:Ubuntu 18.04.3 LTS 執行apt-get update更新時遇到如下狀況 錯誤訊息: Err:1 http://security.ubuntu.com/ubuntu bionic-security InRe...