ROS教程
目錄
一、ROS安裝
1、安裝虛擬機
2、安裝Ubuntu
3、安裝ROS
二、話題通信
概念:
1、理論模型:
?
2、基本操作(python)
流程:
?3、實操
話題發布
話題訂閱
參考感謝:
一、ROS安裝
1、安裝虛擬機
VMare的下載與安裝
2、安裝Ubuntu
Ubuntu20.04安裝教程
3、安裝ROS
- Ubuntu與ROS對應版本
| Ubuntu | ROS |
| 16.04 | Kinetic |
| 18.04 | Melodic |
| 20.04 | Noetic |
- 配置Ubuntu的軟件和更新
?打開“軟件和更新”對話框后,按下圖配置?
?
- 設置安裝源
快捷鍵Ctrl?+?Alt?+?T打開一個終端
來自國內清華的安裝源:
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'回車后需要輸入管理員密碼(注:此時輸入密碼時不會顯示密碼長度)
- 設置Key
- 更新apt
apt是用于從互聯網倉庫搜索、安裝、升級、卸載軟件或操作系統的工具。
sudo apt update- 安裝ROS
這里安裝的是完整桌面版(Desktop-Full,官網推薦):除了桌面版的全部組件外,還包括2D/3D模擬器(simulator)和2D/3D 感知包(perception package)。
sudo apt install ros-noetic-desktop-full這里需要長時間等待,由于網絡原因,導致連接超時,可能會安裝失敗,可以多次重復調用?更新和?安裝?命令
- 配置環境變量
- 安裝構建依賴
- 初始化rosdep
二、話題通信
概念:
以發布訂閱的方式實現不同節點之間數據交互的通信模式,適用于不斷更新的數據傳輸相關的應用場景
1、理論模型:
- ?ROS Master(管理者)
- Talker(發布者)
- Listener(訂閱者)
管理者負責保管發布者和訂閱者注冊的信息,并匹配話題相同的發布者和訂閱者,幫助其建立連接,連接建立后,訂閱者可以接收到發布者發布的消息。
2、基本操作(python)
需求:編寫發布訂閱實現,要求發布方以10HZ的頻率發布文本消息,訂閱方訂閱消息并將消息內容打印輸出。
流程:
- 創建工作空間并初始化
CTRL+Alt+T打開命令行
輸入mkdir -p 工作空間名/src
mkdir -p practice/src?進入工作空間
cd practice/ catkin_make?此命令后會生成與src同級的devel和build文件夾
|--- build:編譯空間,用于存放CMake和catkin的緩存信息、配置信息和其他中間文件。|--- devel:開發空間,用于存放編譯后生成的目標文件,包括頭文件、動態&靜態鏈接庫、可執行文件等。|--- src: 源碼?
- 在vs code 中打開該文件夾
- 創建功能包
右擊src,新建功能包(Create Catkin Package),輸入功能包名字(此處是pub_sub)
?導入依賴
roscpp rospy std_msgs?
?
- 編寫發布方實現
右擊第一級src,創建文件夾srcipts,然后右擊srcipts創建文件,取名后綴加上.py。
開始編寫:
#! /usr/bin/env pythonimport rospy from std_msgs.msg import String #發布消息的類型 """ 使用Python實現消息發布:1.導包2.初始化ros節點3.創建發布者對象4.編寫發布邏輯并發布數據 """ if __name__=="__main__":#2.初始化ros節點rospy.init_node("sg") #傳入節點名稱#3.創建發布者對象pub = rospy.Publisher("shuai",String,queue_size=10)#4.編寫發布邏輯并發布數據#創建數據msg = String()msg_front = "hello"count = 0 #計數器 # 設置循環頻率rate = rospy.Rate(1)while not rospy.is_shutdown():#拼接字符串msg.data = msg_front + str(count)pub.publish(msg)rate.sleep()rospy.loginfo("發布的數據:%s",msg.data)count += 1- 編寫訂閱方實現
- 為python文件添加可執行權限
?右擊scripts,點“在集成終端打開”
chmod +x *.pyll查看是否成功添加可執行權限
- 編輯配置文件
CTRL+/ 放開這段注釋,并將my_python_script改為python文件名(此處為pub_p.py)
- 編譯并執行
快捷鍵CTRL+shift+B,輸入catkin_make:build進行編譯
ctrl+Alt+T打開終端,輸入roscore啟動ros核心,另兩個終端輸入rosrun +包名 +python文件名
3、實操
話題發布
需求:編碼實現烏龜運動控制,讓小烏龜做圓周運動
分析:自定義控制節點,按照一定的邏輯發布消息
流程:
- 先啟動鍵盤控制烏龜運動
?
- ?獲取話題
通過計算圖查看話題為/turtle1/cmd_vel
rqt_graph?
?獲取消息類型為geometry_msgs/Twist
rostopic type /turtle1/cmd_vel然后獲取消息格式
rosmsg info geometry_msgs/Twist?linear為線速度,對于烏龜來說只用改x;angular為角速度,對于烏龜來說只用改z。
- 創建功能包
右擊src,新建功能包(Create Catkin Package),輸入功能包名字(此處是plumbing_test)
添加依賴:roscpp rospy std_msgs geometry_msgs
- 編寫發布方
在plumbing_test下的scripts創建python文件,開始編寫
#! /usr/bin/env pythonfrom mimetypes import init import rospy from geometry_msgs.msg import Twist """發布方:發布速度消息話題:/turtle1/cmd_vel消息:geometry_msgs/Twist1.導包2.初始化ros節點3.創建發布者對象4.組織數據并發布數據 """if __name__ =="__main__":#2.初始化ros節點rospy.init_node("my_control_p")#3.創建發布者對象pub = rospy.Publisher("/turtle1/cmd_vel",Twist,queue_size=10)#4.組織數據并發布數據#設置發布頻率rate = rospy.Rate(10)#創建速度消息twist = Twist()twist.linear.x = 0.5twist.linear.y = 0.0twist.linear.z = 0.0twist.angular.x=0.0twist.angular.y=0.0twist.angular.z=0.5#循環發布while not rospy.is_shutdown():pub.publish(twist)rate.sleep()- ?為python文件添加可執行權限
右擊scripts,點“在集成終端打開”
chmod +x *.py- 編輯配置文件
CTRL+/ 放開這段注釋,并將my_python_script改為python文件名(此處為test01_pub_twist_p.py)
注:后面訂閱方編輯也是此處
- 編譯并執行
快捷鍵CTRL+shift+B,輸入catkin_make:build進行編譯
?打開終端
命令行1:roscore 命令行2:rosrun turtlesim turtlesim_node 命令行3:cd 自定義包名source ./devel/setup.bash 刷新環境變量rosrun 工作空間名 python文件名?
?
話題訂閱
需求:控制烏龜運動,并實時打印當前烏龜的位姿
分析:控制烏龜運動,并通過ros命令來獲取烏龜位姿發布的話題以及消息,編寫訂閱節點,訂閱并打印烏龜位姿
流程:
- 獲取話題
- 獲取消息類型
- 獲取消息格式
- 編寫發布方
在plumbing_test下的scripts創建python文件,開始編寫
#! /usr/bin/env python import rospy from turtlesim.msg import Pose""" 需求:訂閱并輸出烏龜位姿信息1.導包 2.初始化ros節點 3.創建訂閱對象 4.使用回調函數處理訂閱到的消息 5.spin() """ def doPose(pose):rospy.loginfo("P->烏龜位姿信息:坐標(%.2f,%.2f),朝向:%.2f,線速度:%.2f,角速度:%.2f",pose.x,pose.y,pose.theta,pose.linear_velocity,pose.angular_velocity)if __name__=="__main__":# 2.初始化ros節點rospy.init_node("sub_pose_p")# 3.創建訂閱對象sub=rospy.Subscriber("/turtle1/pose",Pose,doPose,queue_size=100)# 4.使用回調函數處理訂閱到的消息# 5.spin()rospy.spin()- ?為python文件添加可執行權限
右擊scripts,點“在集成終端打開”
chmod +x *.py- 編輯配置文件
同上發布方
- 編譯并執行
快捷鍵CTRL+shift+B,輸入catkin_make:build進行編譯
打開終端
命令行1:roscore 命令行2:rosrun turtlesim turtlesim_node 命令行3:rosrun turtlesim turtle_teleop_key 命令行4:cd 自定義包名source ./devel/setup.bash 刷新環境變量rosrun 工作空間名 python文件名?
?
參考感謝:
趙虛左老師的課《ROS理論與實踐》
官網鎮樓:http://wiki.ros.org/cn
?注:后面還會持續更新
總結
- 上一篇: Go语言环境安装
- 下一篇: 【电子技术实验设计】简易水位控制器设计报