日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ROS教程

發(fā)布時間:2024/8/1 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ROS教程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

一、ROS安裝

1、安裝虛擬機

2、安裝Ubuntu

3、安裝ROS

二、話題通信

概念:

1、理論模型:

?

2、基本操作(python)

流程:

?3、實操

話題發(fā)布

話題訂閱

參考感謝:


一、ROS安裝

1、安裝虛擬機

VMare的下載與安裝

2、安裝Ubuntu

Ubuntu20.04安裝教程

3、安裝ROS

  • Ubuntu與ROS對應(yīng)版本
UbuntuROS
16.04Kinetic
18.04Melodic
20.04Noetic
  • 配置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
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
  • 更新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)境變量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc
  • 安裝構(gòu)建依賴
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
  • 初始化rosdep
sudo rosdep init rosdep update

二、話題通信

概念:

以發(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)
import rospy from std_msgs.msg import Stringdef doMsg(msg):rospy.loginfo("I heard:%s",msg.data)if __name__ == "__main__":#2.初始化 ROS 節(jié)點:命名(唯一)rospy.init_node("mn")#3.實例化 訂閱者 對象sub = rospy.Subscriber("shuai",String,doMsg,queue_size=10)#4.處理訂閱的消息(回調(diào)函數(shù))#5.設(shè)置循環(huán)調(diào)用回調(diào)函數(shù)rospy.spin()
  • 為python文件添加可執(zhí)行權(quán)限

?右擊scripts,點“在集成終端打開”

chmod +x *.py

ll查看是否成功添加可執(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ā)布消息

流程:

  • 先啟動鍵盤控制烏龜運動
命令行1:roscore 命令行2:rosrun turtlesim turtlesim_node 命令行3:rosrun turtlesim turtle_teleop_key(在3中可通過上下左右鍵控制烏龜運動)

?

  • ?獲取話題

通過計算圖查看話題為/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é)點,訂閱并打印烏龜位姿

流程:

  • 獲取話題
rostopic list
  • 獲取消息類型
rostopic type /turtle1/pose
  • 獲取消息格式
rosmsg info turtlesim/Pose

  • 編寫發(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é)

以上是生活随笔為你收集整理的ROS教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。