IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> ROS知识:分析和改写小乌龟代码【01】 -> 正文阅读

[人工智能]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)


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)

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
)
set(turtlesim_node_HDRS
? include/turtlesim/turtle_frame.h
)

qt5_wrap_cpp(turtlesim_node_MOCS ${turtlesim_node_HDRS})


add_executable(turtlesim_node ${turtlesim_node_SRCS} ${turtlesim_node_MOCS})
target_link_libraries(turtlesim_node Qt5::Widgets ${catkin_LIBRARIES} ${Boost_LIBRARIES})
add_dependencies(turtlesim_node turtlesim_gencpp)

add_executable(turtle_teleop_key tutorials/teleop_turtle_key.cpp)
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")

第二章 项目CMakeLists.txt文件

因为项目自己定义了CMakeLists.txt,此文件对编译至关重要,因此,需要优先查看。事实上,根据文件CMakeLists.txt能把绝大部分工程结构条理理清楚;对小乌龟节点搞通。

(更新中。。。。。。)





?????

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:22:35  更:2022-04-09 18:25:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:17:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码