ros基础知识理解

本文介绍了在DebianLinux中使用apt命令管理和更新软件包,以及如何配置bash环境变量,操作CMakeLists以构建ROS项目,包括消息、服务和动作的声明,以及动态参数配置和catkin包管理。还详细讲解了如何编写和使用launch文件以简化ROS节点的启动过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要参考这位博主的链接:点击
1、apt命令

大部分的软件安装,更新,卸载都是利用 apt 命令来实现的。apt是apt-get,apt-cache,apt-config三条命令的集合。
2、sudo apt install<软件包名> // 安装软件
sudo apt remove<软件包名> // 卸载软件
sudo apt updata // 更新可用软件包列表
sudo apt upgrade // 更新已安装的包
sudo apt-key <密钥> // 管理 Debian Linux 系统中的软件包密钥
3、配置环境变量
bash是什么:就是解释你输入到终端程序里的东西,能够基于你的输入来运行命令。
4.source ~./bashrc
soure是立即运行,修改了.bashrc文件后,需要重启才会生效。
5.echo写入
echo “source /opt/ros/noetic/setup.bash” >> ~/.bashrc
把source这条命令写入到.bashrc这个文件中。source /opt/ros/noetic/setup.bash的目的就是在开新的terminal的时候,运行setup.bash。
6.ros中相关文件
/bin:可执行的二进制文件
/etc:与ros和catkin相关的配置文件
/include:头文件
/lib:库文件
/share:ros功能包
env.和setup. :配置文件
7.编写的CMakeLists
project(hello_world)
表示功能包名称(也就是之前创建功能包的名字),在之后的CMakeLists代码里,可以使用${PROJECT_NAME}变量来引用这个包名。
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
)
这里是设置构建需要的软件包。
find_package(Boost REQUIRED COMPONENTS system)
表示默认添加系统依赖(这个保持注释状态即可)
catkin_python_setup()
启动python模块支持。(代码如果是用C++写的话,这个保持注释即可,如果是python写的需要取消注释)
**

接下来声明ros消息,服务,动作

**

(1)
Generate messages in the ‘msg’ folder
add_message_files(
FILES
Message1.msg
Message2.msg
)
add_message_files是添加消息文件选项。FILES 将引用当前功能包目录的 msg 目录中的*.msg文件,自动生成一个头文件(.h)。在这个例子中,我们将使用消息文件 Message1.msg 和 Message2.msg
(2)
Generate services in the ‘srv’ folder
add_service_files(
FILES
Service1.srv
Service2.srv
)
add_service_files 是添加要使用的服务文件的选项。使用 FILES 会引用功能包目录中的srv 目录中的
.srv 文件。 在这个例子中,用户可以选择使用服务文件Service1.srv 和Service2.srv
(3)
Generate actions in the ‘action’ folder
add_action_files(
FILES
Action1.action
Action2.action
)
add_action_files 是添加要使用的动作文件的选项。使用 FILES 会引用功能包目录中的action 目录中的*.action 文件。 在这个例子中,用户可以选择使用服务文件Action1.action 和Action2.action
(4)
generate_messages(
DEPENDENCIES
std_msgs
)
添加生成消息、服务时的依赖包。generate_messages 是设置依赖的消息的选项。此示例是将 DEPENDENCIES 选项设置为使用std_msgs 消息包。
接下来是声明ros动态参数配置

################################################
## Declare ROS dynamic reconfigure parameters ##
################################################
 
## To declare and build dynamic reconfigure parameters within this
## package, follow these steps:
## * In the file package.xml:
##   * add a build_depend and a exec_depend tag for "dynamic_reconfigure"
## * In this file (CMakeLists.txt):
##   * add "dynamic_reconfigure" to
##     find_package(catkin REQUIRED COMPONENTS ...)
##   * uncomment the "generate_dynamic_reconfigure_options" section below
##     and list every .cfg file to be processed
 
## Generate dynamic reconfigure parameters in the 'cfg' folder
generate_dynamic_reconfigure_options(
  cfg/DynReconf1.cfg
  cfg/DynReconf2.cfg
)

一般保持注释状态即可。
分割线=================================
catkin特定配置

###################################
## catkin specific configuration ##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_DIRS: uncomment this if your package contains header files
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
## 运行时依赖,INCLUDE_DIRS 表示将使用INCLUDE_DIRS 后面的内部目录 include 的头文件。
## LIBRARIES 表示将使用随后而来的功能包的库。
## CATKIN_DEPENDS 后面指定如 roscpp 或 std_msgs 等依赖包。目前的设置是表示依赖于 roscpp 和 std_msgs。
## DEPENDS 是一个描述系统依赖包的设置。
catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES static_avoidance
#  CATKIN_DEPENDS roscpp rospy std_msgs
#  DEPENDS system_lib
)

运行时依赖。
INCLUDE_DIRS 表示将使用INCLUDE_DIRS 后面的内部目录 include 的头文件。
LIBRARIES 表示将使用随后而来的功能包的库
CATKIN_DEPENDS 后面指定如 roscpp 或 std_msgs 等依赖包。目前的设置是表示依赖于 roscpp 和 std_msgs
DEPENDS 是一个描述系统依赖包的设置。
(一般不用改这部分,保持默认的样子就行)

添加头文件路径,当前程序包的头文件路径位于其他文件路径之前

## Specify additional locations of header files
## Your package locations should be listed before other locations
include_directories(
# include
  ${catkin_INCLUDE_DIRS}
)

include_directories 是可以指定包含目录的选项。目前设定为${catkin_INCLUDE_DIRS},这意味着将引用每个功能包中的 include 目录中的头文件。如果想指定一个额外的 include 目录时,写在${catkin_INCLUDE_DIRS}的下一行即可。
(如果你写了头文件,需要把include前面的注释取消)。
5.声明 C++ 库

## Declare a C++ library
add_library(${PROJECT_NAME}
  src/${PROJECT_NAME}/hello_world.cpp
)

add_library 声明构建之后需要创建的库。还可以引用位于功能包的 src 目录中的.cpp 文件来创建static_lib库的命令。
添加库的 cmake 目标依赖

## Add cmake target dependencies of the library
## as an example, code may need to be generated before libraries
## either from message generation or dynamic reconfigure
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

一般保持注释状态即可
声明C++可执行文件

## Declare a C++ executable
## With catkin_make all packages are built within a single CMake context
## The recommended prefix ensures that target names across packages don't collide
add_executable(${PROJECT_NAME}_node src/hello_world_node.cpp)

要把src/static_main.cpp改成src/<主函数文件名>.cpp
把${PROJECT_NAME}_node改成一个你自己取的名字比如就叫“static_main”,作为你主函数文件的映射名
重命名 c++可执行文件

## Rename C++ executable without prefix
## The above recommended prefix causes long target names, the following renames the
## target back to the shorter version for ease of user use
## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")

一般保持注释状态即可

## Add cmake target dependencies of the executable
## same as for the library above
add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

添加可执行文件的 cmake 目标依赖,可执行文件的依赖关系,而不是上面提到的库。在建立可执行文件之前,先创建消息文件的情况下会经常用
P R O J E C T N A M E n o d e 改成之前的主函数文件的映射名,比如上面的就是 s t a t i c m a i n 把 {PROJECT_NAME}_node改成之前的主函数文件的映射名,比如上面的就是static_main 把 PROJECTNAMEnode改成之前的主函数文件的映射名,比如上面的就是staticmain{PROJECT_NAME}_node改成之前的建的C++库名,比如上面的就是static_lib

add_dependencies(static_lib ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
add_dependencies(static_main ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

指定库、可执行文件的链接库

## Specify libraries to link a library or executable target against
target_link_libraries(${PROJECT_NAME}_node
  ${catkin_LIBRARIES}
)

target_link_libraries 是在创建特定的可执行文件之前将库和可执行文件进行链接的选项。

举个例子

target_link_libraries(static_lib
  ${Franka_LIBRARIES} 
  ${catkin_LIBRARIES}
)
target_link_libraries(static_main
  static_lib
  ${Franka_LIBRARIES} 
  ${catkin_LIBRARIES}
)

分别是自己建的C++库static_lib和主函数映射名static_main添加需要用到的一些外部库。

## Mark executable scripts (Python etc.) for installation
## in contrast to setup.py, you can choose the destination
catkin_install_python(PROGRAMS
  scripts/my_python_script
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

设置用于安装的可执行脚本 (保持默认注释状态即可)
三、launch文件的编写
对于一个复杂的系统,会有十几个、几十个甚至是上百个节点在运行,如果我们每次都是采取“打
开终端、运行 rosrun 指令”来启动应用程序,显得效率非常低。我们需要一个更方便的方式来启动系统。ROS 中提供了“使用 launch 文件 + roslaunch”命令来完成系统的启动。具体的实现方法如下:
一、添加launch文件
选定功能包右击 ——> 添加 launch 文件夹
选定 launch 文件夹右击 ——> 添加 launch 文件
编写launch文件
二、编写launch文件
下面是一个launch文件示例:

<launch>
    <node pkg="hello" type="hello_vs" name="hello" output="screen" />
    <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
</launch>

node ——包含的某个节点
pkg —— 节点所在的功能包的名字
type —— 节点的二进制可执行文件的名字
name —— 节点启动后,可有 ROS 识别出的节点名称。我们在编写节点时,通过 ros::init(argc, argv, “node_name”)已经指定了节点名,当节点启动后,这个启动文件(*.launch)会给我们一个重新命名节点的机会。
output—— 设置日志的输出目标。通过启动文件启动节点后,默认节点输出信息会输入到一个日志文件而不是屏幕上。想要在屏幕上打印信息,需要加“output="screen”。
所以上面的launch文件示例是实现了hello_vs.cpp文件里面的功能,还有同时启动乌龟节点的功能。
运行launch文件
在vscode界面ctrl+shift+B编译文件
打开一个终端运行:roscore
重新打开一个终端输入命令:
source ./devel/setup.bash
roslaunch package_name launch_file_name
ROS省略命令“source ./devel/setup.bash”
每次新开一个终端都要输入命令“source ./devel/setup.bash” ,很麻烦,我们可以通过
sudo gedit ~/.bashrc
打开.bashrc文件,然后在中写入命令
source /home/***/your_ws/devel/setup.bash
其中***是你的计算机名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值