ros基础VScode版

news/2025/2/22 22:04:48/

1:node(节点):单独模块
2:topic(话题):进行话题的通讯
3:service(服务):也是通讯的一种,就是你发送他能接受,但是不能反馈
4:action:程序运行需要进行等待
5:tf :机器人有很多的坐标系,就算依靠这个tf进行统一的发布,进行查阅
6:parameter(参数服务器):机器人参数编制集成到服务器中。启动起来修改参数就可以了
7:rosbag log rqt launch

查看:
rosnode list: 查看节点
rostopic list : 查看当前所有订阅和发布的主题 运行
rostopic list -h : 可以看到如下帮助信息
rostopic list -v :通过将“-v”选项添加到rostopic list命令,可以分开发布话题和订阅话题,并将每个话题的消息类型一起显示。

首先我们重新温习一下ROS术语。
命令 详细说明
rostopic list 显示活动的话题目录
rostopic echo [话题名称] 实时显示指定话题的消息内容
rostopic find [类型名称] 显示使用指定类型的消息的话题
rostopic type [话题名称] 显示指定话题的消息类型
rostopic bw [话题名称] 显示指定话题的消息带宽(bandwidth)
rostopic hz [话题名称] 显示指定话题的消息数据发布周期
rostopic info [话题名称] 显示指定话题的信息
rostopic pub [话题名称] [消息类型] [参数] 用指定的话题名称发布消息

rosservice list :是列出当前正在进行通信的service服务通信的service_name,而
rossrv list:则是列出系统中所有自定义服务消息文件的service_name,前者是“列出正在运行的service_name”而后者是列出所有的service_name“这两者有本质的不同
Rosservice list -n:输出发起服务通信的节点,即查找指定服务话题的客户端:

参数

rosparam list :参数

rostopic echo / turtle1/cmd_vel

查看节点运行状态
rosnode --help

查看当前通讯话题的
rostopic --help

rosmsg list 查看消息

使用VScode来创建编译ROS

步骤一:创建文件夹进行无程序编译

mkdir -p catkin_ws/src
cd ..
catkin_make

步骤二:编译成功后在catkin_ws进行运行VScode

cd catkin_ws
code .

步骤三:打开了VScode程序,再进行
快捷键 ctrl + shift + B 调用编译,,选择:catkin_make:build
在这里插入图片描述进入:tasks.json文件进行替换程序
在这里插入图片描述

{
// 有关 tasks.json 格式的文档,请参见// https://go.microsoft.com/fwlink/?LinkId=733558"version": "2.0.0","tasks": [{"label": "catkin_make:debug", //代表提示的描述性信息"type": "shell",  //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行"command": "catkin_make",//这个是我们需要运行的命令"args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”"group": {"kind":"build","isDefault":true},"presentation": {"reveal": "always"//可选always或者silence,代表是否输出信息},"problemMatcher": "$msCompile"}]
}

步骤四:创建 ROS 功能包

选定 src 右击 —> create catkin package

在这里插入图片描述添加运行程序名字和相关程序的依赖
运行程序名字如:hello

hello

在这里插入图片描述
相关依赖:roscpp rospy std_msgs

roscpp  rospy  std_msgs

在这里插入图片描述就出现了:package.xml文件
在这里插入图片描述如果依赖写错了可以到文件中进行修改
快捷键 ctrl + shift + B在这里插入图片描述

步骤五:创建一个cpp文件在这里插入图片描述
添加程序

/*控制台输出 HelloVSCode !!!*/
#include "ros/ros.h"int main(int argc, char *argv[])
{setlocale(LC_ALL,"");//执行节点初始化ros::init(argc,argv,"HelloVSCode");//输出日志ROS_INFO("Hello VSCode!!!哈哈哈哈哈哈哈哈哈哈");return 0;
}

步骤六:修改CMakeLists.txt文件
在这里插入图片描述
在Build下程序

###########
## Build ##
###########

在这里插入图片描述
步骤七:快捷键 ctrl + shift + B进行编译

在这里插入图片描述
步骤八:运行程序

roscore
source ./devel/setup.bash 
rosrun hello_vscode hello_vscode_c

运行成功出现打印在这里插入图片描述

问题

如果ros/ros.h报红找不到在:c_cpp_properties.json文件中添加自己的ros文件的路径
在这里插入图片描述
步骤八:运行程序

roscore
source ./devel/setup.bash 
rosrun hello_vscode hello_vscode_c
```![在这里插入图片描述](https://img-blog.csdnimg.cn/f6b254f9509c4e099c9263fecdb57806.png)问题: 如果没有代码提示,修改 .vscode/c_cpp_properties.json
设置 "cppStandard": "c++17"
![在这里插入图片描述](https://img-blog.csdnimg.cn/dbfa401865174b4f91579e392d6742f2.png)问题:main 函数的参数不可以被 const 修饰,当ROS__INFO 终端输出有中文时,会出现乱码
解决办法:在函数开头加入下面代码的任意一句
![在这里插入图片描述](https://img-blog.csdnimg.cn/09793fc3067248fe8c2150fefd6a16ec.png)```cpp
setlocale(LC_CTYPE, "zh_CN.utf8");
setlocale(LC_ALL, "");

使用python进行程序运行

步骤一:在hello_vscode文件夹下新建 scripts 文件夹,添加 python 文件,并添加可执行权限

在这里插入图片描述

步骤二:程序代码

#! /usr/bin/env python3
"""#! /usr/bin/env python:这个是添加python的编译器Python 版本的 HelloVScode,执行在控制台输出 HelloVScode实现:1.导包2.初始化 ROS 节点3.日志输出 HelloWorld"""import rospy # 1.导包if __name__ == "__main__":rospy.init_node("Hello_Vscode_p")  # 2.初始化 ROS 节点rospy.loginfo("Hello VScode, 我是 Python ....")  #3.日志输出 HelloWorld

步骤三:修改权限:在scripts 文件夹点击右键在集成终端中打开
在这里插入图片描述步骤四:修改权限的程序

 sudo chmod +x *.py

在这里插入图片描述步骤五:修改配置文件

在这里插入图片描述当不配置CMakeLists.txt文件中
是找不到解释器,会进行报错的
如果不配置CMakeLists.txt文件就创建·一个软链接

sudo ln -s /usr/bin/python3 /usr/bin/python

步骤六:运行程序

roscore
source ./devel/setup.bash 
rosrun hello_vscode hello_vscode_p.py

在这里插入图片描述

创建launch作用是launch 文件,可以一次性启动多个 ROS 节点

2.实现

选定功能包右击 ---> 添加 launch 文件夹选定 launch 文件夹右击 ---> 添加 launch 文件

在这里插入图片描述

编辑 launch 文件内容

这个是乌龟的launch

<launch><node pkg="turtlesim" type="turtlesim_node" name="turtle_GUI" /><node pkg="turtlesim" type="turtle_teleop_key" name="turtle_key"/>
</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>
  node ---> 包含的某个节点pkg -----> 功能包type ----> 被运行的节点文件name --> 为节点命名output-> 设置日志的输出目标,这个设置成功以后可以在终端上看到

在这里插入图片描述

运行 launch 文件,在运行launch时要进行保存后在运行否者会报错

roscore
source ./devel/setup.bash 
roslaunch hello_vscode start_turtle.launch 

http://www.ppmy.cn/news/40875.html

相关文章

jacoco统计覆盖率最佳实践

jacoco统计覆盖率最佳实践jacoco总结Jacoco安装代码覆盖率介绍行覆盖分支覆盖方法覆盖覆盖率的误区代码覆盖率意义覆盖率报告解析启动jacoco agent进行插桩**单元测试offline模式&#xff1a;**mvn命令增加参数在pom文件中添加jacoco插件**功能测试on-the-fly模式**&#xff1a…

深入理解Java虚拟机——Java内存区域

1.前言 Java内存区域也叫运行时数据区域&#xff0c;要记得把Java内存模型&#xff08;JMM区分开来&#xff09;。 根据线程是否共享可以把运行时数据区如上图所分。 线程共享 堆内存方法区 线程私有 栈内存 本地方法栈虚拟机栈 程序计数器 接下来&#xff0c;将逐个介绍…

NumPy 秘籍中文第二版:三、掌握常用函数

原文&#xff1a;NumPy Cookbook - Second Edition 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 在本章中&#xff0c;我们将介绍许多常用函数&#xff1a; sqrt()&#xff0c;log()&#xff0c;arange()&#xff0c;astype()和sum()ceil()&#xff0c;modf()&…

用高中生的思维写一篇MATLAB入门

文章目录一、简介二、MATLAB的工作界面三、基本语句1、if语句2、switch语句3、try语句4、for语句和while语句5、break语句和continus语句四、数值运算1、基本算术运算2、format命令3、关系运算4、逻辑运算5、特殊变量和常数6、数学函数五、二维平面绘图1、关于颜色和数据标记点…

【185】Java8结合C++读取和杀死windows10进程,使用JNI技术

Java8 要想读取和杀死进程&#xff0c;通过Java代码自身是无法搞定的&#xff0c;必须要利用JNI结合C来做这个事情。 整个文章的代码在 https://gitee.com/zhangchao19890805/csdnBlog 上。克隆代码后进入blog185就是本文代码&#xff0c;其中 blog185vc 是C代码&#xff0c;b…

超详细Redis入门教程——Redis概述

前言 本文小新为大家带来 超详细Redis入门教程——Redis概述 相关知识&#xff0c;具体内容包括Redis简介&#xff0c;Redis的用途&#xff0c;Redis的特性&#xff0c;Redis的IO模型&#xff08;包括&#xff1a;单线程模型&#xff0c;混合线程模型&#xff0c;多线程模型&am…

力扣584.寻找用户推荐人 - 你应该知道的五种MySQL解法

题目链接&#xff1a;584.寻找用户推荐人 解题思路 此题思路其实很简单&#xff1a;只需要在条件查询中筛选推荐人编号都不是2的用户就能返回正确答案。 但是这里有一个坑大家要注意&#xff1a; customer表中referee_id列是包含NULL值的&#xff0c;这就暗示我们不能简单的…

js之获取元素(获取DOM节点),定义变量

一、.获取 DOM 节点 element.getElementByIdelement.getElementByNameelement.getElementsByTagNameelement.getElementsByClassNameelement.querySelectorelement.querySelectorAll 1.element.getElementById 通过id获取元素 通过id获取到的元素是唯一的&#xff0c;id的…