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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ROS知识:分析和改写小乌龟代码【01】

發布時間:2025/3/21 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ROS知识:分析和改写小乌龟代码【01】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ROS之游戲手柄控制烏龜和機器人_u014587147的專欄-CSDN博客

本篇對小烏龜的項目進行分析,看看一個普通的ROS項目到底如何構建,才能算完整合法工程;學完后,期望可以開發我們自己的項目。

第一章 項目導入

1.1建立工作空間myMake、導入功能包ros_tutorials

mkdir -p ~/myCmake/src cd ~/myCmake/src git clone https://github.com/ros/ros_tutorials.git

將myCmake工作空間-ros_tutorials包內的烏龜節點保留,其他刪除;

cd ~/myCmake/src/ros_tutorials rm -rf ros*

因為導入的ros_tutorials目錄內存在四個應用包:

因此,刪除前三個,保留turtlesim一個功能包。

進入烏龜功能包目錄,用tree -L 2 語句顯示內涵路徑,全部內容如下:

. ├── CHANGELOG.rst ├── CMakeLists.txt ├── images # 相關的圖片文件 ├── include # 相關的頭文件 ├── launch # 運行時文件 用roslaunch調用 ├── msg # 消息數據結構定義(傳遞用) ├── package.xml # 包結構定義 ├── src # cpp程序代碼 ├── srv # 服務消息數據結構定義(傳遞用) └── tutorials # 共有的程序函數

更詳細的包內信息是:

├── CHANGELOG.rst ├── CMakeLists.txt ├── images │ ├── box-turtle.png │ ├── diamondback.png... ... ... │ └── turtle.xar ├── include │ └── turtlesim │ ├── turtle_frame.h │ └── turtle.h ├── launch │ └── multisim.launch ├── msg │ ├── Color.msg │ └── Pose.msg ├── package.xml ├── src │ ├── turtle.cpp │ ├── turtle_frame.cpp │ ├── turtlesim │ │ └── __init__.py │ └── turtlesim.cpp ├── srv │ ├── Kill.srv │ ├── SetPen.srv │ ├── Spawn.srv │ ├── TeleportAbsolute.srv │ └── TeleportRelative.srv └── tutorials├── draw_square.cpp├── mimic.cpp└── teleop_turtle_key.cpp

1.2 打開CMakeLists.txt查看對應的代碼

cmake_minimum_required(VERSION 3.0.2)?? -----指定cmake最低版本3。02
project(turtlesim) --------指定工程名稱“turtlesim”

find_package(catkin REQUIRED COMPONENTS geometry_msgs message_generation rosconsole roscpp roscpp_serialization roslib rostime std_msgs std_srvs)

-----告訴catkin所依賴的組件清單

find_package(Qt5Widgets REQUIRED)

----------指定依賴于QT5Widgets【主要從環境的PATH變量查找,較為智能,比如遇到bin結尾的路徑,將自動回到上一級路徑查找。
find_package(Boost REQUIRED COMPONENTS thread)

include_directories(include ${catkin_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS})

---------------指定include路徑的列表
link_directories(${catkin_LIBRARY_DIRS})

---------------------指定靜態庫的列表

add_message_files(DIRECTORY msg FILES? Color.msg Pose.msg)

---------------將自己定義的message表加入
add_service_files(DIRECTORY srv FILES
????????????????? Kill.srv
????????????????? SetPen.srv
????????????????? Spawn.srv
????????????????? TeleportAbsolute.srv
????????????????? TeleportRelative.srv)
generate_messages(DEPENDENCIES geometry_msgs std_msgs std_srvs)

---------------------將自己規定的service加入列表

catkin_package(CATKIN_DEPENDS geometry_msgs message_runtime std_msgs std_srvs)

--------------- 自己定義的應用包中加入支持

set(turtlesim_node_SRCS
? src/turtlesim.cpp
? src/turtle.cpp
? src/turtle_frame.cpp
)

---------------------將自己節點的cpp源文件集中加入列表
set(turtlesim_node_HDRS
? include/turtlesim/turtle_frame.h
)

--------------- 自己定義的頭文件加入

qt5_wrap_cpp(turtlesim_node_MOCS ${turtlesim_node_HDRS})

---------------------將qt5加入
add_executable(turtlesim_node ${turtlesim_node_SRCS} ${turtlesim_node_MOCS})

---------------------指出一個編譯節點內目標文件turtlesim_node【注意:節點內可有多個】
target_link_libraries(turtlesim_node Qt5::Widgets ${catkin_LIBRARIES} ${Boost_LIBRARIES})

---------------------以上目標文件的鏈接庫
add_dependencies(turtlesim_node turtlesim_gencpp)

---------------------指出 目標文件turtlesim_node其它依賴

add_executable(turtle_teleop_key tutorials/teleop_turtle_key.cpp)

---------------------指出一個編譯節點內目標文件turtle_teleop_key
target_link_libraries(turtle_teleop_key ${catkin_LIBRARIES})

---------------------以上目標文件的鏈接庫
add_dependencies(turtle_teleop_key turtlesim_gencpp)


add_executable(draw_square tutorials/draw_square.cpp)
target_link_libraries(draw_square ${catkin_LIBRARIES} ${Boost_LIBRARIES})
add_dependencies(draw_square turtlesim_gencpp)
add_executable(mimic tutorials/mimic.cpp)
target_link_libraries(mimic ${catkin_LIBRARIES})
add_dependencies(mimic turtlesim_gencpp)

install(TARGETS turtlesim_node turtle_teleop_key draw_square mimic
? RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})

install(DIRECTORY images
? DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
? FILES_MATCHING PATTERN "*.png" PATTERN "*.svg")

第二章 烏龜項目設計分解


2.1 teleop_turtle_key.cpp文件

該文件有兩個內容:

  • 保存和恢復終端數據,

? 在進入程序后,將本終端數據保存;在退出程序后,恢復終端數據。

  • TeleopTurtle類(和鍵盤輸入相關)

????????這個類是遙控烏龜的節點,有以下幾個功能:

? ? ? ? ? ?1)接受鍵盤的輸入

? ? ? ? ? ?2)按照按鍵值,寫好數據Twist

? ? ? ? ? ?3)發出Topic=【turtle1/cmd_vel】內含:前進幾個格、方向幾度,存Twist數據;

2.2 draw_square.cpp文件

????????該文為全局函數,是對環境進行設定,就是在接到TeleopTurtle類的【turtle1/cmd_vel】消息后,小烏龜所在位置,注意,這是一個抽象的方框,在環境內部。當該框確定后,在該框中開始畫烏龜。

? ? ? ? 主要功能:

  • ? ? ? ? ?對烏龜的行進、選轉、停止用狀態機表示;
  • ? ? ? ? ?發出Topic=< turtle1/cmd_vel>? 通知烏龜類,如何擺放當前圖片;
  • ? ? ? ? ?接受Topic=<turtle1/pose>;獲取烏龜框圖片位置的信息;
  • ? ? ? ? ?接收復位信號
  • ? ? ? ? ?延時發送

? ? ? ? ?

2.3 話題【turtle1/cmd_vel】

? ? ? ? ??



?????

總結

以上是生活随笔為你收集整理的ROS知识:分析和改写小乌龟代码【01】的全部內容,希望文章能夠幫你解決所遇到的問題。

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