日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ROS基础教程

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

文章目錄

  • 1. 簡介
    • 1.1. 系統架構
    • 1.2. 文件系統
    • 1.3. 計算圖
    • 1.4. Source
    • 1.5. helloworld
      • 1.5.1. C++ 實現
      • 1.5.2. Python 實現
  • 2. 通信
    • 2.1. 話題通信
      • 2.1.1. 簡介
      • 2.1.2. 理論模型
      • 2.1.3. C++ 實現
      • 2.1.4. Python 實現
      • 2.1.5. spinOnce 和 spin
      • 2.1.6. 話題同步
      • 2.1.7. 自定義 msg
      • 2.1.8. 自定義變長 msg
    • 2.2. 服務通信
      • 2.2.1. 簡介
      • 2.2.2. 理論模型
      • 2.2.3. 話題和服務
      • 2.2.4. 自定義 srv
      • 2.2.5. C++ 實現
      • 2.2.6. Python 實現
    • 2.3. 參數服務器
  • 3. 運行
    • 3.1. launch
      • 3.1.1. 運行
      • 3.1.2. 標簽
        • 3.1.2.1. launch
        • 3.1.2.2. node
        • 3.1.2.3. include
        • 3.1.2.4. remap
        • 3.1.2.5. param
        • 3.1.2.6. rosparam
        • 3.1.2.7. arg
        • 3.1.2.8. group

1. 簡介

ROS 全稱為 Robot Operating System (機器人操作系統)

  • ROS 是適用于機器人的開源元操作系統
  • ROS 集成了大量的工具,庫,協議,提供類似 OS 所提供的功能,簡化對機器人的控制
  • ROS 還提供了用于在多臺計算機上獲取,構建,編寫和運行代碼的工具和庫,ROS 在某些方面類似于“機器人框架”
  • ROS 設計者將 ROS 表述為 “ROS = Plumbing + Tools + Capabilities + Ecosystem”,即 ROS 是通訊機制、工具軟件包、機器人高層技能以及機器人生態系統的集合體

1.1. 系統架構

ROS 的系統架構可分為三層

  • OS 層,也即經典意義的操作系統。ROS 只是元操作系統,需要依托真正意義的操作系統,目前兼容性最好的是 Linux 的 Ubuntu,Mac、Windows 也支持 ROS 的較新版本
  • 中間層。是 ROS 封裝的關于機器人開發的中間件,比如:
    • 基于 TCP/UDP 繼續封裝的 TCPROS/UDPROS 通信系統
    • 用于進程間通信 Nodelet,為數據的實時性傳輸提供支持
    • 大量的機器人開發實現庫,如:數據類型定義、坐標變換、運動控制…
  • 應用層。功能包,以及功能包內的節點,比如: master、turtlesim的控制與運動節點。
  • 1.2. 文件系統

    WorkSpace --- 自定義的工作空間|--- build:編譯空間,用于存放CMake和catkin的緩存信息、配置信息和其他中間文件。|--- devel:開發空間,用于存放編譯后生成的目標文件,包括頭文件、動態&靜態鏈接庫、可執行文件等。|--- src: 源碼|-- CMakeLists.txt: 編譯的基本配置|-- package:功能包(ROS 基本單元)包含多個節點、庫與配置文件,包名所有字母小寫,只能由字母、數字與下劃線組成|-- CMakeLists.txt 配置編譯規則,比如源文件、依賴項、目標文件|-- package.xml 包信息,比如:包名、版本、作者、依賴項...(以前版本是 manifest.xml)|-- scripts 存儲 python 文件|-- src 存儲 C++ 源文件|-- include 頭文件|-- msg 消息通信格式文件|-- srv 服務通信格式文件|-- action 動作格式文件|-- launch 可一次性運行多個節點 |-- config 配置信息|-- package

    ROS 的文件系統本質上都還是操作系統文件,因此可以使用 Linux 命令來操作這些文件。不過,在 ROS 中為了更好的用戶體驗,ROS 專門提供了一些類似于 Linux 的命令,這些命令較之于 Linux 原生命令,更為簡潔、高效。

  • # 創建新的ROS功能包 catkin_create_pkg 自定義包名 依賴包# 安裝 ROS 功能包 sudo apt install xxx
  • # 刪除某個功能包 sudo apt purge xxx
  • # 列出所有功能包 rospack list# 查找某個功能包是否存在,如果存在返回安裝路徑 rospack find 包名# 進入某個功能包 roscd 包名# 列出某個包下的文件 rosls 包名# 搜索某個功能包 apt search xxx
  • # 修改功能包文件(需要安裝 vim) rosed 包名 文件名
  • 執行
  • # 必須運行 roscore 才能使 ROS 節點進行通信,他是 ROS 的系統先決條件節點和程序的集合。運行 roscore 會運行 ros master、ros 參數服務器、rosout 日志節點 roscore # 或(指定端口號) roscore -p xxxx# 運行指定的ROS節點 rosrun 包名 可執行文件名# 執行某個包下的 launch 文件 roslaunch 包名 launch文件名

    1.3. 計算圖

    ROS 文件結構是磁盤上 ROS 程序的存儲結構,是靜態的,而 ros 程序運行之后,不同的節點之間是錯綜復雜的,ROS 中提供了一個實用的工具:rqt_graph

    rqt_graph 能夠創建一個顯示當前系統運行情況的動態圖形。ROS 分布式系統中不同進程需要進行數據交互,計算圖可以以點對點的網絡形式表現數據交互過程。rqt_graph 是 rqt 程序包中的一部分

    運行 rat_graph 可通過下面命令執行:

    rosrun rqt_graph rqt_graph # 或者直接輸入 rqt_graph

    1.4. Source

    • 下面命令是使得能夠在任意終端都能使用 ROS
    echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc
    • 下面命令是使得能夠在任意終端都能使用當前工作空間
    echo "source ~/工作空間/devel/setup.bash" >> ~/.bashrc source ~/.bashrc

    1.5. helloworld

    ROS 可是使用 C++ 或者 Python,但是具體選擇哪種語言需要視需求而定:C++ 運行效率高但是編碼效率低,而 Python 則反之。基于二者互補的特點,ROS 設計者分別設計了 roscpp 與 rospy 庫,前者旨在成為 ROS 的高性能庫,而后者則一般用于對性能無要求的場景,旨在提高開發效率

    1.5.1. C++ 實現

  • 進入 ros 包的 src 目錄編輯源文件
  • #include "ros/ros.h"int main(int argc, char *argv[]) {//執行 ros 節點初始化,輸入所有參數并對節點命名。注意,節點名稱是一個標識符,需要保證在 ROS 網絡拓撲中唯一ros::init(argc,argv,"hello");//創建 ros 節點句柄。注意,因為一個進程上運行一個節點,所以句柄是自動綁定到當前的進程,即節點上的ros::NodeHandle n;//控制臺輸出 hello worldROS_INFO("hello world!");return 0; }
  • 編輯 ros 包下的 Cmakelist.txt 文件
  • add_executable(可執行文件名src/步驟3的源文件名.cpp ) target_link_libraries(可執行文件名${catkin_LIBRARIES} )
  • 返回頂層工作空間目錄并編譯(生成 build 和 devel):catkin_make

  • 執行

  • 在一個終端輸入命令啟動 ROS 核心:roscore
  • 再在另一個終端輸入命令刷新環境變量并運行節點:
  • source ./devel/setup.bash rosrun 包名 可執行文件名

    命令行輸出: HelloWorld!

    1.5.2. Python 實現

  • 進入 ros 包的 scripts 目錄編輯 python 文件(C++是進入同級的 src 目錄)
  • #! /usr/bin/env pythonimport rospyif __name__ == "__main__":rospy.init_node("Hello")rospy.loginfo("HelloWorld!")
  • 為 python 文件添加可執行權限
  • chmod +x 文件名.py
  • 編輯 ros 包下的 CamkeList.txt 文件
  • catkin_install_python(PROGRAMS scripts/文件名.pyDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} )
  • 返回頂層工作空間目錄并編譯:catkin_make

  • 執行

  • 在一個終端輸入命令啟動 ROS 核心:roscore
  • 再在另一個終端輸入命令刷新環境變量并運行節點:
  • source ./devel/setup.bash rosrun 包名 文件名.py

    輸出結果:HelloWorld!

    另外,因為 Python 文件運行不需要編譯,所以在編寫完腳本后,可以直接運行節點

    rosrun 包名 文件名.py

    或者直接運行 Python 文件

    python 文件名.py

    2. 通信

    機器人是一種高度復雜的系統性實現,在機器人上可能集成各種傳感器(雷達、攝像頭、GPS…)以及運動控制實現,為了解耦合,在 ROS 中每一個功能點都是一個單獨的進程,每一個進程都是獨立運行的。更確切的講,ROS 是進程(也稱為 Nodes)的分布式框架。 因為這些進程甚至還可分布于不同主機,不同主機協同工作,從而分散計算壓力。而為了實現不同進程之間的通信,ROS 提供了三種方式:

  • 話題通信(發布訂閱模式)
  • 服務通信(請求響應模式)
  • 參數服務器(參數共享模式)
  • 2.1. 話題通信

    2.1.1. 簡介

    • ROS 中使用最多的通信方式
    • ROS 中的異步通信方式
    • 通過 TCP/IP 通信
    • Node 之間通過 publish-subscribe 機制通信
    • 能夠進行多對多通信
    • 常用于連續、高頻的數據發布:激光雷達、里程計發布數據
    • Message:
      • topic 內容的數據格式
      • 定義在 .msg 文件中
      • 可以看作是一個結構體或者類

    2.1.2. 理論模型

    話題通信理論模型中涉及到三個角色。其中,ROS Master 負責保管 Talker 和 Listener 注冊的信息,并匹配話題相同的 Talker 與 Listener,幫助 Talker 與 Listener 建立連接,連接建立后,Talker 可以發布消息,且發布的消息會被 Listener 訂閱

    2.1.3. C++ 實現

    發布方

    #include "ros/ros.h" #include "std_msgs/String.h" //普通文本類型的消息 #include <sstream>int main(int argc, char *argv[]) {setlocale(LC_ALL, "");ros::init(argc,argv,"talker");ros::NodeHandle nh;//泛型: 發布的消息類型//參數1: 要發布到的話題//參數2: 隊列中最大保存的消息數,超出此閥值時,先進的先銷毀ros::Publisher pub = nh.advertise<std_msgs::String>("chatter",10);std_msgs::String msg;std::string msg_front = "Hello!";int count = 0;//邏輯(一秒10次)ros::Rate r(10);while (ros::ok()) {std::stringstream ss;ss << msg_front << count;msg.data = ss.str();pub.publish(msg);ROS_INFO("發送消息: %s", msg.data.c_str());//根據前面制定的發送頻率自動休眠 休眠時間 = 1/頻率;r.sleep();count++;//循環結束前,讓 count 自增}return 0; }

    訂閱方

    #include "ros/ros.h" #include "std_msgs/String.h"void doMsg(const std_msgs::String::ConstPtr& msg_p) {ROS_INFO("接受信息: %s",msg_p->data.c_str()); }int main(int argc, char *argv[]) {setlocale(LC_ALL,"");ros::init(argc,argv,"listener");ros::NodeHandle nh;ros::Subscriber sub = nh.subscribe<std_msgs::String>("chatter", 10, doMsg);while (ros::ok()) {//循環調用回調函數ros::spinOnce();r.sleep();}return 0; }

    接受信息一般使用 ros::spin() 或者 ros::spinOnce()。兩者區別在于,ros::spin() 在調用后不會再返回,而 ros::spinOnce() 后者在調用后還可以繼續執行之后的程序。因此,ros::spin() 函數一般不會出現在循環中,后面除了 return 0; 外不能有其他語句

    CMakeLists.txt

    add_executable(Hello_pubsrc/Hello_pub.cpp ) add_executable(Hello_subsrc/Hello_sub.cpp )target_link_libraries(Hello_pub${catkin_LIBRARIES} ) target_link_libraries(Hello_sub${catkin_LIBRARIES} )

    2.1.4. Python 實現

    發布方

    #! /usr/bin/env python import rospy from std_msgs.msg import Stringif __name__ == "__main__":rospy.init_node("talker_p")pub = rospy.Publisher("chatter", String, queue_size=10)msg = String()msg_front = "hello"count = 0rate = rospy.Rate(10)while not rospy.is_shutdown():msg.data = msg_front + str(count)pub.publish(msg)rate.sleep()rospy.loginfo("發送信息:%s",msg.data)count += 1

    訂閱方

    #! /usr/bin/env python import rospy from std_msgs.msg import Stringdef doMsg(msg):rospy.loginfo("接受信息:%s", msg.data)if __name__ == "__main__":rospy.init_node("listener_p")sub = rospy.Subscriber("chatter", String, doMsg, queue_size=10)rospy.spin()

    添加可執行權限

    chmod +x *.py

    CMakeLists.txt

    catkin_install_python(PROGRAMSscripts/talker_p.pyscripts/listener_p.pyDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} )

    2.1.5. spinOnce 和 spin

    spin 是忙等待,一旦接受緩沖區有數據就會立即處理,這樣處理信息的速度較快,但是忙等待會占用一定硬件資源。而 spinOnce 處理接受緩存區的速度由訂閱節點循環的頻率決定,并且每次都直接處理緩存區里的所有數據。

    注意,在 Python 實現中,或者說在 rospy 中并沒有 spinOnce,這是因為 rospy 中 spin 的作用與 roscpp 不同,這里的 spin 只是用來確保不讓程序在節點關閉前退出,而不想 roscpp 中的那樣會影響處理信息的回調函數,所以 rospy 中只需要 spin 就可以了。

    但是這樣就會產生一個問題,如果想實現在循環中處理接受信息調用回調函數,并執行發布消息的任務,則可以通過新開一個線程來解決循環問題,但是如果不需要循環,則可以直接在訂閱的回調函數中發布信息

    #!/usr/bin/env python #-*- coding: utf-8 -*-import rospy import thread, time from geometry_msgs.msg import Twist from std_srvs.srv import Trigger, TriggerResponsepubCommand = False turtle_vel_pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)def command_thread():while True:if pubCommand:vel_msg = Twist()vel_msg.linear.x = 0.5vel_msg.angular.z = 0.2turtle_vel_pub.publish(vel_msg)time.sleep(0.1)def commandCallback(req):global pubCommandpubCommand = bool(1 - pubCommand)return TriggerResponse(1, "Change turtle command state!")def turtle_command_server():rospy.init_node('turtle_command_server')s = rospy.Service('/turtle_command', Trigger, commandCallback)thread.start_new_thread(command_thread, ())rospy.spin()if __name__ == "__main__":turtle_command_server()

    2.1.6. 話題同步

    注意,只有多個主題都有數據的時候才可以觸發回調函數。如果其中一個主題的發布節點崩潰了,則整個回調函數永遠無法觸發回調;并且,當多個主題頻率一致的時候也無法保證回調函數的頻率等于訂閱主題的頻率,一般會很低。實際測試訂閱兩個需要同步的主題頻率為 50Hz 和 50Hz,而回調函數的頻率只有 24Hz 左右。

    C++

    #include <ros/ros.h> #include "sensor_msgs/LaserScan.h" #include "geometry_msgs/PoseWithCovarianceStamped.h" #include <message_filters/subscriber.h> #include <message_filters/synchronizer.h> #include <message_filters/sync_policies/approximate_time.h> #include <message_filters/time_synchronizer.h> #include <boost/thread/thread.hpp> #include <iostream>void multi_callback(const sensor_msgs::LaserScanConstPtr& scan, const geometry_msgs::PoseWithCovarianceStampedConstPtr& pose) {std::cout << "同步完成!" << std::endl; }int main(int argc, char** argv) {ros::init(argc, argv, "multi_receiver");ros::NodeHandle n;message_filters::Subscriber<sensor_msgs::LaserScan> subscriber_laser(n,"scan",1000,ros::TransportHints().tcpNoDelay());message_filters::Subscriber<geometry_msgs::PoseWithCovarianceStamped> subscriber_pose(n,"car_pose",1000,ros::TransportHints().tcpNoDelay());typedef message_filters::sync_policies::ApproximateTime<sensor_msgs::LaserScan, geometry_msgs::PoseWithCovarianceStamped> syncPolicy;//message_filters::TimeSynchronizer<sensor_msgs::LaserScan,geometry_msgs::PoseWithCovarianceStamped> sync(subscriber_laser, subscriber_pose, 10);message_filters::Synchronizer<syncPolicy> sync(syncPolicy(10), subscriber_laser, subscriber_pose); sync.registerCallback(boost::bind(&multi_callback, _1, _2));std::cout << "hahah" << std::endl;ros::spin();return 0; }

    Python

    #!/usr/bin/env python # coding=UTF-8 import rospy,math,random import numpy as np import message_filters from std_msgs.msg import String from sensor_msgs.msg import LaserScan from laser_geometry import LaserProjection from geometry_msgs.msg import PoseWithCovarianceStampeddef multi_callback(Subcriber_laser,Subcriber_pose):print "同步完成!"if __name__ == '__main__':rospy.init_node('multi_receive',anonymous=True)subcriber_laser = message_filters.Subscriber('scan', LaserScan, queue_size=1)subcriber_pose = message_filters.Subscriber('car_pose', PoseWithCovarianceStamped, queue_size=1)sync = message_filters.ApproximateTimeSynchronizer([subcriber_laser, subcriber_pose],10,0.1,allow_headerless=True)sync.registerCallback(multi_callback)rospy.spin()

    2.1.7. 自定義 msg

    在 ROS 通信協議中,數據載體是一個較為重要組成部分,ROS 中通過 std_msgs 封裝了一些原生的數據類型,比如:String、Int32、Int64、Char、Bool、Empty… 但是,這些數據一般只包含一個 data 字段,結構的單一意味著功能上的局限性,當傳輸一些復雜的數據,如激光雷達的信息時,可以使用自定義的消息類型

    msgs 只是簡單的文本文件,每行具有字段類型和字段名稱,可以使用的字段類型有:

    int8, int16, int32, int64 (或者無符號類型: uint*) float32, float64 string time, duration other msg files variable-length array[] and fixed-length array[C]

    ROS 中還有一種特殊類型:Header,標頭包含時間戳和 ROS 中常用的坐標幀信息

    首先在與功能包 src 同級的 msg 目錄下編輯自定義消息文件 Person.msg

    string name uint16 age float64 height

    然后編輯配置文件

    package.xml

    <build_depend>message_generation</build_depend><exec_depend>message_runtime</exec_depend>

    CMakeLists.txt(也可以在 msg 文件夾內再定義一個 CMake 文件,用來統一加入消息文件)

    find_package(catkin REQUIRED COMPONENTSroscpprospystd_msgs # 需要加入 message_generation,必須有 std_msgsmessage_generation )# 配置 msg 源文件 add_message_files(FILESPerson.msg )# 生成消息時依賴于 std_msgs generate_messages(DEPENDENCIESstd_msgs )#執行時依賴 catkin_package(CATKIN_DEPENDS roscpp rospy std_msgs message_runtime )

    最后進行編譯,會生成供 C++ 和 Python 使用的中間文件,此時調用這些中間文件就能發送自定義消息

    • C++:.../工作空間/devel/include/包名/xxx.h。調用時執行#include "功能包包名/xxx.h"
    • Python:.../工作空間/devel/lib/python3/dist-packages/包名/msg。調用時執行from 功能包包名.msg import xxx

    2.1.8. 自定義變長 msg

    --------------------------------------- imgData.msgint32 upperLeftint32 lowerRightstring colorstring cameraID --------------------------------------- imgDataArray.msgimgData[] images --------------------------------------- demo_pub.cppros::Publisher pub = n.advertise<my_pkg::imgDataArray>("test", 1000);my_pkg::imgData data; my_pkg::imgDataArray msg;data.upperleft=0; data.lowerRight=100; data.color="red"; data.cameraID="one"; msg.images.push_back(data); data.upperleft=1; data.lowerRight=101; data.color="blue"; data.cameraID="two"; msg.images.push_back(data);pub.publish(msg); --------------------------------------- demo_sub.cppvoid subCB(const my_pkg::imgDataArray::ConstPtr& msg) {for (int i=0; i<msg->images.size; ++i) {const my_pkg::imgData &data = msg->images[i];ROS_INFO_STREAM("UL: " << data.upperleft << "UR: " << data.upperright << "color: " << data.color << "ID: " << data.cameraID);} }int main(int argc, char **argv) {...ros::Subscriber sub = n.subscribe("test", 1000, subCB);ros::spin(); }

    2.2. 服務通信

    2.2.1. 簡介

    • ROS 中的同步通信方式
    • 通過 TCP/IP 通信
    • Node 之間通過 request-reply 機制通信
    • 能夠進行多對一通信
    • 常用于偶爾調用的功能/具體的任務:開關傳感器、拍照、逆接計算
    • srv:
      • service 通信的數據格式
      • 定義在 .srv 文件中

    2.2.2. 理論模型

    2.2.3. 話題和服務

    在一個簡單字符串通信任務中,使用話題時平均延遲為 0.7ms,但是使用服務時平均延遲為 3ms。考慮到服務通信中 client 與 server 之間維持的是一個持久連接,那么服務通信應該要比話題通信快。但實際上,服務通信中 client 發出請求后需要先等 server 喚醒,而 server 喚醒時間就會占整體時間的 80%,即實際上因為服務通信是通過持久性連接發送請求的,所以服務通信的請求發送時間要比話題通信快,但是服務通信中服務喚醒的時間要更大,因此整體上服務通信延遲要比話題通信大

    2.2.4. 自定義 srv

    不同于話題通信可以只發送某個字段作為消息,服務通信包含請求和響應兩個過程,因此使用服務通信前必須先定義服務類型

    首先在與功能包 src 同級的 srv 目錄下編輯自定義消息文件。其中,請求和響應使用---分割

    # 客戶端請求時發送的兩個數字 int32 num1 int32 num2 --- # 服務器響應發送的數據 int32 sum

    編輯 package.xml 文件,添加編譯依賴與執行依賴

    <build_depend>message_generation</build_depend><exec_depend>message_runtime</exec_depend><!-- exce_depend 以前對應的是 run_depend 現在非法-->

    編輯 CMakeLists.txt 相關配置

    find_package(catkin REQUIRED COMPONENTSroscpprospystd_msgsmessage_generation ) # 需要加入 message_generation,必須有 std_msgsadd_service_files(FILESAddInts.srv )generate_messages(DEPENDENCIESstd_msgs )

    最后進行編譯,會生成供 C++ 和 Python 使用的中間文件,此時調用這些中間文件就能發送自定義消息

    • C++:.../工作空間/devel/include/包名/xxx.h。調用時執行#include "功能包包名/xxx.h"
    • Python:.../工作空間/devel/lib/python3/dist-packages/包名/srv。調用時執行from 功能包包名.srv import xxx

    2.2.5. C++ 實現

    服務端

    #include "ros/ros.h" #include "demo03_server_client/AddInts.h"// bool 返回值由于標志是否處理成功 bool doReq(demo03_server_client::AddInts::Request& req,demo03_server_client::AddInts::Response& resp) {int num1 = req.num1;int num2 = req.num2;ROS_INFO("服務器接收到的請求數據為:num1 = %d, num2 = %d",num1, num2);//邏輯處理if (num1 < 0 || num2 < 0) {ROS_ERROR("提交的數據異常:數據不可以為負數");return false;}//如果沒有異常,那么相加并將結果賦值給 respresp.sum = num1 + num2;return true; }int main(int argc, char *argv[]) {setlocale(LC_ALL,"");ros::init(argc,argv,"AddInts_Server");ros::NodeHandle nh;ros::ServiceServer server = nh.advertiseService("AddInts",doReq);ROS_INFO("服務已經啟動....");ros::spin();return 0; }

    客戶端

    #include "ros/ros.h" #include "demo03_server_client/AddInts.h"int main(int argc, char *argv[]) {setlocale(LC_ALL,"");if (argc != 3) {ROS_ERROR("請提交兩個整數");return 1;}ros::init(argc,argv,"AddInts_Client");ros::NodeHandle nh;ros::ServiceClient client = nh.serviceClient<demo03_server_client::AddInts>("AddInts");//方式1ros::service::waitForService("AddInts");//方式2// client.waitForExistence();// 組織請求數據demo03_server_client::AddInts ai;ai.request.num1 = atoi(argv[1]);ai.request.num2 = atoi(argv[2]);// 發送請求,返回 bool 值,標記是否成功bool flag = client.call(ai);// 處理響應if (flag) {ROS_INFO("請求正常處理,響應結果:%d",ai.response.sum);}else {ROS_ERROR("請求處理失敗....");return 1;}return 0; }

    在客戶端發送請求前添加: client.waitForExistence(); 或: ros::service::waitForService("AddInts");。這是一個阻塞式函數,只有服務啟動成功后才會繼續執行。client.call() 也是一個阻塞式函數

    2.2.6. Python 實現

    服務端

    #! /usr/bin/env pythonimport rospy from demo03_server_client.srv import AddInts,AddIntsRequest,AddIntsResponsedef doReq(req):sum = req.num1 + req.num2rospy.loginfo("提交的數據:num1 = %d, num2 = %d, sum = %d",req.num1, req.num2, sum)resp = AddIntsResponse(sum)return respif __name__ == "__main__":rospy.init_node("addints_server_p")# 創建服務對象server = rospy.Service("AddInts",AddInts,doReq)rospy.spin()

    客戶端

    #! /usr/bin/env pythonimport rospy from demo03_server_client.srv import * import sysif __name__ == "__main__":if len(sys.argv) != 3:rospy.logerr("請正確提交參數")sys.exit(1)rospy.init_node("AddInts_Client_p")# 創建請求對象client = rospy.ServiceProxy("AddInts",AddInts)# 方式1:# rospy.wait_for_service("AddInts")# 方式2client.wait_for_service()# 發送請求,接收并處理響應# 方式1# resp = client(3,4)# 方式2# resp = client(AddIntsRequest(1,5))# 方式3req = AddIntsRequest()# req.num1 = 100# req.num2 = 200 req.num1 = int(sys.argv[1])req.num2 = int(sys.argv[2]) resp = client.call(req)rospy.loginfo("響應結果:%d",resp.sum)

    2.3. 參數服務器

    rosparam:https://blog.csdn.net/u014695839/article/details/78348600

    3. 運行

    3.1. launch

    3.1.1. 運行

    一個程序中可能需要啟動多個節點,比如:ROS 內置的小烏龜案例,如果要控制烏龜運動,要啟動多個窗口,分別啟動 roscore、烏龜界面節點、鍵盤控制節點。如果每次都調用 rosrun 逐一啟動,顯然效率低下,因此官方給出的優化策略是使用 launch 文件,可以一次性啟動多個 ROS 節點。

  • 進入 ros 包的 launch 目錄編輯 launch 文件:
  • <launch><node pkg="helloworld" type="demo_hello" name="hello" output="screen" /><node pkg="turtlesim" type="turtlesim_node" name="t1"/><node pkg="turtlesim" type="turtle_teleop_key" name="key1" /> </launch>
  • 運行 launch 文件(此時 roslaunch 命令會在內部自動執行 roscore 命令)
  • roslaunch 包名 launch文件名

    運行結果:一次性啟動了多個節點

    3.1.2. 標簽

    3.1.2.1. launch

    launch 標簽規定了一片區域,所有的 launch 文件都由 <launch> 開頭,由 </launch> 結尾,所有的描述標簽都要寫在 <launch> 和 </launch>之間

    <launch> ... </launch>

    3.1.2.2. node

    node 標簽里包括了 ROS 中節點的名稱屬性 name、該節點所在的包名 pkg、節點的類型 type 以及日志輸出位置屬性 output

    屬性屬性作用
    name=“NODE_NAME”為節點指派名稱,這將會覆蓋掉 ros::init() 定義的 node_name
    pkg=“PACKAGE_NAME”節點所在的包名
    type=“FILE_NAME”執行文件的名稱。如果是用 Python 編寫則為 xxx.py,如果是 C++ 則為生成的可執行文件名
    output=“screen”終端輸出轉儲在當前的控制臺上,而不是在日志文件中。在節點內有日志輸出時該屬性才會起作用
    respawn=“true”當 roslaunch 啟動完所有該啟動的節點之后,會監測每一個節點,保證它們正常的運行狀態。對于任意節點,當它終止時,roslaunch 會將該節點重啟
    required=“true”當被此屬性標記的節點終止時,roslaunch 會將其他的節點一并終止。注意此屬性不可以與 respawn=“true” 一起描述同一個節點
    launch-prefix = “command-prefix”相當于在執行啟動命令時加上一段命令前綴
    ns = “NAME_SPACE”在自定義的命名空間里運行節點

    3.1.2.3. include

    該標簽可以導入另一個 roslaunch XML 文件到當前文件

    屬性屬性作用
    file ="$(find pkg-name)/path/filename.xml"指明想要包含進來的文件
    ns=“NAME_SPACE”相對NAME_SPACE命名空間導入文件
    <include file="$(find demo)/launch/demo.launch" ns="demo_namespace"> ... </include>

    3.1.2.4. remap

    ROS 支持 topic 的重映射,remap 標簽里包含一個 original-name 和一個 new-name,及原名稱和新名稱

    比如現在拿到一個節點,這個節點訂閱了 “/chatter” 話題,然而自己寫的節點只能發布到 “/demo/chatter” 話題,由于這兩個 topic 的消息類型是一致的,想讓這兩個節點進行通訊,那么可以在 launch 文件中這樣寫:

    <remap from="chatter" to="demo/chatter"/>

    這樣就可以直接把 /chatter 重映射到 /demo/chatter,讓兩個節點進行通訊

    如果 remap 標簽寫在與 node 元素的同一級,而且在 launch 元素內的最頂層。 那么這個重映射將會作用于 launch 文件中所有的節點

    3.1.2.5. param

    param 標簽的作用相當于命令行中的 rosparam set。比如現在在參數服務器中添加一個名為 demo_param,值為 666 的參數

    <param name="demo_param" type="int" value="666"/>

    3.1.2.6. rosparam

    rosparam 標簽允許從 YAML 文件中一次性導入大量參數

    <rosparam command="load" file="$(find pkg-name)/path/name.yaml"/>

    3.1.2.7. arg

    arg 標簽用來在 launch 文件中定義參數,arg 和 param 在 ROS 里有根本性的區別,就像局部變量和全局變量的區別一樣。arg 不儲存在參數服務器中,不能提供給節點使用,只能在 launch 文件中使用。param 則是儲存在參數服務器中,可以被節點使用。

    <arg name="demo"/>

    像上面這樣,就簡單地聲明了一個參數,名叫 demo,但是聲明不等于定義,在賦值之后參數才能夠發揮作用。

    <arg name="demo" value="666"/> <arg name="demo" default="666"/>

    以上是兩種簡單的賦值方法,兩者的區別是使用后者賦值的參數可以在命令行中像下面這樣被修改,前者則不行。

    roslaunch demo demo.launch demo:=6666

    arg 還有更加高級,也更加靈活的用法:$(arg arg_name)
    當 $(arg arg_name) 出現在 launch 文件任意位置時,將會自動替代為所給參數的值

    3.1.2.8. group

    group 標簽可以將若干個節點同時劃分進某個工作空間

    <group ns="demo_1"><node name="demo_1" pkg="demo_1" type="demo_pub_1" output="screen"/><node name="demo_1" pkg="demo_1" type="demo_sub_1" output="screen"/> </group> <group ns="demo_2"><node name="demo_2" pkg="demo_2" type="demo_pub_2" output="screen"/><node name="demo_2" pkg="demo_2" type="demo_sub_2" output="screen"/> </group>

    group 標簽還可以做到對 node 的批量管理。比如可以同時終止在同一個 group 中的節點

    <group if="1-or-0"> …… …… …… </group><group unless="1-or-0"> …… …… …… </group>

    第一種情況,當 if 屬性的值為 0 的時候將會忽略掉 <group></group> 之間的標簽

    第二種恰好相反,當 if 屬性的值為 1 的時候將會忽略掉 <group></group> 之間的標簽

    但是通常不會直接用 1 或 0 來定義 if 標簽。因為這樣不夠靈活。
    通常會搭配 $(arg arg_name) 來使用 demo.launch 文件

    <launch><include file="include.launch"><arg name="demo_arg" value="1"/></include> </launch>

    include.launch文件

    <launch><arg name="demo_arg"/><group if="$(demo_arg)"><node name="demo" pkg="demo" type="demo_pub" output="screen"/><node name="demo" pkg="demo" type="demo_sub" output="screen"/></group> </launch>

    https://zhuanlan.zhihu.com/p/157526418

    總結

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

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

    国产亚洲视频系列 | 婷婷丁香六月天 | 亚洲人av免费网站 | 国产精品久久网 | h视频日本 | 中文字幕高清av | 久久国产品 | 久久精品www人人爽人人 | 一级久久精品 | 国产a国产a国产a | 亚洲成人资源在线观看 | 国产日韩av在线 | 日本精品视频在线播放 | 美女久久视频 | 91porny九色91啦中文 | 免费成人短视频 | 国产精品18久久久久久首页狼 | 中文字幕日本特黄aa毛片 | 中文字幕一区二区三区四区久久 | 久久99久久99精品 | 韩国av一区| 久久免费公开视频 | 日韩网站在线免费观看 | 久久久网站 | 色婷婷骚婷婷 | 人人澡视频 | 色天堂在线视频 | 国产99久久久精品 | 日韩小视频网站 | 久久久久国产精品免费网站 | av高清在线 | 免费高清在线观看成人 | 久久久久一区二区三区 | 亚洲六月丁香色婷婷综合久久 | av免费在线看网站 | 久久婷五月 | 激情欧美一区二区免费视频 | 中文字幕高清在线 | 国产专区欧美专区 | 四虎影视精品永久在线观看 | 99在线观看 | 欧美久久电影 | 在线韩国电影免费观影完整版 | 亚洲综合射 | 国产 在线 高清 精品 | 久久99久久99精品免观看粉嫩 | 97色婷婷成人综合在线观看 | 97超碰人人澡人人爱 | 成人一区二区三区中文字幕 | 国产中文自拍 | 色网站在线观看 | 99精品系列 | 五月婷婷影院 | 亚洲综合婷婷 | 久久精品国产v日韩v亚洲 | 久久综合婷婷综合 | 国产亚洲91 | 久久久影片| 麻豆视频成人 | 色综合久久五月天 | 久热av| www.99热精品| 黄色不卡av| 91亚洲精 | 81精品国产乱码久久久久久 | 黄色www| 中文字幕在线观看播放 | 久久精品日韩 | 久久精品这里精品 | 国产精品wwwwww| 中文字幕av在线电影 | 有码视频在线观看 | 免费在线观看av的网站 | 午夜精品久久久久久久99无限制 | 怡红院成人在线 | 五月天网站在线 | 日日操天天爽 | 日韩精品一区在线观看 | 精品欧美小视频在线观看 | 人人操日日干 | 在线观看理论 | 亚洲成av人片在线观看www | 激情五月婷婷综合 | 91精选在线 | 97在线免费观看视频 | 久久久国产视频 | 最近最新中文字幕 | 久久久久免费精品视频 | 色综合久久久久久久 | 99久久精品免费看国产 | 中文字幕在线网 | 天天操夜夜操夜夜操 | 久久天天躁狠狠躁夜夜不卡公司 | 国产超碰在线观看 | 国产成人在线免费观看 | 久久国产成人午夜av影院潦草 | 中文字幕成人网 | 国产精品岛国久久久久久久久红粉 | 国产精品毛片网 | 最近中文字幕视频完整版 | 国产一级一片免费播放放 | www.夜夜| 黄色av电影免费观看 | 天堂av在线免费观看 | 三三级黄色片之日韩 | 天堂成人在线 | 在线看av的网址 | 日日天天 | 国产在线欧美日韩 | 免费a网站 | 久久这里只有精品1 | 黄色免费在线视频 | 顶级bbw搡bbbb搡bbbb | 在线日韩| 国产激情电影综合在线看 | 2019中文最近的2019中文在线 | 精品五月天 | 午夜久久影视 | 亚洲成人在线免费 | 欧美一区二区日韩一区二区 | 国产精品 中文字幕 亚洲 欧美 | 草在线视频 | 久久久精品视频网站 | 色视频网址| 五月亚洲综合 | 欧美一级免费高清 | 日韩精品在线观看av | 中文字幕电影一区 | 欧美精品一级视频 | 国产亚洲欧美精品久久久久久 | 亚洲国产一二三 | 99色| 中文字幕a在线 | 9999精品免费视频 | 成人黄色大片在线免费观看 | 97视频免费在线看 | 伊色综合久久之综合久久 | 日韩av视屏 | 国产免费亚洲高清 | 2021国产精品 | 国产精品网红直播 | 日免费视频 | 精品99在线观看 | 在线免费观看黄色大片 | 欧美日本一区 | 亚洲一区二区精品 | 久久综合九色综合欧美就去吻 | 国产专区在线视频 | 午夜久久久久久久久久影院 | 99免费在线观看视频 | 福利区在线观看 | 国产伦理久久 | 国产又粗又猛又色 | 99视频免费观看 | 性色av免费观看 | www.69xx| 在线播放 日韩专区 | 久久精品在线免费观看 | 国产精品theporn| 操操操com| 午夜精品视频免费在线观看 | 中文字幕在线乱 | 91久久精| 国产精品国内免费一区二区三区 | 国产偷国产偷亚洲清高 | 天天激情| 国产一级电影免费观看 | 久久免费观看视频 | 久久精品人 | 免费看污污视频的网站 | 手机看片1042 | 国产精品免费视频一区二区 | 久久国产免 | 久草在线免| 久久免费在线观看视频 | 最新国产在线观看 | 美女久久精品 | 在线观看色网站 | 91精品久久久久久久久久久久久 | 欧美专区亚洲专区 | 成人免费xxx在线观看 | 中文字幕视频 | 五月天狠狠操 | 天天做日日爱夜夜爽 | 日本三级全黄少妇三2023 | 国产精品在线看 | 国产成人av在线 | 欧美成亚洲| 欧美精品久久久 | 国模视频一区二区三区 | h网站免费在线观看 | 久久免费精品一区二区三区 | 一区二区三区视频网站 | 久久久精品 | 九九在线免费视频 | 久久久www成人免费毛片 | 最新av在线网站 | 久草资源免费 | 久久久精品日本 | 在线а√天堂中文官网 | 成人精品视频 | 中文成人字幕 | 中文字幕亚洲在线观看 | 国产精品久久久久久久久久妇女 | 国精产品满18岁在线 | 99热这里只有精品久久 | 麻花豆传媒mv在线观看网站 | 亚洲高清视频在线播放 | 日韩欧美视频在线免费观看 | 人人爽久久涩噜噜噜网站 | 久久久免费少妇 | 97视频免费 | 亚洲va欧美va人人爽春色影视 | 99国产一区二区三精品乱码 | 精品国产免费一区二区三区五区 | 亚洲不卡在线 | 日女人免费视频 | 一级黄色在线视频 | 国产视频精品久久 | 亚洲欧美日韩一区二区三区在线观看 | 色偷偷av男人天堂 | 日韩色视频在线观看 | 精品在线一区二区三区 | 毛片网站在线观看 | 色婷婷久久一区二区 | 成年免费在线视频 | 特级毛片aaa | 久久久久久久久久久高潮一区二区 | 色婷婷影视 | 毛片视频电影 | 久久99精品国产麻豆宅宅 | 国产二区电影 | 十八岁免进欧美 | 成人黄色在线视频 | 亚洲精品高清在线观看 | 四虎成人网| 国产成人久久 | 久精品视频在线观看 | 一区二区三区四区精品 | 成人久久网 | 成年人免费在线看 | 亚洲精品国偷拍自产在线观看蜜桃 | 黄色av网站在线观看 | 99r在线播放| 成人av.com | 中文字幕精品三区 | 亚洲国产美女精品久久久久∴ | 最近日本韩国中文字幕 | 亚洲欧美激情插 | 97在线视频观看 | 亚州成人av在线 | 在线视频你懂得 | av成人在线播放 | 日韩久久精品一区二区三区下载 | 少妇性xxx| 一区二区三区在线电影 | 免费看一级特黄a大片 | 91精品导航| 国产精品视频免费 | 久久久99精品免费观看乱色 | 视频在线观看一区 | 成人精品视频 | 2018亚洲男人天堂 | 91在线看片 | 91香蕉视频污在线 | 久草在线资源免费 | 夜添久久精品亚洲国产精品 | 人人爱人人爽 | 九九亚洲视频 | 国产免费久久 | 97成人免费视频 | 狠狠色丁香婷婷综合久久片 | 欧美成人xxx| 国产精品免费久久久久 | 久久免费99精品久久久久久 | 亚洲精品自拍视频在线观看 | 国产又粗又硬又爽视频 | 亚洲另类在线视频 | 久久色视频 | 久久免费看毛片 | 色综合婷婷 | 国产第一页在线播放 | 99久e精品热线免费 99国产精品久久久久久久久久 | 成人av视屏 | 欧美日韩免费在线视频 | 国产精品免费在线视频 | 99精品视频网 | 欧美日韩视频在线一区 | 免费观看www小视频的软件 | 在线视频a | 黄色亚洲大片免费在线观看 | 网站免费黄色 | 国产成人精品日本亚洲999 | 香蕉成人在线视频 | 九七人人干 | 亚洲三级视频 | 色噜噜日韩精品一区二区三区视频 | 久久久国产精品电影 | 国产精品18p| 欧美一二三区播放 | 中文字幕资源网 | 国产亚洲精品久久久久久久久久 | 久久全国免费视频 | 亚洲激情在线观看 | 波多野结依在线观看 | 中文字幕一区三区 | 黄色在线小网站 | 香蕉久久久久 | 成人一级视频在线观看 | 亚洲精品成人 | 久草综合在线 | 色综合咪咪久久网 | 日日爱影视 | 最近中文字幕视频完整版 | 8x成人在线 | 欧美日本啪啪无遮挡网站 | 日韩精品免费一区二区三区 | 日韩精品综合在线 | 国产精品av免费在线观看 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 免费看毛片在线 | 日本精品二区 | 亚洲精品乱码 | 欧美淫视频 | 免费日韩一区二区三区 | 97成人精品视频在线观看 | www.黄色| 亚洲免费在线播放视频 | 成人在线播放视频 | 97超碰国产在线 | 久久久免费av | 国产h在线观看 | 天天操伊人 | 亚洲精品国产欧美在线观看 | 五月激情六月丁香 | 日韩在线观看你懂得 | 一区二区三区电影 | 91成人网页版 | 青青河边草免费直播 | 久久久一本精品99久久精品 | 狠狠的操你| 国产成人精品一区二区三区福利 | 色综合久久久久久中文网 | 九九热在线视频免费观看 | www久久com| 999久久国产 | avav片| 综合色中色 | 97国产情侣爱久久免费观看 | 国产小视频在线观看免费 | 亚州av成人| 国产一区国产二区在线观看 | 九月婷婷综合网 | 日韩免费电影一区二区三区 | 97视频免费在线观看 | 亚洲国产剧情av | 午夜久久久久久久久久影院 | www久草 | 视频一区亚洲 | 夜夜操狠狠干 | 日韩电影一区二区在线观看 | 精品99免费视频 | 欧美射射射 | 日韩城人在线 | 狠狠色噜噜狠狠狠 | 国产精品成人一区 | 午夜影院先 | 五月婷婷另类国产 | 国产伦精品一区二区三区无广告 | 免费观看一区二区 | 国产精品 中文在线 | 69精品在线观看 | 免费男女羞羞的视频网站中文字幕 | 欧美成年网站 | 日韩免费视频一区二区 | 日韩网站在线看片你懂的 | 97看片网| 亚洲另类久久 | 激情五月看片 | 国产自产高清不卡 | 久久理伦片| 国产五月婷 | 久久综合色影院 | 91麻豆精品国产自产在线游戏 | 日韩精品视频第一页 | 国产色婷婷在线 | 黄色视屏av | 在线成人一区二区 | 国产99久久九九精品免费 | 一级黄色a视频 | 欧美日韩精品在线观看视频 | 在线观看av中文字幕 | 国产91在 | 久久夜视频 | 日韩视频1区 | 成人av一区二区兰花在线播放 | 国产成人777777 | 国产精品久久久电影 | 91在线亚洲 | 精品免费视频123区 午夜久久成人 | 狠狠操天天干 | 久久国产精品区 | 四虎影视成人永久免费观看视频 | 蜜臀av性久久久久av蜜臀三区 | 波多野结衣亚洲一区二区 | 成人黄色电影视频 | 高清一区二区三区av | 色婷婷免费视频 | 亚洲男人天堂a | 亚洲欧美视频在线观看 | 国产黄色视 | av一区二区三区在线播放 | 九精品 | 国产伦精品一区二区三区高清 | 久久综合给合久久狠狠色 | 天天色天天操综合 | 欧美久久成人 | 国产在线91在线电影 | 五月激情在线 | 久久久久久久99精品免费观看 | 国产精品久久久久久久午夜 | 国产小视频免费在线观看 | 中文亚洲欧美日韩 | 日韩网站免费观看 | 中文字幕乱在线伦视频中文字幕乱码在线 | 日日夜日日干 | 日韩中文免费视频 | 国产精品久久久一区二区 | www.人人草 | 国产.精品.日韩.另类.中文.在线.播放 | 国产一级在线播放 | 色综合天天综合 | 欧美日韩三区二区 | 五月婷综合 | 麻豆国产视频 | av免费看av| 在线观看亚洲国产精品 | 在线观看视频97 | 99国产精品久久久久久久久久 | 手机av看片 | 日本精品久久 | 久久久久久久网站 | 中文字幕在线视频网站 | 欧美日韩高清一区二区三区 | 亚洲成人免费在线观看 | 91亚洲精品在线观看 | 中文字幕二区三区 | 久久视频网址 | 丁香激情婷婷 | 天天碰天天操视频 | 一本一道久久a久久精品 | 中文字幕在线不卡国产视频 | 国产一级黄色片免费看 | 深夜国产在线 | 久久久在线视频 | 中文字幕在线看视频 | 国产亚洲精品久久久久久无几年桃 | 狠狠干成人综合网 | 日韩在线免费不卡 | 在线观看色网站 | 首页av在线 | 国产高清成人av | 少妇bbw撒尿 | 黄色毛片在线观看 | 中文字幕亚洲不卡 | a在线播放| 香蕉精品视频在线观看 | 黄色小视频在线观看免费 | 久久久久久久久久久综合 | 亚洲国产手机在线 | 手机看片国产日韩 | av字幕在线| 色资源网在线观看 | 日韩精品中文字幕在线播放 | 精品视频久久久久久 | 日本少妇高清做爰视频 | 国内外成人免费在线视频 | 黄色软件视频网站 | 国产黄色片一级 | 精品国产aⅴ一区二区三区 在线直播av | av亚洲产国偷v产偷v自拍小说 | 久久91久久久久麻豆精品 | 成人在线免费观看网站 | 成人在线免费视频 | 久艹在线观看视频 | 在线观看成年人 | 日韩欧美精品一区二区 | 日韩久久精品 | 色狠狠久久av五月综合 | 欧美日本在线视频 | 久久99精品久久久久久秒播蜜臀 | 日韩一级理论片 | 日韩av一区二区在线 | 国产热re99久久6国产精品 | 久久久精品国产一区二区三区 | 日韩欧美视频一区二区 | 狠狠狠狠狠狠狠 | 91禁看片 | 免费黄色在线网址 | 精品在线小视频 | 狠狠干狠狠操 | 欧美肥妇free | 碰天天操天天 | 91入口在线观看 | 久久免费黄色网址 | 久在线观看视频 | 一区二区中文字幕在线播放 | 在线播放 日韩专区 | 色婷婷国产在线 | 久久久久久久久精 | av手机在线播放 | 成人免费在线观看av | 韩日av在线 | 日韩中文在线字幕 | 久久精品中文视频 | 成人久久久久久久久久 | 福利视频一区二区 | 99中文字幕视频 | 欧美视频二区 | 免费看日韩 | 欧美日韩另类在线观看 | 欧美美女视频在线观看 | 不卡国产在线 | 久久久久国产精品免费网站 | 久久久九九 | 天天插伊人 | zzijzzij亚洲成熟少妇 | a'aaa级片在线观看 | 一区二区欧美日韩 | 99免费| 欧美日一级片 | 在线午夜av| 国产精品你懂的在线观看 | 精品国产一区二区三区蜜臀 | 1000部18岁以下禁看视频 | 亚洲黄色成人 | 色综合天天天天做夜夜夜夜做 | 天天干视频在线 | 国产一级大片在线观看 | 91福利影院在线观看 | 久久精品国产久精国产 | 蜜桃视频日本 | 操操操夜夜操 | 九九视频精品在线 | 99视频在线免费观看 | 久久综合久久综合这里只有精品 | 天天射综合 | 一级成人在线 | 国产精品黄网站在线观看 | 日韩精品一区二区三区第95 | 精品一区二区综合 | 亚洲视频一区二区三区在线观看 | 免费av福利 | 亚州性色| 欧美极品久久 | 免费在线视频一区二区 | 久久婷婷影视 | 久久精品99国产精品亚洲最刺激 | 国产精品丝袜久久久久久久不卡 | 国产一区二区三区免费视频 | 天堂资源在线观看视频 | 欧美在线你懂的 | 亚洲h在线播放在线观看h | 欧美另类一二三四区 | 国产97碰免费视频 | 国产亚洲精品精品精品 | 国产无限资源在线观看 | 国产亚洲精品美女 | 日本韩国精品在线 | 日韩av片无码一区二区不卡电影 | 久久久综合精品 | 日本资源中文字幕在线 | 中文字幕免费国产精品 | 99久久精品日本一区二区免费 | 婷婷成人亚洲综合国产xv88 | 久久资源总站 | 国产精品一区二区久久久 | 亚洲黄色一级电影 | 中文字幕永久在线 | 三级免费黄 | 国产一卡久久电影永久 | 久久福利小视频 | 日韩免费在线视频 | 日日干天夜夜 | 中文字幕精品久久 | 日韩av一区二区三区在线观看 | 色天天综合网 | 国产一级性生活 | 久久久黄视频 | 亚洲成a人片77777潘金莲 | 亚洲精品中文字幕在线观看 | 国产日韩视频在线观看 | 久久精品精品电影网 | 欧美aa级 | 免费看的黄色 | 在线观看成人小视频 | 久久久麻豆视频 | 亚洲成人黄色在线 | 精品久久久久久久久久久久 | 亚洲高清av在线 | 欧美日韩视频免费 | 伊人色综合久久天天网 | 久久综合偷偷噜噜噜色 | 成人超碰97 | 少妇精69xxtheporn | 成人在线免费观看网站 | 开心激情综合网 | a黄色片在线观看 | 欧美一级片免费播放 | 91视频在线网址 | 免费看的黄网站 | 蜜桃视频精品 | 国产伦理一区二区三区 | 黄色www在线观看 | 99精彩视频 | 在线99 | 亚洲高清在线观看视频 | 久久久久免费精品视频 | 日韩精品视频一二三 | 草久在线播放 | 国产精品久久一 | 久久福利在线 | 免费日韩 精品中文字幕视频在线 | 国产日韩在线看 | 天天操夜操 | 久久久久福利视频 | 日本公妇色中文字幕 | 日韩av在线免费看 | 91日韩在线专区 | 天天操夜夜摸 | 国产精品久久久久久久久久久免费看 | 成人福利在线观看 | 婷婷在线看 | 中文字幕人成不卡一区 | 亚洲国产视频直播 | 日批视频在线观看免费 | 色中文字幕在线观看 | 在线视频专区 | 国产一级片免费视频 | 欧美日韩亚洲在线观看 | 永久精品视频 | 国产一级一片免费播放放 | 特级a毛片 | 久久99热久久99精品 | 最新av中文字幕 | 久久久精品亚洲 | 精品亚洲va在线va天堂资源站 | 尤物一区二区三区 | 亚洲理论在线 | 日韩高清在线不卡 | 在线免费三级 | 69精品| 人人舔人人插 | 国产短视频在线播放 | 狠狠色丁香九九婷婷综合五月 | 91看片在线看片 | 中文字幕 二区 | 国产精品 国产精品 | 日本黄色免费网站 | 国产成人免费网站 | 米奇四色影视 | 一区视频在线 | 黄色资源在线观看 | 又黄又爽的视频在线观看网站 | 久久精品96 | 91九色丨porny丨丰满6 | 国产一级二级三级视频 | 成人国产精品久久久 | 亚洲 综合 激情 | 在线观看日韩精品 | 日韩三级视频在线观看 | 色偷偷人人澡久久超碰69 | 免费看片成年人 | 国产精品免费视频一区二区 | 日韩三区在线观看 | 久久久久免费观看 | 国产蜜臀av | 国产精品成人久久久久久久 | 午夜视频不卡 | 成人资源在线 | 国产成人福利在线观看 | 国产91精品一区二区 | 久久久蜜桃| 麻豆视频在线免费观看 | 国产资源免费 | 成人午夜剧场在线观看 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 正在播放国产一区 | 日本在线观看一区二区 | 天天爱天天色 | 一区二区三区在线观看免费视频 | 亚洲一区久久 | 国产成人亚洲精品自产在线 | 97人人超碰在线 | 91视频88av | www..com黄色片| 五月天综合 | 在线欧美国产 | 日韩av伦理片 | 日韩午夜电影院 | 亚洲一区二区视频在线 | 日韩在线视 | 国产99中文字幕 | 黄色在线观看污 | 精品久久久精品 | 日韩a在线观看 | 亚洲人在线 | 天天操天天射天天 | 久久任你操 | 麻豆国产视频下载 | 成人免费视频播放 | av片子在线观看 | 日韩网页 | 性色av免费在线观看 | 在线观看中文字幕dvd播放 | 国产精品免费av | 五月开心网 | 狠狠撸电影 | 国产精品毛片一区视频播 | 在线免费观看麻豆视频 | 黄网av在线 | 亚洲中字幕 | 在线国产91| 国产精品国产三级国产不产一地 | 久久艹在线 | 337p日本欧洲亚洲大胆裸体艺术 | 日韩视频免费观看高清完整版在线 | 国产在线观看一区 | 久久久久久免费网 | 欧美日韩一区二区三区不卡 | 丁香五月缴情综合网 | 久久久网站| 一本一本久久a久久精品综合小说 | 国产精品网站一区二区三区 | 欧美日在线观看 | 久久亚洲免费视频 | 国产精品久久久久久久久费观看 | 天天干夜夜擦 | 最近高清中文在线字幕在线观看 | 天天操天天玩 | 99精品国产在热久久下载 | 亚洲艳情| 性色视频在线 | 亚洲国产欧美在线人成大黄瓜 | 最新日韩在线观看视频 | 日韩av电影国产 | 一区二区精品 | 天天干天天干天天干 | 激情 婷婷| 国产码电影 | 五月天婷婷丁香花 | 久久影院中文字幕 | 欧美美女一级片 | 国产麻豆精品免费视频 | 欧美日韩另类在线观看 | a视频免费在线观看 | 麻豆久久久久久久 | 成人av免费 | 中文字幕一区二区三区四区久久 | 日韩在线免费高清视频 | 中文字幕在线电影 | 就操操久久 | 久久免费精品一区二区三区 | 国产激情小视频在线观看 | 99久久精品国产观看 | 99热亚洲精品 | 91精品中文字幕 | 深爱婷婷久久综合 | 777视频在线观看 | 国产一区免费视频 | 中文字幕美女免费在线 | 亚洲婷婷在线视频 | 91精品久久久久久久91蜜桃 | 亚洲专区免费观看 | 久久乐九色婷婷综合色狠狠182 | 97国产电影 | 精品免费在线视频 | 欧美性黄网官网 | 免费亚洲婷婷 | 波多野结衣最新 | 国产精品久久久一区二区三区网站 | 日韩欧美综合在线视频 | 2000xxx影视| 视频国产精品 | 国产精品6 | 久久国产系列 | 丝袜av一区 | av在线亚洲天堂 | 亚洲婷婷丁香 | 99草在线视频 | 午夜精品成人一区二区三区 | 三级在线视频播放 | 人人超碰免费 | 国产精品18久久久久久久 | 91天堂素人约啪 | 久久免费视频在线观看6 | 99久久国产免费,99久久国产免费大片 | 91在线视频免费91 | 91免费在线视频 | 在线观看视频91 | 亚洲国产婷婷 | 精品国产午夜 | 91久久精品日日躁夜夜躁国产 | 91视频在线自拍 | 伊人色播 | 毛片永久新网址首页 | 亚洲成人精品在线 | 午夜体验区 | 男女激情网址 | 国产精品毛片久久久久久久 | 久久亚洲免费 | 精品国产成人在线影院 | 伊人中文网| 亚洲欧洲精品一区二区精品久久久 | 特级大胆西西4444www | 日韩精品视频在线观看免费 | 国产 在线 日韩 | 二区三区中文字幕 | 日韩视频免费观看高清 | 精品国产乱码久久久久久久 | 中文网丁香综合网 | 国产黄色精品网站 | 欧美精选一区二区三区 | 国产精品美女免费视频 | 亚洲欧美精品一区 | 国产精品久久久久久欧美 | 久青草视频在线观看 | 在线观看网站你懂的 | 国产xx在线 | 中文字幕一区二区在线播放 | 亚洲毛片一区二区三区 | 黄色h在线观看 | 日韩精品免费在线观看 | 日韩中文字幕在线观看 | 久久精品久久精品久久精品 | 91福利区一区二区三区 | 日本中文在线观看 | 精品伊人久久久 | 天天操福利视频 | 九九有精品 | 亚洲第一区在线播放 | 亚洲人xxx | 欧美色综合 | 成人a在线观看高清电影 | av在线看网站| 国产精品久久久久久久av大片 | 天天综合网在线观看 | av在线不卡观看 | 97成人精品视频在线观看 | 不卡电影免费在线播放一区 | 国产精品99久久免费观看 | 99在线精品视频在线观看 | 亚洲韩国一区二区三区 | 国产一线天在线观看 | 久久综合综合久久综合 | 黄色的网站在线 | 久久久国产精品视频 | 欧美性色综合网 | 日韩欧美在线国产 | 欧美一区二区在线刺激视频 | 精品国产乱码久久久久久三级人 | 亚洲黄网站 | 日本一区二区免费在线观看 | 日韩欧美极品 | 91视频免费看网站 | 男女啪啪网站 | 爱色av.com| 91精品视频免费看 | 精品在线二区 | 性色大片在线观看 | 久99久久| 免费日韩av片 | 国产高清在线a视频大全 | 中文字幕xxxx| 国产精品视频在线看 | 日日干干| 在线播放精品一区二区三区 | 不卡的av电影在线观看 | 91色国产| 在线观看视频亚洲 | 国产中文字幕网 | 亚洲一级电影 | 国产精品igao视频网入口 | 欧美日韩国产在线一区 | av在线影视 | 91精品黄色 | 三级黄免费看 | 亚洲综合激情小说 | 91免费看黄 | 麻豆影视网站 | 久久国产亚洲精品 | 国产精品国产三级国产aⅴ无密码 | 欧美日韩网站 | 黄污网| 在线视频 国产 日韩 | 日日操天天操夜夜操 | 久久国产影院 | 91网免费看| 久久久毛片 | 亚洲欧洲中文日韩久久av乱码 | 免费av片在线 | 视频成人| 国产一区欧美日韩 | 色多多视频在线观看 | 日韩免费在线观看 | 美女黄频网站 | 涩涩网站免费 | 国产精品久久久久av免费 | 99视频+国产日韩欧美 | 女人18毛片90分钟 | 亚洲精品国精品久久99热一 | 天天天天射 | 日韩久久久久久久久久 | 免费一级特黄录像 | 国产日韩欧美视频 | av免费看电影 | 色诱亚洲精品久久久久久 | 国产亚洲婷婷免费 | 免费黄色激情视频 | 一区二区三区在线视频观看58 | 日韩精品一区二区三区电影 | 天天综合网久久综合网 | 久久免费精彩视频 | 探花视频在线观看+在线播放 | 国产一区在线观看免费 | 五月天久久 | 夜夜夜夜夜夜操 | 久久国产精品一区二区三区 | 午夜精品久久久久久久99 | 日韩a欧美 | 国产这里只有精品 | 黄p在线播放 | 成人在线免费观看网站 | 三级av免费看 | av一级网站 | 久草视频在线资源 | 天天碰天天操 | 国产系列精品av | 精品在线观看一区二区 | 欧美精品免费在线观看 | 人人澡人 | 99999精品 | 久久久国产一区二区 | 中文字幕免费看 | 国产精品久久一区二区三区, | 国产精品久久久久久欧美 | 九九有精品| 99午夜| 国产成人免费在线观看 | 97超碰人人澡 | 三级av中文字幕 | 亚洲毛片久久 | 精品美女在线观看 | 狠狠色婷婷丁香六月 | 99免费看片 | 99 精品 在线| 全久久久久久久久久久电影 | 99c视频高清免费观看 | 久久久久一区 | 久久国产精品视频观看 | 亚洲成人av一区二区 | 中文字幕免费成人 | 色吊丝av中文字幕 | 久久久久免费精品 | 国产日韩欧美网站 | 日本中文在线播放 | 日韩1级片 | 一区二区丝袜 | 日日摸日日碰 | 亚洲精品h | 五月天综合色激情 | 综合国产视频 | 探花系列在线 | 91精品夜夜 | 中文永久免费观看 | 亚洲一级二级三级 | 欧美专区亚洲专区 | 成人av在线看| 久久久国产精品麻豆 | 三级av片 | av三区在线 | 亚洲精品男女 | 国产电影黄色av | 精品国模一区二区 | 91高清免费 | 三级av网| 在线中文字幕一区二区 | 尤物97国产精品久久精品国产 | 亚洲免费av在线播放 | 久久久久久久国产精品影院 | 亚洲国产午夜精品 | 日本黄色免费电影网站 | 中文字幕123区 | 91视频 - x99av| 免费av大片| 婷婷色狠狠| 亚洲免费成人 | 色播五月激情综合网 |