ROS中階筆記(三):機器人模擬—ArbotiX+rviz功能模擬
ROS中階筆記(三):機器人模擬—ArbotiX+rviz功能模擬
目錄
01 機器人URDF模型優化—xacro模型檔案
1.1 xacro模型檔案
URDF模型的進化版本—xacro模型檔案
xacro裡面的模型仍然是urdf模型,但是從整個模型的管理上發生了很大的變化
- 精簡模型程式碼
1、建立巨集定義
2、檔案包含 - 提供可程式設計介面
1、常量
2、變數
3、數學計算
4、條件語句
1.2 xacro使用方法
1.常量定義
<xacro:property name="M_PI" value="3.14159"/>
2.常量使用
<origin xyz="0 0 0" rpy="${M_PI/2} 0 0"/>
3.數學計算
注意:所有數學運算都會轉換成浮點數進行,以保證運算精度
<origin xyz="0 ${(motor_length+wheel_length)/2} 0" rpy="0 0 0"/>
4.巨集定義
<xacro:macro name="name" params="A B C">
...... # ······填寫具體模型定義(類似函式內容)
</xacro:macro>
5.巨集呼叫
<name A="A_value" B="B_value" C="C_value" />
6.檔案包含
<xacro:include filename="$(find mbot_descripiton)/urdf/xacro/mbot_base.xacro" />
1.3 模型顯示
~/catkin_ws/src/mbot_description/urdf/xacro 下 mbot_base.xacro
檔案不能單獨執行,還需要實現一個上層檔案mbot.xacro
來實現;
方法一: 將xacro檔案轉化成URDF檔案後顯示 (不常用)
在~/catkin_ws/src/mbot_description/urdf/xacro 下,執行下面命令:
$ rosrun xacro xacro.py mbot.xacro>mbot.urdf
# 出現警告忽略,看到生成mbot.urdf檔案
方法二:直接呼叫xacro檔案解析器,解析成機器人模型 (常用)
在~/catkin_ws/src/mbot_description/launch/xacro下 可以看到display_mbot_base_xacro.launch
檔案
<arg name="model" default="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/mbot.xacro'" />
<arg name="gui" default="true" />
<param name="robot_description" command="$(arg model)" />
$ roslaunch mbot_description display_mbot_base_xacro.launch
02 ArbotiX+rviz功能模擬
參見:http://wiki.ros.org/arbotix
2.1 Arboti簡介
- ArbotiX是一款控制電機、舵機的硬體控制板;
- 提供了相應的ROS功能包;
- 提供了一個差速控制器,通過接收速度控制指令,更新機器人的里程計狀態。
2.2 安裝Arbotix
arbotix_ros
檔案放在catkin_ws/src/
資料夾下:
$ cd ~/catkin_ws/src
$ git clone https://github.com/vanadiumlabs/arbotix_ros.git #放在catkin_ws/src/資料夾下
$ cd ~/catkin_ws
# 下面兩種方法編譯
$ catkin_make # 編譯arbotix_ros
$ catkin_make -DCATKIN_WHITELIST_PACKAGES="arbotix_ros"
注意:arbotix_ros中的python檔案需要新增可執行許可權;
python檔案新增可執行許可權,滑鼠右鍵—屬性—許可權—執行:√允許作為程式執行檔案(E);
2.3 配置ArbotiX控制器
第一步:配置launch檔案
~/catkin_ws/src/mbot_description/launch/xacro/下arbotix_mbot_with_camera_xacro.launch
可以看出它其實跟之前的launch檔案是差不多的,只是多了一個啟動 arbotix_python 節點的命令,這個檔案在之前下的啟動 arbotix_ros中可以找到,如果這裡節點啟動失敗可以找到該檔案,右鍵屬性檢視可執行許可權,python檔案需要新增可執行許可權才能執行。
<launch>
<arg name="model" default="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/mbot_with_camera.xacro'" />
<arg name="gui" default="false" />
<param name="robot_description" command="$(arg model)" />
<!-- 設定GUI引數,顯示關節控制外掛 -->
<param name="use_gui" value="$(arg gui)"/>
<!-- 啟動 arbotix_python 節點-->
<node name="arbotix" pkg="arbotix_python" type="arbotix_driver" output="screen">
<!-- 載入控制器引數-->
<rosparam file="$(find mbot_description)/config/fake_mbot_arbotix.yaml" command="load" />
<param name="sim" value="true"/>
</node>
<!-- 執行joint_state_publisher節點,釋出機器人的關節狀態 -->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
<!-- 執行robot_state_publisher節點,釋出tf -->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
<!-- 執行rviz視覺化介面 -->
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot_arbotix.rviz" required="true" />
</launch>
第二步:建立配置檔案
~/catkin_ws/src/mbot_description/config/下fake_mbot_arbotix.yaml
這是一個引數配置檔案,定義了一個controller。包括了控制器型別、控制的車體座標系、輪子的間距、控制頻率、PID以及加速度等引數
controllers: {
base_controller: {
type: diff_controller,
base_frame_id: base_footprint,
base_width: 0.26,
ticks_meter: 4100,
Kp: 12,
Kd: 12,
Ki: 0,
Ko: 50,
accel_limit: 1.0
}
}
第三步:啟動模擬器
$ roslaunch mbot_description arbotix_mbot_with_camera_xacro.launch
第四步:啟動鍵盤控制(再開一個新終端)
$ roslaunch mbot_teleop mbot_teleop.launch
# i小車向前, u轉向···
odom里程計座標系,是一個全域性座標系;通過里程計記錄機器人當前的運動位姿
2.4 ArbotiX+rviz—導航模擬示例
參考:《ROS by example》
1.安裝一下turtlebot,輸入下列安裝命令:
$ sudo apt-get install ros-kinetic-turtlebot-*
2.安裝arbotix模擬器:
$ sudo apt-get install ros-kinetic-arbotix-*
這裡沒有執行上面的rviz的安裝是因為在安裝ROS的時候預設已經安裝好了,不需要重複安裝。
3.安裝ROS by example書配套的程式碼包rbx1
cd ~/catkin_ws/src
git clone https://github.com/pirobot/rbx1.git
cd ..
catkin_make
4.分別在三個終端執行以下程式碼:
$ roslaunch rbx1_bringup fake_turtlebot.launch
$ roslaunch rbx1_nav fake_amcl.launch map:=test_map.yaml
$ rosrun rviz rviz -d `rospack find rbx1_nav`/nav.rviz
執行結果:點選rviz畫面中的2D Nav Goal ,之後隨便標記地圖中的一點,小車可以根據路徑規劃進行導航,到達目的地。
03 問題解決
3.1 問題一:ImportError: No module named arbotix_msgs.msg
2.3 配置ArbotiX控制器中
第三步:啟動模擬器
$ roslaunch mbot_description arbotix_mbot_with_camera_xacro.launch
這裡在開啟上一個launch檔案的時候出現了一個問題:缺少依賴項
ImportError: No module named arbotix_msgs.msg
解決方法:
不要 sudo apt-get安裝,把原始碼包下載下來,編譯;
順便重新整理下空間
$ source ~/catkin_ws/devel/setup.bash
04 參考資料
ROS xacro使用方法: http://wiki.ros.org/xacro
古月居:https://www.guyuehome.com/237
微信公眾號:喵哥解說
公眾號介紹:主要研究機器學習、計算機視覺、深度學習、ROS等相關內容,分享學習過程中的學習筆記和心得!期待您的關注,歡迎一起學習交流進步!同時還有1200G的Python視訊和書籍資料等你領取!!!