ros學習筆記一(古月居21講)

一.自己寫代碼運行

步驟:
1. 創建工作空間
mkdir catkin_ws
或者mkdir -p ~/catkin_ws/src(創建了文件夾catkin_ws和src)
cd catkin_ws
mkdir src
cd src
catkin_init_workspace:初始化文件夾改變屬性使其變成一個工作空間
(直接右鍵新建文件夾然後在src文件夾下打開終端輸入這句話也行)
cd …
cd catkin_ws
catkin_make 編譯產生deve(開發空間放置開發過程中的可執行文件和庫)l和build(編譯過程中的編譯文件二進制文件)
catkin_make install 產生install(開發後的可執行文件)文件夾
2. 創建功能包(在src中)
在src中創建一個pkg:
(1)catkin_create_pkg 包名+依賴(roscpp rospy std_msgs(消息)右鍵新建也行但是創建功能包的依賴沒有所以還得catkin_create_pkg)
(2)配置環境source ~/catkin_ws/devel/setup.bash(編譯之後系統才知道去哪裏找這pkg) 這句話只適用於當前終端,想要適應所有終端需要把這句話加到.bashrc文件中 錯誤2環境變量要設置,不能只適用於當前窗口的要用全局的: echo “source ~/catkin_ws/devel/setup.bash”>> ~/.bashrc也可以打開主目錄下的.bashrc隱藏文件(ctrl+h)把這句話加進去
在這裏插入圖片描述
3. 創建自定義話題或者服務
服務數據的定義,根據自己需求。發佈訂閱是一直髮不管接不接收,請求應答是有請求時才發佈,而且有應答。

string name
uint8 ageuint8 
sex uint8
 unknown =0
 uint8 male =1
 uint8 female =2
  ---
 string result
 

三個短橫線以上爲request以下爲respons
(1) 在功能包中創建msg或者srv文件夾,創建.msg文件數據接口定義
錯誤:注意名稱的大小寫否則編譯時找不到,大小寫是不同的文件
完成數據接口定義創建文件touch person.msg或者gedit person.msg
(2)定義規則:
1.在xml中添加功能包的依賴
<build_depend>message_generation</build_depend> 編譯依賴:動態產生message的功能包<exec_depend>message_runtime</exec_depend> 運行依賴
在這裏插入圖片描述
2.在cmakelist.txt中添加編譯選項
設置需要編譯的代碼和生成的可執行文件
設置鏈接庫
添加依賴項與自定義的消息連接時必須添加
(1)剛剛添加了運行依賴的功能包,在findpackage這裏也要添加
(2)把.msg文件編譯成運行時依賴的包
(3)添加創建運行的依賴

1.add_executable(person_publisher src/person_publisher.cpp)
2.target_link_libraries(person_publisher ${catkin_LIBRARIES}) 3.add_dependencies(person_publisher ${PROJECT_NAME}_generate_messages_cpp) 1.add_executable(person_subscriber src/person_subscriber.cpp)
2.target_link_libraries(person_subscriber ${catkin_LIBRARIES}) 3.add_dependencies(person_subscriber ${PROJECT_NAME}_generate_messages_cpp)
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
4.回到工作空間編譯
catkin_make
生成頭文件
位置在catkin_ws/devel/include/功能包名
在這裏插入圖片描述
5. 在功能包的src中創建編寫代碼
.cpp或者在文件夾scripts中創建.py (錯誤1.py的屬性裏面權限一定要爲可執行)
在這裏插入圖片描述
創建方法gedit +文件名例如gedit velocity_publisher.cpp,或者用touch +文件名,或者右鍵新建空白文檔也行。)

6. 配置cmakelist.txt的編譯規則learning_topic的
在build編譯那一塊的底部添加
(1)add_executable(person_publishersrc/person_publisher.cpp) #(person_publisher爲代碼的名字)-----把cpp編譯成可執行文件,位置在devel/lib之中
(2)target_link_libraries(person_publisher ${catkin_LIBRARIES}) #把可執行文件與ros做鏈接
1.add_executable(person_subscriber src/person_subscriber.cpp)
2. target_link_libraries(person_subscriber ${catkin_LIBRARIES})
在這裏插入圖片描述
7.回到工作空間catkin_make
設置環境變量echo “source ~/catkin_ws/devel/setup.bash”>> ~/.bashrc
生成可執行文件位置在catkin_ws/devel/lib/功能包名
在這裏插入圖片描述
8.運行代碼rosrun 功能包名+節點名(.py可直接執行)rosrun learning_topic velocity_publisher這是c++的運行c++一定要配置編譯規則纔可以(生成的文件在devel/lib/自己的功能包)rosrun learning_topic velocity_publisher.py 這是.py的運行(創建時一定要保證python的文件屬性中權限爲可執行,

二.命令行的使用

1、
rosnode
rosnode list:顯示節點信息
rosnode info +節點名:顯示具體信息
rostopic list 顯示話題列表
rostopic pub+話題名(-r 10 表示循環頻率一秒十次,加在pub後面)
rosparam list 參數列表
rosparam get +參數名 顯示參數值
rosparam set +參數名+要更改的值 更改某個參數的值
rosparam dump +自己想保存的文件名.xml
rosparam load +param.xml 然後再刷新就變成更改過得xml的類型了
rosservice call /clear “{}” 請求更改剛剛設置的參數
在這裏插入圖片描述

在這裏插入圖片描述

sudo apt-get install ros-melodic-turtle-tf

roslaunch turtle_tf turtle_tf_demo.launch

rosrun tf view_frames可視化看到系統中所有tf之間的關係保存在主目錄下的,pdf文件。

rosrun tf tf_echo turtle1 turtle2  查看兩個座標系之間的變換
roscoreRosrun rviz rviz -d ’rospack find turtle_tf ‘/rviz/turtle_rviz.rviz

在這裏插入圖片描述
2.tf座標系廣播與監聽的編程實現
創建learning_tf功能包
在src中編寫代碼turtle_tf_broadcaster.cpp或者.py
配置編譯規則
編譯catkin_make
roscore
rosrun turtlesim turtlesim_node
rosrun learning_tf turtle_tf_broadcaster __name:=turtle1_tf_broadcaster /turtle1
rosrun learning_tf turtle_tf_broadcaster __name:=turtle2_tf_broadcaster /turtle2
rosrun learning_tf turtle_tf listenerRosrun turtlesim turtle_teleop_key
以上相當於上一節
roslaunch turtle_tf turtle_tf_demo.launch
3.launch啓動文件的使用方法
Launch文件:通過xml文件實現多節點的配置和啓動(可自動啓動ros master)
創建功能包
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
編寫launch文件
(1)簡單的啓動兩個節點

<launch> 
    <node pkg="learning_topic" type="person_subscriber" name="talker" output="screen" />      
    <node pkg="learning_topic" type="person_publisher" name="listener" output="screen" />
</launch>

(2)用launch文件配置參數

<launch>
   <param name="/turtle_number"   value="2"/>    
   <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">  
   <param name="turtle_name1"   value="Tom"/>  
   <param name="turtle_name2" value="Jerry"/>  
   <rosparam file="$(find learning_launch)/config/param.yaml" command="load"/> 
   </node>   搜索功能包    
   <node    pkg="turtlesim"   type="turtle_teleop_key"    name="turtle_teleop_key" output="screen"/>          啓動鍵盤控制
</launch>                                     

(3)啓動海龜監聽

<launch>
     <!-- Turtlesim Node-->    
     <node pkg="turtlesim" type="turtlesim_node" name="sim"/>
     <node pkg="turtlesim" type="turtle_teleop_key" name="teleop" output="screen"/>
      <node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle1" name="turtle1_tf_broadcaster" />   
      <node pkg="learning_tf" type="turtle_tf_broadcaster" args="/turtle2" name="turtle2_tf_broadcaster" />    
      <node pkg="learning_tf" type="turtle_tf_listener" name="listener" /> </launch>

(4)

<launch> 

     <include file="$(find learning_launch)/launch/simple.launch" />  通過這句話包含了simple.launch文件 
     <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node">		
           <remap from="/turtle1/cmd_vel" to="/cmd_vel"/>   話題名更改
    </node>
</launch>

編譯catkin_make
運行自己編寫的launch文件
roslaunch learning_launch simple.launch
4.常用可視化工具的使用
1.Qt工具箱
Rqt 綜合工具
rqt_bag rqt_dep rqt_image_view顯示攝像頭圖像(插入攝像頭並運行) rqt_plot繪製數據曲線
在這裏插入圖片描述
rqt_console日誌輸出工具
在這裏插入圖片描述
rqt_graph節點間通信顯示 rqt_logger_level
rqt_shell
rqt綜合工具箱
在這裏插入圖片描述

2.rviz
roscore
rosrun rviz rviz
在這裏插入圖片描述
3.Gazebo
仿真與rviz不同他可以自己創建數據,rviz必須有數據纔行
編輯虛擬機把3d加載取消掉就可以打開了roslaunch gazebo_ros 按tab自己選擇啓動項
在這裏插入圖片描述 在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章