学习资料参考:ROS机器人开发实践(胡春旭)
目录
- 工作空间和功能包的创建
- 集成开发环境的搭建
- 话题和服务的实现方法
- ROS中的命名空间及解析方法
- ROS分布式通信的方法
热身
常用命令
命令 | 作用 |
---|
catkin_create_pkg | 创建功能包 |
rospack | 获取功能包的信息 |
catkin_make | 编译工作空间中的功能包 |
rosdep | 自动安装功能包依赖的其他包 |
roscd | 功能包目录跳转 |
roscp | 拷贝功能包中的文件 |
rosrun | 运行功能包中的文件 |
roslaunch | 运行启动文件 |
ROS第一个例程 小乌龟仿真
安装
sudo apt-get install ros-kinetic-turtlesim
不同版本替换kinetic-melodic-noetic(kinetic基本没了)
noetic 完整桌面安装的话,这些东西都是有的
运行管理器结点——ROS master
roscore
新终端运行
rosrun turtlesim turtlesim_node
新终端运行控制节点
rosrun turtlesim turtle_teleop_key

| 名称 | 类型 | 描述 |
---|
话题订阅 | turtleX/cmd_vel | geometry_msgs/Twist | 控制乌龟角速度与线速度 |
话题发布 | turtleX/pose | turtlesim/Pose | 乌龟的姿态信息,包括x与y的坐标位置,角度,线速度和角速度 |
服务 | clear | std_srvs/Empty | 清除仿真器中的背景颜色 |
reset | std_srvs/Empty | 复位仿真器到初始位置 |
kill | turtlesim/Kill | 删除一只乌龟 |
spawn | turtlesim/Spawn | 新生一只乌龟 |
turtleX/set_pen | turtleX/SetPen | 设置画笔的颜色和线宽 |
turtleX/teleport_absolute | turtlesim/TeleportAbsolute | 移动乌龟到指定姿态 |
turtleX/teleport_relative | turtlesim/TeleportRelative | 移动乌龟到指定的角度和距离 |
创建工作空间和功能包
工作空间:存放工程开发相关文件的文件夹,包含
- Src
- Build
- Devel
- install(不必须)
创建工作空间
- 创建 catkin_init_workspace
- 编译catkin_make
- 设置环境变量 source devel/setup.bash
创建功能包
- cd src
- catkin_create_pkg <package_name> [depend1] [depend2]
- 编译
- 设置环境变量
工作空间的覆盖
- Overlaying
- ROS优先查找最前端的工作空间
- 新设置的工作空间会自动放在最前端
- 优势:开发中替换系统或其他工作空间中原有的功能包
- 风险:如果被依赖包被替换,那么该包产生潜在风险
ROS中的命名空间
计算图源
- 节点
- 参数
- 话题
- 服务
- 示例:
- /foo
- /stanford/robot/name
- /wg/nodel
计算图源命名(ROS封装的重要机制)
- 每个资源都定义上在一个命名空间内
- 该命名空间可以创建更多资源
- 不同命名空间的资源
- 在所处命名空间内使用
- 全局范围内访问
有效的命名
- 首字符必须是
- 字母[a-z|A-Z] 波浪线(~) 左斜杠(/)
- 后续可以是字母数字下划线或者左斜杠
命名解析
- 基础(base):base
- 全局(global): /global/name (/ 开头,影响功能包的可移植性)
- 相对(relative):relative/name
- 私有(private): ~private/name (~ 开头,节点内部的资源名称)
节点 | 相对名称(默认) | 全局名称 | 私有名称 |
---|
/node1 | Bar–>/bar | /bar–>/bar | ~bar-> /node1/bar |
/wg/node2 | Bar–>/wg/bar | /bar–> /bar | ~bar–>/wg/node2/bar |
/wg/node3 | foo/bar–>/wg/foo/bar | /foo/bar–>/foo/bar | ~foo/bar–> /wg/node3/foo/bar |
命名重映射
节点命名空间 | 重映射参数 | 匹配名称 | 解析名称 |
---|
/ | foo:=bar | foo, /foo | /bar |
/baz | foo:=bar | foo, /baz\foo | /baz/bar |
/ | /foo:=bar | foo, /foo | /bar |
/baz | foo:=bar | /foo | /baz/bar |
/baz | /foo:=bar | /foo | /a/b/c/bar |
分布式多机通信
- 分布式软件框架
- 节点间松耦合
- 唯一Master
- 其他机器通过ssh和Master联系
- 多机通信的配置
- ROS多机系统必处同一网络
- ifconfig命令获取IP地址
- 在/etc/hosts 加入对方的IP地址和计算机名
- ping命令测试网络连通
- 设置ROS相关环境变量
- 设置 ROS_MASTER_URI
- 在副机上设置环境变量
- export ROS_MASTER_URI=http://hcx-pc:11311 (仅终端生效)
- echo “export ROS_MASTER_URI=http://hcx-pc:11311”>> ~/.bashrc (所有终端生效)