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