文章目录
ROS学习笔记
00.VSCODE 引用ROS
catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=Yes
“compileCommands”: “${workspaceFolder}/build/compile_commands.json”
01. 文件系统概念
rospack — 获取软件包的相关信息
rospack find 包名称
roscd — 切换目录到某个软件包
roscd 包名称
rosls — 直接按软件包的名称而不是绝对路径执行ls命令
rosls 本地包名称/子目录
02.创建ROS程序包
最简单的程序包 my_package/ CMakeLists.txt 程序包必须包含一个catkin 版本的CMakeLists.txt文件,而Catkin metapackages中必须包含一个对CMakeList.txt文件的引用。 package.xml 这个package.xml文件提供有关程序包的元信息。
- 创建程序包
catkin_create_pkg <package_name> [depend1] [depend2] [depend3] std_msgs rospy roscpp source devel/setup.bash
- 查找程序包一级依赖关系
rospack depends1 包名称
- 查找程序包间接依赖关系
rospack depends 包名称
03.编译ROS程序包
切换到工作空间
cd ~/工作空间/
catkin_make
04.ROS图概念概述
Nodes:节点,一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。
Messages:消息,消息是一种ROS数据类型,用于订阅或发布到一个话题。
Topics:话题,节点可以发布消息到话题,也可以订阅话题以接收消息。
Master:节点管理器,ROS名称服务 (比如帮助节点找到彼此)。
rosout: ROS中相当于stdout/stderr。
roscore: 主机+ rosout + 参数服务器 (参数服务器会在后面介绍)。
rospy = python 客户端库
roscpp = c++ 客户端库
05.ROS节点
一个节点其实只不过是ROS程序包中的一个可执行文件。ROS节点可以使用ROS客户库与其他节点通信。节点可以发布或接收一个话题。
roscore
roscore是运行所以ROS程序前首先要运行的命令
查看活跃节点
rosnode list
寻找某个节点的信息
rosnode info /节点名字
运行节点
rosrun 包名 节点名字
运行别名节点
rosrun 包名 节点 _name:= 新节点名字
06.ROS话题
节点与节点之间是通过话题互相通信
rqt_grahp
rqt_grahp 显示当前运行的话题与节点
rostopic echo 显示在某个话题上发布的数据
rostopic echo 话题
rostopic list -v
获取发布与订阅话题及其类型的详细信息
rostopic pub [topic] [msg_type] – [args]
发布数据到当前某个广播的话题上
rostopic hz 话题
查看某个话题发布数据的帧率
07.ROS Message
话题之间的通信是通过在节点之间发送ROS消息实现的。对于发布器(
turtle_teleop_key
)和订阅器(turtulesim_node
)之间的通信,发布器和订阅器之间必须发送和接收相同类型的消息。这意味着话题的类型是由发布在它上面的消息类型决定的。使用rostopic type
命令可以查看发布在某个话题上的消息类型。
rostopic type 话题
查看发布消息类型
rosmsg show 消息类型
查看显示消息的详细情况
08.ROS服务
服务(services)是节点之间通讯的另一种方式。服务允许节点发送请求(request) 并获得一个响应(response)
rosservice可以很轻松的使用 ROS 客户端/服务器框架提供的服务。rosservice提供了很多可以在topic上使用的命令,如下所示:
rosservice list 输出可用服务的信息 rosservice call 调用带参数的服务 rosservice type 输出服务类型 rosservice find 依据类型寻找服务find services by service type rosservice uri 输出服务的ROSRPC uri
- rosservice call clear
清除数据
- rosservice type spawn| rossrv show
通过查看再生(spawn)服务的信息
- rosparam
rosparam使得我们能够存储并操作ROS 参数服务器(Parameter Server)上的数据。参数服务器能够存储整型、浮点、布尔、字符串、字典和列表等数据类型。rosparam使用YAML标记语言的语法。一般而言,YAML的表述很自然:1 是整型, 1.0 是浮点型, one是字符串, true是布尔, [1, 2, 3]是整型列表, {a: b, c: d}是字典. rosparam set 设置参数 rosparam get 获取参数 rosparam load 从文件读取参数 rosparam dump 向文件中写入参数 rosparam delete 删除参数 rosparam list 列出参数名
rosparam set [param_name]
rosparam get [param_name]
- 存储与重新读取
rosparam dump [file_name]
rosparam load [file_name] [namespace]
09.Console信息
rqt_console
属于ROS日志框架(logging framework)的一部分,用来显示节点的输出信息。
rqt_logger_level
允许我们修改节点运行时输出信息的日志等级(logger levels)(包括 DEBUG、WARN、INFO和ERROR)。
- rosrun rqt_console rqt_console
- rosrun rqt_logger_level rqt_logger_level
10.roslaunch
roslaunch
可以用来启动定义在launch文件中的多个节点。用法 roslaunch [package] [filename.launch]
11.创建ROS消息和服务
消息(msg): msg文件就是一个描述ROS中所使用消息类型的简单文本。它们会被用来生成不同语言的源代码。
服务(srv): 一个srv文件描述一项服务。它包含两个部分:请求和响应。
msg文件存放在package的msg目录下,srv文件则存放在srv目录下。
msg文件实际上就是每行声明一个数据类型和变量名。可以使用的数据类型如下:
int8, int16, int32, int64 (plus uint*)
float32, float64
string
time, duration
other msg files
variable-length array[] and fixed-length array[C]在ROS中有一个特殊的数据类型:Header,它含有时间戳和坐标系信息。在msg文件的第一行经常可以看到Header header的声明.
- 请求和响应
srv文件分为请求和响应两部分,由'---'分隔。 int64 A int64 B --- int64 Sum 其中 A 和 B 是请求, 而Sum 是响应。
- 创建一个msg
$ cd ~/catkin_ws/src/beginner_tutorials $ mkdir msg $ echo "int64 num" > msg/Num.msg 在package.xml文件夹中含有 <build_depend>message_generation</build_depend> <exec_depend>message_runtime</exec_depend> 在cmakelist.txt中的add_message_files中添加建立的消息
- 检查消息是否正常
rosmsg show 类型
- 创建srv服务
roscd beginner_tutorials
mkdir srv
roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
# Do not just add this line to your CMakeLists.txt, modify the existing line find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)
add_service_files( FILES AddTwoInts.srv )
- 检查服务是否正常
rossrv show <service type>
- 消息和服务都要的步骤
generate_messages( DEPENDENCIES std_msgs ) 由于增加了新的消息,所以我们需要重新编译我们的package: # In your catkin workspace $ cd ../.. $ catkin_make $ cd -
12CAN操作
ifconfig -a // 获取网络设备
candump can名字 // 启动CAN
sudo ip link set can名字 up type can bitrate 500000 //设置波特率
candump can名字 // 启动CAN
sudo ip link set can名字 down //关闭CAN设备
sudo ip link set can$i up type can bitrate 1000000 dbitrate 5000000 fd on