一.自己寫代碼運行
步驟:
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自己選擇啓動項