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
```问题: 如果没有代码提示,修改 .vscode/c_cpp_properties.json
设置 "cppStandard": "c++17"
问题:main 函数的参数不可以被 const 修饰,当ROS__INFO 终端输出有中文时,会出现乱码
解决办法:在函数开头加入下面代码的任意一句
```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