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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ROS教程

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

目錄

一、ROS安裝

1、安裝虛擬機

2、安裝Ubuntu

3、安裝ROS

二、話題通信

概念:

1、理論模型:

?

2、基本操作(python)

流程:

?3、實操

話題發布

話題訂閱

參考感謝:


一、ROS安裝

1、安裝虛擬機

VMare的下載與安裝

2、安裝Ubuntu

Ubuntu20.04安裝教程

3、安裝ROS

  • Ubuntu與ROS對應版本
UbuntuROS
16.04Kinetic
18.04Melodic
20.04Noetic
  • 配置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
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
  • 更新apt

apt是用于從互聯網倉庫搜索、安裝、升級、卸載軟件或操作系統的工具。

sudo apt update
  • 安裝ROS

這里安裝的是完整桌面版(Desktop-Full,官網推薦):除了桌面版的全部組件外,還包括2D/3D模擬器(simulator)和2D/3D 感知包(perception package)。

sudo apt install ros-noetic-desktop-full

這里需要長時間等待,由于網絡原因,導致連接超時,可能會安裝失敗,可以多次重復調用?更新和?安裝?命令

  • 配置環境變量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc
  • 安裝構建依賴
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
  • 初始化rosdep
sudo rosdep init rosdep update

二、話題通信

概念:

以發布訂閱的方式實現不同節點之間數據交互的通信模式,適用于不斷更新的數據傳輸相關的應用場景

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

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

chmod +x *.py

ll查看是否成功添加可執行權限

  • 編輯配置文件

CTRL+/ 放開這段注釋,并將my_python_script改為python文件名(此處為pub_p.py)

  • 編譯并執行

快捷鍵CTRL+shift+B,輸入catkin_make:build進行編譯

ctrl+Alt+T打開終端,輸入roscore啟動ros核心,另兩個終端輸入rosrun +包名 +python文件名


3、實操

話題發布

需求:編碼實現烏龜運動控制,讓小烏龜做圓周運動

分析:自定義控制節點,按照一定的邏輯發布消息

流程:

  • 先啟動鍵盤控制烏龜運動
命令行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。

  • 創建功能包

右擊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命令來獲取烏龜位姿發布的話題以及消息,編寫訂閱節點,訂閱并打印烏龜位姿

流程:

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

  • 編寫發布方

在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

?注:后面還會持續更新

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。