(54 封私信 / 80 条消息) vscode下调试ROS项目,节点调试,多节点调试,roslauch调试 - 知乎
版本:core desktop desktop-full
包含工具有点差别
如何理解ROS的ros::NodeHandle,学习ROS一年后的体会-CSDN博客
【ROS学习笔记】16.常用可视化工具的使用_rqt image view-CSDN博客
其实就是:通信框架+实用软件。ROS能做到的,失去ROS也能做到。
(48 封私信 / 80 条消息) 如何优雅地在windows上玩ROS(一个紧致的解决方案) - 知乎
Windows版Ros环境的搭建以及Rviz显示激光点云信息_rviz windows-CSDN博客
(48 封私信 / 72 条消息) ROS核心概念解析:从Node到Master,再到roslaunch的全面指南 - 知乎
ROS基础(三):参数服务器、命名空间与launch文件大全解_ros 中的参数空间-CSDN博客
如何理解ROS的ros::NodeHandle,学习ROS一年后的体会-CSDN博客
rospy & roscpp
(57 封私信 / 80 条消息) ROS学习笔记(2)--roscpp和rospy - 知乎
rospy 和 roscpp 的区别以及 rospy 的常用函数 - 简书
ROS 1中rospy与roscpp常用函数对照表 - DeepSeek
关于rospy和roscpp订阅中的spin - Zyhaire - 博客园
机器人操作系统入门(七)rospy客户端库 - 从头再来,不要慌 - 博客园
以下是一个 rospy(Python)和 roscpp(C++)常用函数的对照表(ROS 1),涵盖节点初始化、话题、服务、参数服务器等核心功能:
1. 节点初始化
| 功能 | rospy (Python) | roscpp (C++) |
|---|---|---|
| 初始化节点 | rospy.init_node('node_name') |
ros::init(argc, argv, "node_name") |
| 检查节点是否关闭 | rospy.is_shutdown() |
ros::ok() |
| 关闭节点 | rospy.signal_shutdown("reason") |
ros::shutdown() |
| 获取节点名称 | rospy.get_name() |
ros::this_node::getName() |
2. 话题发布与订阅
| 功能 | rospy (Python) | roscpp (C++) |
|---|---|---|
| 发布者 | pub = rospy.Publisher('topic', MsgType, queue_size) |
ros::Publisher pub = nh.advertise<MsgType>("topic", queue_size) |
| 订阅者 | rospy.Subscriber('topic', MsgType, callback) |
ros::Subscriber sub = nh.subscribe("topic", queue_size, callback) |
| 发布消息 | pub.publish(msg) |
pub.publish(msg) |
| 等待连接 | rospy.wait_for_message('topic', MsgType) |
需手动实现(如循环检查 pub.getNumSubscribers()) |
3. 服务服务器与客户端
| 功能 | rospy (Python) | roscpp (C++) |
|---|---|---|
| 服务服务器 | srv = rospy.Service('service', SrvType, handler) |
ros::ServiceServer srv = nh.advertiseService("service", handler) |
| 服务客户端 | rospy.ServiceProxy('service', SrvType) |
ros::ServiceClient client = nh.serviceClient<SrvType>("service") |
| 调用服务 | response = srv.call(request) |
client.call(request, response) |
4. 参数服务器
| 功能 | rospy (Python) | roscpp (C++) |
|---|---|---|
| 设置参数 | rospy.set_param('key', value) |
ros::param::set("key", value) |
| 获取参数 | value = rospy.get_param('key') |
ros::param::get("key", value) |
| 检查参数是否存在 | rospy.has_param('key') |
ros::param::has("key") |
| 删除参数 | rospy.delete_param('key') |
ros::param::del("key") |
5. 定时器(Timer)
| 功能 | rospy (Python) | roscpp (C++) |
|---|---|---|
| 创建定时器 | rospy.Timer(rospy.Duration(secs), callback) |
ros::Timer timer = nh.createTimerDuration(secs), callback |
6. 日志输出
| 功能 | rospy (Python) | roscpp (C++) |
|---|---|---|
| 打印日志 | rospy.loginfo(msg) |
ROS_INFO("%s", msg) |
| 警告日志 | rospy.logwarn(msg) |
ROS_WARN("%s", msg) |
| 错误日志 | rospy.logerr(msg) |
ROS_ERROR("%s", msg) |
7. 时间操作
| 功能 | rospy (Python) | roscpp (C++) |
|---|---|---|
| 获取当前时间 | rospy.Time.now() |
ros::Time::now() |
| 创建时间对象 | rospy.Time(secs, nsecs) |
ros::Time(secs, nsecs) |
| 持续时间 | rospy.Duration(secs) |
ros::Duration(secs) |
| 休眠 | rospy.sleep(duration) |
ros::Duration(duration).sleep() |
8. 其他工具
| 功能 | rospy (Python) | roscpp (C++) |
|---|---|---|
| 获取命名空间 | rospy.get_namespace() |
ros::this_node::getNamespace() |
| 解析ROS路径 | rospy.get_package_path('pkg_name') |
需使用 ros::package::getPath("pkg_name") |
关键区别说明
- 命名空间处理:
- rospy 自动处理
~(私有命名空间),而 roscpp 需显式调用ros::NodeHandle("~")。
- rospy 自动处理
- 消息类型:
- Python 中消息类型为
module_name.msg.MsgType(如std_msgs.msg.String)。 - C++ 中需包含头文件(如
#include <std_msgs/String.h>),类型为std_msgs::String。
- Python 中消息类型为
- 线程模型:
- rospy 默认单线程(需手动开启
rospy.spin()),roscpp 多线程由ros::spin()或ros::MultiThreadedSpinner管理。
- rospy 默认单线程(需手动开启
希望这个对照表能帮助你快速切换或对比两种语言的ROS开发!
Master & Nodes
(48 封私信 / 64 条消息) ROS入门(四)---ROS节点 - 知乎
Master节点管理器(比如帮助节点找到彼此);Node节点,一个可执行文件(进程),就是我提的编程“元件”
Messages & Topics
消息和话题,一种不同时不同地的通信机制及分类方式。节点可以发布消息到话题,也可以订阅话题以接收消息。
Workspace
(48 封私信 / 80 条消息) 【ROS笔记】工作空间(workspace)、功能包(package)的介绍及创建 - 知乎
工作空间,很像VSCode打开的工作目录来管理许多文件;
更像Python的venv虚拟环境来设定环境变量、各个软件包的定位。
四个部分:
src: 代码空间(Source Space),最常用、最重要的文件夹,用来存储所有ROS功能包(package)的源文件。功能包(package)是ROS中的基本单元,包含ROS节点、库、配置文件等:config:功能包的配置文件,用户创建。include:需要用到的头文件。scripts:可以直接运行的Python脚本。src:需要编译的C++代码。launch:所有启动文件。msg:自定义的消息类型。srv:自定义的服务类型。action:自定义的动作指令。CMakeLists.txt:Catkin编译器编译功能包的规则。package.xml: 功能包清单,可得到该package的名称、版本号、信息描述、作者信息和许可信息等。更重要的,<build_depend> ... </build_depend>标签定义了代码编译所依赖的其它功能包,<exec_depend> ... </exec_depend>标签定义了可执行程序运行时所依赖的其它功能包。
build: 编译空间(Build Space),由catkin_make命令自动生成,用来存储工作空间编译过程中产生的缓存信息和中间文件。devel: 开发空间(Development Space),由catkin_make命令自动生成,用来放置编译生成的可执行文件。install: 安装空间(Install Space),不是必需的,很多工作空间没有该文件夹。编译成功后,可以使用make install命令将可执行文件安装到该空间中,运行该空间中的环境变量脚本,即可在终端中运行这些可执行文件。
创建工作空间
创建一个ROS工作空间(ROS Workspace) - Jason_hjx - 博客园
名称以catkin_ws为例。
mkdir -p ~/catkin_ws/src #使用系统命令创建工作空间目录
cd ~/catkin_ws/src
catkin_init_workspace # ROS的工作空间初始化命令
创建功能包
ROS不允许功能包的嵌套,多个功能包必须平行放置在代码空间(
src)中。
ROS直接创建功能包的命令catkin_create_pkg,用法:
catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
即需要输入功能包名称和所依赖的其它功能包。举例,进入代码空间,创建功能包:
cd ~/catkin_ws/src
catkin_create_pkg leraning_communication std_msgs rospy roscpp
对于新的功能包,现在往里面写代码吧……Happy Coding~
我的观念里,驱动代码和决策代码是分开的。对于特定的比赛任务,我们只需要留一个功能包来存放决策代码,毕竟决策代码也难以复用。
编译工作空间
创建完成后,在工作空间的根目录下使用catkin_make命令编译整个工作空间:
cd ~/catkin_ws # 回到工作空间的根目录
catkin_make # 编译整个工作空间
编译中,工作空间的根目录会自动产生devel和build两个文件夹即其中的文件。
激活工作空间
编译完成后,在devel文件夹中已经产生几个setuo.*sh形式的环境变量设置脚本,使用source命令运行这些脚本,可以使工作空间中的环境变量生效。
source ~/catkin_ws/devel/setup.bash # ~/catkin_ws是工作空间目录
这样即可直接使用工作空间内的软件包(就像激活python虚拟环境后才可以执行python的可执行包)。检查环境变量是否生效:
echo $ROS_PACKAGE_PATH
如果打印的路径中包含当前工作空间中的路径,则说明环境变量设置成功。
source命令设置的环境变量只能在当前终端生效,如果希望在所有终端生效,需要在终端配置文件中加入环境变量设置:echo "source /home/xxx/catkin_ws/devel/setup.bash" >> ~/.bashrc
使用工作空间里的功能包
rospack # 获取功能包的信息
rosdep # 自动安装功能包依赖的其它包
roscd # 功能包目录跳转
roscp # 拷贝功能包中的文件
rosed # 编辑功能包中的文件
rosrun # 运行功能包中的可执行文件
roslaunch # 运行启动文件,一次性把多个节点按照我们预先的配置启动起来
rosparam
参数服务器,管参数,可能还调参吧
roscore
总程序。rosout类似stdout
roslaunch
一次性把多个节点按照我们预先的配置启动起来
格式包括以下标签:
<launch> <!--根标签-->
<node> <!--需要启动的node及其参数-->
<include> <!--包含其他launch-->
<machine> <!--指定运行的机器-->
<env-loader> <!--设置环境变量-->
<param> <!--定义参数到参数服务器-->
<rosparam> <!--启动yaml文件参数到参数服务器-->
<arg> <!--定义变量-->
<remap> <!--设定参数映射-->
<group> <!--设定命名空间-->
</launch> <!--根标签-->
调试
vscode下调试ROS项目,节点调试,多节点调试,roslauch调试 - 知乎
可视化工具
【ROS学习】- PlotJuggler绘图工具的安装使用-CSDN博客
ROS:Dynamic Reconfigure 动态参数调节_ros dynamic reconfigure-CSDN博客