节点(Node)——执行单元
节点管理器(ROS Master)——控制中心
话题(Topic)——异步通信
机制消息(Message)——话题数据
服务(Service)——同步通信机制
参数(Parameter)——全局共享字典
功能包(Package)——ROS软件中基本单元
功能包清单(Package manifest)——记录功能包的基本信息
元功能包(Meta Package)——组织多个用于同一目的功能包
ros常用命令行工具常用命令
rostopic
rosservice
rosnode
rosparam
rosmsg
rossrv
Topic
查看话题列表
$ rosnode list
发布话题消息
$ rostopic pub -r 10 /turtle1/ cmd_vel geometry_msgs /Twist "
x: 1.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0"
发布服务请求
$ rosservice call /spawn "x: 5.0
y: 5.0
theta: 0.0
name: 'turtle2'"
话题记录
$ rosbag record -a -O cmd_record
话题复现
$ rosbag play cmd_record.bag
tab 一下可以补全
tab 双击可以查看指令
crtl+alt+t 快捷打开终端
工作空间:
src:代码空间(Source Space)
build:编译空间(Build Space)
devel:开发空间(Development Space)
install:安装空间(Install Space)
创建工作空间
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace
编译工作空间
$ cd ~/catkin_ws
$ catkin_make
设置环境变量
$ source devel/setup.bash
检查环境变量
$ echo $ROS_PACKAGE_PATH
创建功能包
$ catkin_create_pkg <package_name> [depend1] [depend2] ……
$ cd ~/catkin_ws src
$ catkin_create_ pkg test_pkg std_msgs rospy roscpp
编译功能包
$ cd ~/catkin_ws
$ catkin_make
$ source ~/catkin_ws/devel/setup.bash
Publisher
创建功能包
$ cd ~/catkin_ws/src
$ catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim
把c++程序文件放在功能包文件夹中的src文件夹中,此处功能包为learning_topic
把python文件放入scripts文件夹中,没有该文件夹就创建一个,然后设置该文件的权限,勾选执行权限
然后再在learning_topic文件夹中的CMakeLists.txt文件的BUILD中的最后一行加上
add_executable(velocity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})
第一句为把cpp文件编译成velocity_publisher可执行文件
第二句做链接
编译
$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun learning_topic velocity_publisher
ctrl+H 显示隐藏文件
在home文件夹中一个.bashrc文件中最后一行加上
source /home/pfq/catkin_ws/devel/setup.bash
后重新启动终端就可以不用每次用source devel/setup.bash设置环境变量了
如何实现一个发布者:
subscriber
然后再在learning_topic文件夹中的CMakeLists.txt文件的BUILD中的最后一行加上
add_executable(pose_subscriber src/pose_subscriber.cpp)
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})
编译运行订阅者
$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun learning_topic pose_subscriber
运行python程序
$ rosrun learning_topic pose_subscriber.py
运行python时不用编译
话题消息定义与使用
编译msg文件
在功能包文件中创建msg文件,并在该文件中创立person.msg文件,该文件中放置类似于宏定义的代码
string name
uint8 sex
uint8 age
uint8 unknown = 0
uint8 male = 1
uint8 female = 2
在 package.xml 中添加功能包依赖
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
在 CMakeLists.txt 添加编译选项
find_package ( …… message_generation) ##在find_package括号中加message_generation编译依赖
add_message_files(FILES Person.msg)
generate_messages(DEPENDENCIES std_msgs)
catkin_package (…… message_runtime) ##在catkin_package括号中的CATKIN_DEPENDS geometry_msgs roscpp rospy rospy std_msgs turtlesim 后面加message_runtime执行依赖
用catkin_make编译后就完成了msg文件的编译在CMakeList.txt中的build最后加上如下代码
add_executable(person_publisher src/person_publisher.cpp)
target_link_libraries(person_publisher ${catkin_LIBRARIES})
add_dependencies(person_publisher ${PROJECT_NAME}_generate_messages_cpp)
add_executable(person_subscriber src/person_subscriber.cpp)
target_link_libraries(person_subscriber ${catkin_LIBRARIES})
add_dependencies(person_subscriber ${PROJECT_NAME}_generate_messages_cpp)
编译并运行发布者和订阅者
$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash
$ roscore
$ rosrun learning_topic person_subscriber
$ rosrun learning_topic person_publisher
客户端 Client 的编程实现
创建功能包
$ cd ~/catkin_ws/src
$ catkin_create_pkg learning_service roscpp rospy std_msgs geometry_msgs turtlesim
如何配置CMakeLists.txt 中的编译规则设置 需要编译的代码和生成的可执行文件;设置链接库;在build中加如下代码
add_executable(turtle_spawn src/turtle_spawn.cpp)
target_link_libraries(turtle_spawn ${catkin_LIBRARIES})
编译并运行客户端
$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun learning_service turtle_spawn
服务端 Server 的编程实现
CMakeList.txt中加如下代码
add_executable(turtle_command_server src/turtle_command_server.cpp)
target_link_libraries(turtle_command_server ${catkin_LIBRARIES})
编译运行服务器
$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun learning_service turtle_command_server
$ rosservice call /turtle_command "{}"
服务数据的定义与使用
Person.srv文件,三根线下面为response,线上为request
string name
uint8 age
uint8 sex
uint8 unknown = 0
uint8 male = 1
uint8 female = 2
---
string result
person.srv文件的CMakeList.txt配置同.msg配置一样,只需要把代码add_message_files(FILES Person.msg)中的Person.msg改成Person.srv即可
配置服务器客户端代码编译规则
add_executable(person_server src/person_server.cpp)
target_link_libraries(person_server ${catkin_LIBRARIES})
add_dependencies(person_server ${PROJECT_NAME}_gencpp)
add_executable(person_client src/person_client.cpp)
target_link_libraries(person_client ${catkin_LIBRARIES})
add_dependencies(person_client ${PROJECT_NAME}_gencpp)
编译运行
$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash
$ roscore
$ rosrun learning_service person_server
$ rosrun learning_service person_client
参数的使用与编程方法
创建功能包
$ cd ~/catkin_ws/src
$ catkin_create_pkg learning_parameter roscpp rospy std_srvs
rosparam
列出当前所有参数
$ rosparam list
显示某个参数值
$ rosparam get param_key
设置某个参数值
$ rosparam set param_key param_value
保存参数到文件
$ rosparam dump file_name
从文件读取参数
$ rosparam load file_name
刷新参数
$ rosservice call /clear "{}"
删除参数
$ rosparam delete param_key
配置代码编译
add_executable(parameter_config src/parameter_config.cpp)
target_link_libraries(parameter_config ${catkin_LIBRARIES})
编译运行
$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun learning_parameter parameter_config
ROS中的坐标系管理系统
机器人中的坐标变换海龟示例
$ sudo apt-get install ros-melodic-turtle-tf
$ roslaunch turtle_tf turtle_tf_demo.launch
$ rosrun turtlesim turtle_teleop_key
$ rosrun tf view_frames
可视化多种方法显示坐标数据
$ rosrun tf tf_echo turtle1 turtle2
rviz可视化工具
$ rosrun rviz rviz -d 'rospack find turtle_tf'/rviz/turtle_rviz.rviz
进入界面后display中的fix frame中改成world,然后再点击add添加tf即可显示海龟坐标
launch启动文件的使用方法
Launch文件: 通过XML文件实现多节点的配置和启动可自动启动ROS Master
< launch >:launch文件中的根元素采用标签定义
< node >:启动节点
< param >:设置ROS 系统运行中的参数,存储在参数服务器中。
< rosparam >:加载参数文件中的多个参数。
< arg >:launch文件内部的局部变量,仅限于 launch 文件使用
<arg name=" arg-name" default="arg-value" />
#调用方式如下:
<param name="foo" value="$(arg arg name)" />
< remap >:重映射ROS 计算图资源的命名。
< include >:包含其他launch 文件,类似 C 语言中的头文件包含。
更多标签可参见: http://wiki.ros.org/roslaunch/XML
常用可视化工具的使用
日志输出工具:rqt_console
计算图可视化工具:rqt_graph
数据绘图工具:rqt_plot
图像渲染工具:rqt _image_view
进阶
ROS : https://www.ros.org
ROS Wiki : http://wiki.ros.org/
ROSCon 2012 ~ 2019 : https://roscon.ros.org
ROS Robots : https://robots.ros.org/
Ubuntu Wiki https://wiki.ubuntu.org.cn
古月居:http://www.gyh.ai
zhangrelay 的专栏 https://blog.csdn.net/ZhangRelay
易科机器人实验室: http://blog.exbot.net/
开源机器人学学习指南: https://github.com/qqfly/how-to-learn-robotics
学习视频:
古月居ROS入门21讲视频链接:https://www.bilibili.com/video/BV1zt411G7Vn
或者B站搜索古月居