1. 程式人生 > 其它 >MoveIt 模擬 Gazebe 教程學習(五)

MoveIt 模擬 Gazebe 教程學習(五)

MoveIt 模擬 Gazebe 教程學習(五)

【古月居】

ROS探索總結(五)——建立簡單的機器人模型smartcar,網址如下:

https://www.guyuehome.com/243

還有相關的一系列文章都可以看看。

前提:

原始碼地址:https://github.com/huchunxu/ros_exploring 需要把裡面的 ROS2 資料夾刪除,它不能放在 ROS1 環境中。把 ros_exploring 放在home/wei/moveit_wei/src 裡面。

catkin_make檔案ros_exploring的流程:

 1 mkdir -p ~/moveit_wei2/src
 2 
3 cd ~/moveit_wei2/src/ 4 5 git clone http://github.com/plasmodic/ecto.git 6 7 sudo apt-get install libboost-python-dev libboost-filesystem-dev libboost-system-dev \ 8 libboost-thread-dev python-setuptools python-gobject python-gtk2 graphviz doxygen \ 9 python-sphinx 10 11 12 git clone https://
github.com/ros-interactive-manipulation/manipulation_msgs.git 13 14 git clone https://github.com/ros-interactive-manipulation/household_objects_database_msgs.git 15 16 cd ../ 17 18 catkin_make

問題1:

 1 -- Could NOT find ecto (missing: ecto_DIR)
 2 -- Could not find the required component 'ecto'. The following CMake error indicates that you either need to install the package with the same name or change your environment so that it can be found.
3 CMake Error at /opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake:83 (find_package): 4 Could not find a package configuration file provided by "ecto" with any of 5 the following names: 6 7 ectoConfig.cmake 8 ecto-config.cmake 9 10 Add the installation prefix of "ecto" to CMAKE_PREFIX_PATH or set 11 "ecto_DIR" to a directory containing one of the above files. If "ecto" 12 provides a separate development package or SDK, be sure it has been 13 installed. 14 Call Stack (most recent call first): 15 ros_exploring/robot_perception/ork_tutorials/CMakeLists.txt:4 (find_package) 16 17 18 -- Configuring incomplete, errors occurred! 19 See also "/home/wei/moveit_wei2/build/CMakeFiles/CMakeOutput.log". 20 See also "/home/wei/moveit_wei2/build/CMakeFiles/CMakeError.log". 21 Invoking "cmake" failed 22

解決:

1 cd ~/moveit_wei2/src
2 3 git clone http://github.com/plasmodic/ecto.git
4 5 sudo apt-get install libboost-python-dev libboost-filesystem-dev libboost-system-dev \
6         libboost-thread-dev python-setuptools python-gobject python-gtk2 graphviz doxygen \
7         python-sphinx

問題2:

 1 CMake Error at /opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
 2   Could not find a package configuration file provided by "move_base_msgs"
 3   with any of the following names:
 4  5     move_base_msgsConfig.cmake
 6     move_base_msgs-config.cmake
 7  8   Add the installation prefix of "move_base_msgs" to CMAKE_PREFIX_PATH or set
 9   "move_base_msgs_DIR" to a directory containing one of the above files.  If
10   "move_base_msgs" provides a separate development package or SDK, be sure it
11   has been installed.
12 Call Stack (most recent call first):
13   ros_exploring/robot_mrobot/mrobot_navigation/CMakeLists.txt:7 (find_package)
14 15 16 -- Configuring incomplete, errors occurred!
17 See also "/home/wei/moveit_wei2/build/CMakeFiles/CMakeOutput.log".
18 See also "/home/wei/moveit_wei2/build/CMakeFiles/CMakeError.log".
19 Invoking "cmake" failed
20

解決:

1 sudo apt-get install ros-melodic-move-base-msgs

問題3:

1 fatal error: alsa/asoundlib.h: 沒有那個檔案或目錄

解決:

1 sudo apt-get install libasound2-dev

問題4:

1 fatal error: boost/tr1/unordered_map.hpp: 沒有那個檔案或目錄
2  #include <boost/tr1/unordered_map.hpp>

解決:

1 1,進入到ecto的目錄下使用如下命令找到這兩個檔案
2 $ grep -r 'tr1'
3 ./src/lib/util.cpp:#include <boost/tr1/unordered_map.hpp>
4 ./src/lib/plasm/impl.hpp:#include <boost/tr1/unordered_map.hpp>
5 
6 
7 把tr1刪除,同時把程式碼裡的std::tr1::unordered_map欄位改成boost::unordered_map即可。


grep 命令,用於查詢檔案裡符合條件的字串。

vim 編輯檔案。

i 表示進入插入模式。

ESC 表示進入普通模式。

:wq 表示儲存並退出。

參考部落格:https://blog.csdn.net/ckkboy/article/details/99584987

問題5:

1 /usr/bin/ld: 找不到 -lmsc
2 collect2: error: ld returned 1 exit status

解決:

1 安裝boost

參考部落格:
https://blog.csdn.net/qq_32115101/article/details/89220824
https://blog.csdn.net/ckkboy/article/details/99584987

boost安裝和解除安裝:

1 $  sudo apt-get install libboost1.54-dev(安裝)
2 $ sudo apt-get autoremove libboost1.54-dev(解除安裝)

執行 sudo ./b2 的結果:

檢視版本:

1 dpkg -S /usr/include/boost/version.hpp

boost 版本結果:

問題6:

1 /home/wei/moveit_wei2/src/ecto/samples/experimental/necto.cpp:247:56: error: ‘boost::asio::ip::tcp::acceptor {aka class boost::asio::basic_socket_acceptor<boost::asio::ip::tcp>}’ has no member named ‘get_io_service’
2        connection_ptr new_conn(new connection(acceptor_.get_io_service()));

解決:

1 修改檔案/ecto/samples/experimental/necto.cpp第247行和第265行。

問題7:

1 error: ‘class boost::asio::io_context::strand’ has no member named ‘get_io_service’

解決:需要修改ecto/src/lib/strand.cpp,修改第95行的程式碼:

1 boost::asio::io_service& serv_inside_strand = thestrand->get_io_service(); //改前
2  boost::asio::io_context& serv_inside_strand = thestrand->context() ;  //改後

參考部落格:https://blog.csdn.net/u013013023/article/details/108715340

一、生成配置檔案

cp 命令 :把一個檔案拷貝到另一個目錄。

grep 命令:用於查詢檔案裡符合條件的字串。

/是指根目錄:就是所有目錄最頂層的目錄。

./表示當前目錄,./ 一般需要和其他資料夾或者檔案結合使用,指代當前目錄下的東西。

1 cd ..          切換到上級目錄   
2 cd ../資料夾    切換到上級目錄中的某個資料夾

參考連結:https://www.yisu.com/zixun/131889.html

make 是編譯。

make install 是安裝。

在linux系統中,使用vi編輯,在命令列模式(按ESC)下 按 u 是撤銷,相當於windows 下的ctrl+z。

取消上一步操作是 ctrl+r 相當於window下的 ctrl+y,有了這兩個快捷鍵操作起來就會方便很多。

參考部落格:https://blog.csdn.net/qq_31382921/article/details/77993860

1.建立模型

載入 urdf 模型:

虛擬關節:建立機械臂和世界座標系聯絡的部分,主要用於移動機械臂。

2.機械臂規劃組:有兩個控制組

第一個:六個關節

第二個:前爪:前端不需要運動學外掛。

選擇 KDL 運動學

3.自定義點位

初始點位:本教程設定名字為 home 。

4.終端夾具配置

5.消極關節

不需要考慮和計算的關節,就是叫做 消極關節,不需要去做配置。

6.作者資訊

package.xml包裡設定好 各個功能包的姓名和聯絡方式,使用別人的功能包可以通過package.xml包向別人請教問題。

7.生成配置檔案

把一系列的配置檔案放在 marm_moveit_config 資料夾裡面,之後可以直接 rosrun 這個資料夾即可。

生成的檔案有:

二、功能測試

1.階段一的模型可以生成一個 demo.launch 檔案,可以用這個檔案檢查配置流程是不是正確的。

啟動 demo.launch 檔案:

1 roslaunch marm_moveit_config demo.launch

MotionPlanning 是 MoveIt 外掛:

問題:

1 ==ROS-找不到launch檔案。==

解決辦法:

1 $   cd ~/catkin_ws/
2 
3 $   catkin_make
4 $   source devel/setup.bash
5 
6 $   echo $ROS_PACKAGE_PATH   /home/ideallic/catkin_ws/src:/opt/ros/indigo/share:/opt/ros/indigo/stacks
7 $   export | grep ROS

原理解釋:

來到工作空間下對工作空間進行編譯,並使用 source 命令配置環境變數。

出現這個報錯資訊的原因是工程中新建一個 launch 檔案後,沒有及時配置環境變數,導致 roslaunch 命令無法識別到新新增的 launch 檔案。

參考部落格:https://zhuanlan.zhihu.com/p/94971196

2.加入場景物體

下載Gazebo模型庫:

1 git clone https://github.com/osrf/gazebo_models

下載挺慢的,要十幾分鍾。

把 bowl.dae 加入到場景中。

問題:

.gazebo 資料夾沒顯示。

解決:

在頁面 ctrl + h 即可出現 .gazebo 資料夾。

三、完善模型

對urtf 和launch 檔案進行編寫等,不斷完善模型。

啟動模擬環境:

1 roslaunch marm_gazebo arm_world.launch

問題1:

1 [Err] [REST.cc:205] Error in REST request

解決:

1 sudo gedit ~/.ignition/fuel/config.yaml
2 
3 然後將  url : https://api.ignitionfuel.org   用 # 註釋掉
4 新增   url: https://api.ignitionrobotics.org  

問題2:

1 [gazebo_gui-2] process has died [pid 72816, exit code 134, cmd /opt/ros/melo

解決:

1 echo $ROS_PACKAGE_PATH 
2 
3 export SVGA_VGPU10=0
4 roslaunch marm_gazebo arm_world.launch

要使更改永久使用:

1 $ echo "export SVGA_VGPU10=0" >> ~/.bashrc

參考部落格:https://blog.csdn.net/xiaodingqq/article/details/86660902

四、ros_control

五、配置並載入控制器

啟動模擬環境:

1 roslaunch marm_gazebo arm_gazebo_control.launch

控制單軸運動:

1 rostopic pub /marm/joint2_position_controller/command std_msgs/Float64 1.0

RRBot栗子 可以學習到 Rviz 和 Gazebo 結合。

參考部落格:https://blog.csdn.net/weixin_43455581/article/details/10633422

監控機器人狀態::

1 rostopic echo /marm/joint_states

問題:

1 WARNING: topic [/marm/joint_states] does not appear to be published yet

沒有輸出正確的資訊,而是出現了警告。

六、MoveIt 和 Gazebo 整合

1 roscore
2 
3 echo $ROS_PACKAGE_PATH
4 
5 roslaunch marm_gazebo arm_bringup_moveit.launch

問題:

若在rviz中出現**global status:warn**警告,

則執行:

1 rosrun tf static_transform_publisher 0 0 0 0 0 0 map base_link 50

Rviz 新增模型,點選add新增robotmodel

第一次執行時rviz並不會正常顯示模型,需要設定一些配置

  1. 首先去到Display——Fixed Frame選則baselink

  2. 然後點選Add新增rviz——RobotModel

  3. 我這邊設定的尺寸有點大,記得縮放視野,在rviz視窗的右邊增加distance或者滑滾輪

  4. 再根據自己的喜好設定要顯示什麼資訊

如果不儲存config,以後重新開啟rviz都要重新設定一遍,因此可以點選file——save config as儲存到launch資料夾裡命名為config.rviz。再開啟之前的launch file ,把第9行改成

1 <node name="rviz" pkg="rviz" type="rviz" args="-d $(find RRrobot_description)/launch/config.rviz"/>

這樣以後都不用重新配置了。一下是rviz結果。

參考部落格:https://blog.csdn.net/mr_yu_1997/article/details/115429001

https://www.pianshen.com/article/3870319148/

七、如何使用MoveIt!控制機械臂運動?

1、使用者介面:

2、程式設計介面:

3、程式設計模式:

4、關節空間運動:

點到點運動:不需要在笛卡爾空間規劃末端運動軌跡,機器人各個關節運動不需要聯動。

5、設定關節角度: