ROS系统 创建工作空间与功能包
ROS
- 學習目標:
- 學習內容:
- 使用環境
- 操作步驟:
- 基本命令
- 二、使用步驟
- 創建工作空間
- 編譯工作空間
- 創建功能包
- 使用C++執行程序
- 編寫源文件
- 編輯功能包下的 Cmakelist.txt文件
- 修改目標鏈接庫
- 編譯編寫源碼文件
- 設置環境變量
- 執行ROS功能包
- 使用Python執行程序
- 編寫源文件
- 編輯功能包下的 Cmakelist.txt文件
- 編譯編寫源碼文件
- 執行ROS功能包
- 總結
- 創建功能包
- 工作空間的覆蓋
- 配置變量環境
- 設置Python文件可執行權限
學習目標:
ROS 工作空間與功能包的創建
學習內容:
1、 創建工作空間
2、 創建功能包
3、 配置功能包
4、 編譯功能包
使用環境
- VMware Workstation Pro:15.5.0
- ubuntu:18.04.5
- ROS:melodic
- Python:3.6.9
- gcc:7.5.0
操作步驟:
ROS中的程序即使使用不同的編程語言,實現流程大致如下:
基本命令
- cd [file_name]:進入某一文件路徑
- cd … :返回上一級目錄
- ls:列出當前路徑下的所有文件
- rospack find [package_name]:返回所要找的包的路徑
- roscd:將當前路徑設置為某一個 ROS 包或棧的路徑或其子路徑
- pwd:顯示出當前
- roscd log:將路徑設置為 ROS 存儲日志文件的路徑。
- rosls [locationname[/subdir]]:直接將路徑改為某個包下的某個子目錄
- TAB鍵,相當于Eclipse里面的 ALT+/。但沒有ALT+/ 功能那么強大,只能在路徑唯一時才會自動出來。
二、使用步驟
創建工作空間
mkdir -p ~/工作空間名稱/src例如:創建一個名稱為 catkin_ws 的工作空間
mkdir -p ~/catkin_ws/src
進入到創建的 catkin_ws 工程目錄中
初始化了工作空間,創建了一個 catkin_ws 空間,在該空間下有一個 src 文件夾
catkin_init_workspace初始化工作空間后,會在src目錄中生成一個 CMakeLists.txt 文件,生成這個文件說明當前路徑已經是ROS的工作空間了。
編譯工作空間
注:在編譯工作空間時,需要在工作空間的根目錄執行編譯命令。
cd ~/catkin_ws/編譯工作空間下所有功能包的源碼。
catkin_make
編譯完成后會生成 build 和 devel文件夾。
build文件夾中的內容,存放編譯的二進制文件。
devel文件夾中的內容,存放開發中的可執行文件和庫
此時還缺少一個 install 文件夾,需要執行以下指令,便可自動生一個 install 文件夾。
install 文件夾中的內容,用來存放著編譯后的可執行文件。
工作空間是一個存放工程開發相關文件的文件夾。
- src:代碼空間
- build:編譯空間
- devel:開發空間
- install:安裝空間
創建功能包
cd ~/catkin_ws/src catkin_create_pkg test_pkg std_msgs rospy roscpp上述命令,會在工作空間下生成一個功能包,該功能包依賴于 rospy 、roscpp與std_msgs
- roscpp:使用C++實現的庫
- rospy:使用Python實現的庫
- std_msgs :標準消息庫
創建ROS功能包時,一般都會依賴這三個庫實現。
test_pkg中的內容
- src:存放自己寫的源碼。
- include:C++代碼頭文件,可以存放在這里
使用C++執行程序
編寫C++文件放在 test_pkg 功能包的 src目錄下
編寫源文件
helloworld_c.cpp文件內容
// 1.包含 ros 的頭文件 #include "ros/ros.h"//2.編寫 main 函數 int main(int argc, char *argv[]){// 3.初始化ros節點ros::init(argc, argv, "hello_node"); // 定義節點名稱// 4.輸出日志ROS_INFO("hello world");// 4.輸出日志return 0; }編輯功能包下的 Cmakelist.txt文件
# add_executable(${PROJECT_NAME}_node src/test_pkg_node.cpp)修改為
add_executable(hello src/helloworld_c.cpp)- 第一個參數:自定義名稱
- 第二參數:指定src目下的cpp文件
修改目標鏈接庫
把以下代碼
改為這樣
target_link_libraries(hello${catkin_LIBRARIES} )注:hello 為 add_executable()第一個參數映射的名稱。
注:如果實在找不到這兩個地方,可以從上面把配置信息 粘貼到 CMakeLists.txt文件中的任意空白位置。
修改完這兩步以后,保存配置文件。
編譯編寫源碼文件
cd ~/catkin_ws再次編譯工作空間。
catkin_make設置環境變量
讓系統能夠找到該工作空間,需要設置環境變量。
source devel/setup.bash或
source ~/catkin_ws/devel/setup.bash以上兩種方式都可以設置環境變量
檢查環境變量
echo $ROS_PACKAGE_PATH執行ROS功能包
啟動ROS Master
roscore
執行編寫的源文件
- test_pkg:為剛創建的功能包名
- hello:為CMakeLists.txt文件下配置的 add_executable() 映射的cpp文件名
執行成功后輸出 hello world
使用Python執行程序
創建存放Python代碼的目錄
cd ~/catkin_ws/src/test_pkg創建 scripts 文件夾
mkdir scripts編寫Python文件放在 test_pkg 功能包的 scripts 目錄下
cd scripts編寫源文件
創建 helloworld_p.py Python文件
touch helloworld_p.py #!/usr/bin/env python # -*- coding: utf-8 -*- ##指定解釋器#1.導包 import rospy#2.編寫主入口 if __name__ == '__main__':#3.初始化ROS節點rospy.init_node("hello_world");# 4.輸出日志rospy.loginfo("Hello Python!")
通過以下命令查看Python文件的權限
為 Python文件 添加執行權限
添加權限后,Python文件可以被執行。
編輯功能包下的 Cmakelist.txt文件
# catkin_install_python(PROGRAMS # scripts/my_python_script # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} # )修改為
catkin_install_python(PROGRAMSscripts/helloworld_p.pyDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} )
設置環境變量
編譯編寫源碼文件
cd ~/catkin_ws再次編譯工作空間。
catkin_make執行ROS功能包
啟動ROS Master
roscore執行編寫的源文件
cd ~/catkin_ws rosrun test_pkg helloworld_p.py rosrun 包名 自定義文件名.py執行成功后輸出 hello Python!
總結
創建功能包
- 同一個工作空間下,不允許存在同名功能包
- 不同工作空間下,允許存在同名功能包。
工作空間的覆蓋
- 工作空間的路徑依次在ROS_PACKAGE_PATH環境變量中記錄
- 新設置的路徑在ROS_PACKAGE_PATH中會自動放置在最前端
- 運行時,ROS會有限查找最前端的工作空間中是否存在指定的功能包
- 如果不存在,就順序向后查找其他工作空間
配置變量環境
source ~/工作空間/devel/setup.bash 可以添加進 .bashrc 文件
- 添加方式1:直接使用gedit或vi編輯.bashrc 文件,文件末尾添加該內容。
- 添加方式2:echo “source ~/工作空間/devel/setup.bash” >> ~/.bashrc
設置Python文件可執行權限
- 第一種方式:chmod +x helloworld_p.py
- 第二種方式:
打開文件的屬性,找到 權限 一欄,然后勾選 - 允許將文件作為程序執行
總結
以上是生活随笔為你收集整理的ROS系统 创建工作空间与功能包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ROS系统 常用命令行工具的使用
- 下一篇: ROS系统 用Python或C++实现发