
其实现在看起来,ROS并不难,不管是配置的文件,或者是编程语言都不是新的,只是把它们整合成一个机器人控制系统里。但是我当时要学习的东西很多,所处的环境特殊,自己又毫无心情,所以并没有深入学习,真是非常遗憾。

ROS的运行环境是Linux系统,我用过Ubuntu16.0,Debian9.0,不同版本系统下可运行的ROS版本不同。
ROS目前使用较多的版本是Melodic、Kinetic和Indigo,分别对应Ubuntu系统18.0、16.0、14.0。Indigo使用最多,最稳定,但是现在已经停止维护 和开发,因此本教程在Ubuntu16.0上安装 Kinetic。
rtos与嵌入式linux的区别:
1.实时性
实时性即保证任务在特定时间内完成。衡量一个实时操作系统坚固性的重要指标,是系统从接收一个任务,到完成该任务所需的时间,其时间的变化称为抖动。
可以依抖动将实时操作系统分为两种:硬实时操作系统及软实时操作系统,硬实时操作系统比软实时操作系统有更少的抖动:
实时性是嵌入式RTOS与嵌入式Linux最本质的区别。
实时性对比:
操作系统内核根据架构来分,可分为:宏内核(Monolithic kernel)、微内核(Microkernel)、混合内核(Hybrid kernel)。
内核架构对比:
完整的教程其实在ROS官网都有,本文旨在梳理
在Ubuntu下打开命令行窗口,
更新应用市场
sudo apt-get update安装ROS内核、rviz、2D/3D simulator、robot-generic libraries、navigation and 2D/3D perception
sudo apt-get install ros-kinetic-desktop-full安装ROS依赖包
sudo rosdep init
rosdep update注:ROS自带python语言环境
安装
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrcWorkspace下一般有三个文件夹,
src放代码文件,
build文件夹和devel文件夹是编译后生成的文件。
install是安装空间
log是日志空间
catkininitworkspace
catkin make //编译目标文件,生成可执行文件
source ~/catkin_ws/devel/setup.bash //刷新工作环境
rosdep 是一种 ROS 的依赖管理工具,用于识别和安装构建 ROS 包所需的系统依赖项。它不是一个包管理器,而是一个元包管理器,它根据当前 ROS 发行版和系统平台,找到并调用系统包管理器(如 apt 或 dnf)来实际安装缺失的依赖
常用命令:
rosdep init: 初始化 rosdep,使其能够理解您的系统和 ROS 发行版。通常在首次安装 ROS 或设置新工作区时运行此命令。rosdep update: 更新 rosdep 的依赖信息。这确保 rosdep 知道最新可用的依赖项。rosdep install: 安装 ROS 包所需的所有系统依赖。
rosdep install -r --from-paths src --ignore-src: 这是在构建 ROS 工作区时常用的命令。它会检查 src 目录下的所有包,并安装它们在本地源文件中声明的依赖项。-r: 表示在遇到错误时不要退出。--from-paths src: 指定要安装依赖的源文件位于 src 目录中。--ignore-src: 告诉 rosdep 忽略在 src 目录中找到的包的依赖,只安装外部依赖。ros2 pkg create --build-type ament-cmake learning-pkg
ros2 pkg create --build-type ament-python learning-pkgroscore
rosrun
roslaunch .launch
rostopic
<ros.h>
标准标记语言文件,与xml语言类似
stl
使用docker安装Gazebo
# 使用官方的ROS镜像作为基础镜像
FROM ros:noetic-ros-base
# 添加ROS源
RUN echo "deb http://packages.ros.org/ros/ubuntu focal main" > /etc/apt/sources.list.d/ros1-latest.list
# 导入ROS的公钥
RUN apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
# 更新apt包列表
RUN apt-get update
# 安装 RViz 和其他 ROS 工具
RUN apt-get install -y \
ros-noetic-rviz \
ros-noetic-xacro \
ros-noetic-joint-state-publisher-gui \
ros-noetic-robot-state-publisher
# 安装 Gazebo 11 和相关的开发包
RUN apt-get install -y \
gazebo11 \
libgazebo11-dev
# 安装 Gazebo ROS 包
RUN apt-get install -y \
ros-noetic-gazebo-ros-pkgs \
ros-noetic-gazebo-ros-control
# 设置容器的主命令为bash终端
CMD ["/bin/bash"]使用 Gazebo 时,了解其基本概念非常重要,这有助于你更好地理解和使用这个仿真平台。以下是 Gazebo 的一些基本概念及其简短的解释:
开始使用 Gazebo 之前,熟悉其用户界面和基本功能是很重要的。这将帮助你更高效地使用这个工具。下面是 Gazebo 用户界面和基本功能的简要概述:
在 Gazebo 中,模型库提供了一种方便的方式来访问和共享仿真模型。你可以从模型库中加载预先创建的模型,也可以将自己创建的模型保存到模型库中。以下是如何从 Gazebo 的模型库中加载基本模型的步骤:
Insert 来打开模型库。ground_plane 或 sun。File -> Save World As... 来保存你的世界到一个新文件。编写控制程序
#!/usr/bin/env python3
import rospy
from geometry_msgs.msg import Wrench
def apply_force():
# Initialize the node
rospy.init_node('force_applier', anonymous=True)
# Create a publisher to send force commands
pub = rospy.Publisher('/force', Wrench, queue_size=10)
# Create a Wrench message to send force and torque commands
cmd = Wrench()
cmd.force.x = 0.0
cmd.force.y = 0.0
cmd.force.z = 0.0
cmd.torque.x = 0.0
cmd.torque.y = 0.0
cmd.torque.z = 0.6 # Apply a torque of 0.6 N*m about the z-axis
rate = rospy.Rate(10) # 10 Hz
while not rospy.is_shutdown():
# Publish the command
pub.publish(cmd)
rate.sleep()
if __name__ == '__main__':
try:
apply_force()
except rospy.ROSInterruptException:
passhttp://tr-ros-tutorial.readthedocs.io/zh-cn/latest/_source/simulation/gazebo_and_rviz.html

命令行精简
实时性
多机器人支持
节点(Nodes)
nodelet机制允许在同一进程中运行多个节点,但实现更复杂。ros1使用catkin作为其构建空间
ros2使用colcon作为构建系统
rclcpp和rclpy),确保不同语言下的功能一致性。rosbag 是 ROS(Robot Operating System)中的一种数据记录与回放工具,用来保存和重放机器人运行时产生的各种消息数据。简单来说,它就像“黑匣子”,能把机器人运行时的传感器、话题消息、控制指令等全部记录下来,方便后期调试和复现实验。
## 记录
ros2 bag record /turtle1/cmd_vel
## 回放
ros2 bag play rosbag2_2025_09_18-13_01_53/rqt 是 ROS 官方提供的一个基于 Qt 的 GUI 框架,本质上是一个 插件管理和可视化平台。
它的设计理念是:ROS 系统是分布式的,节点、话题、服务、参数等很多,调试和监控光靠命令行不直观,因此需要一个统一的 图形化工具箱 来观察和操作。
https://zhuanlan.zhihu.com/p/106216904
sim2real的全称是simulation to reality,是强化学习的一个分支,同时也属于transfer learning的一种。主要解决的问题是机器人领域中,直接让机器人或者机械臂在现实环境中与环境进行交互、采样时,会出现以下两个比较严重的问题:
但是如果我们在模拟器中进行强化学习算法的训练,以上两个问题均可迎刃而解。但是,这里同样会存在一个问题,由于模拟器对于物理环境的建模都是存在误差的,因而在模拟环境中学习到的最优策略是否可以直接在现实环境中应用呢?答案往往是否定的,我们把这个问题称为 “reality gap”。而sim2real的工作就是去尝试解决这个问题。
这里值得注意的一点是,虽然这个方向叫做sim2real,其实其中的所有的算法都可以直接应用在sim2sim,real2real等的任务中。
sim2real中的典型工作大致可以分为以下五类:
Towards Adapting Deep Visuomotor Representations from Simulated to Real Environments[arXiv 2015] Eric Tzeng, Coline Devin, Judy Hoffman, Chelsea Finn, Xingchao Peng, Sergey Levine, Kate Saenko, Trevor DarrellLearning Invariant Feature Spaces to Transfer Skills with Reinforcement Learning [arXiv 2017] Abhishek Gupta, Coline Devin, YuXuan Liu, Pieter Abbeel, Sergey LevineSim-to-Real Robot Learning from Pixels with Progressive Nets [arXiv 2016] Andrei A. Rusu Deepmind.Transfer from Simulation to Real World through Learning Deep Inverse Dynamics Model[arXiv 2016] Paul Christiano, Zain Shah, Igor Mordatch, Jonas Schneider, Trevor Blackwell, Joshua Tobin, Pieter Abbeel, and Wojciech ZarembaSim-to-Real Transfer of Robotic Control with Dynamics Randomization [ICRA 2018] Xue Bin Peng, Marcin Andrychowicz, Wojciech Zaremba, and Pieter AbbeelDomain Randomization for Transferring Deep Neural Networks from Simulation to the Real World [IROS 2017] Josh Tobin, Rachel Fong, Alex Ray, Jonas Schneider, Wojciech Zaremba, Pieter Abbeel
setuptools库的前身是distutils(一个python标准库),setuptools本身不是标准库,所以需要自行安装。setuptools提供的主要的功能有:
python库的打包分发方式有两种:源码包source dist(简称sdist)、二进制包binary dist(简称bdist)。
源码包sdist就是我们熟悉的 .zip 、.tar.gz 等后缀文件。就是一个压缩包,里面包含了所需要的的所有源码文件以及一些静态文件(txt文本、css、图片等)。
setup.py后面会介绍,总之setup.py指定了打包分发的配置信息。--formats 参数用来指定压缩格式,若不指定format格式,那么 sdist 将根据当前平台创建默认格式。在类 Unix 平台上,将创建后缀名为.tar.gz分发包,而在Windows上为 .zip 文件。
执行完该命令,我们可以看到文件夹下多了dist文件夹(包含压缩源码的分发包)和egg-info文件夹(中间临时配置信息)。
安装源码包
安装源码包有两种方法,先解压缩源码包,或者直接安装源码包。
#
$ python setup.py install
等价于
$ python setup.py build
$ python setup.py install
'''
python setup.py install包括两步:python setup.py build python setup.py install。
这两步可分开执行, 也可只执行python setup.py install, 因为python setup.py install总是会先build后install.
'''直接pip安装源码包
pip install xxx.zip python目前主流的二进制包格式是wheel(.whl后缀),它的前身是egg。wheel本质也还是一个压缩包,可以像像zip一样解压缩。与源码包相比,二进制包的特点是不用再编译,也就是安装更快!在使用wheel之前,需要先安装wheel:$ pip install wheel
设置python库的基本信息
from setuptools import setup
def readme():
with open('README.md', encoding='utf-8') as f:
content = f.read()
return content
setup(
name = 'myapp', # 包名称
version = '1.0', # 版本
author = 'lihua', # 作者
author_email = 'lihua@163.com', # 作者邮箱
description='a example for pack python', # 描述
long_description=readme(), # 长文描述
long_description_content_type='text/markdown', # 长文描述的文本格式
keywords='pack', # 关键词
url='https://github.com/lihua/myapp', # 项目主页
classifiers=[ # 包的分类信息,见https://pypi.org/pypi?%3Aaction=list_classifiers
'Development Status :: 5 - Production/Stable',
'License :: OSI Approved :: Apache Software License',
'Operating System :: OS Independent',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
],
license='Apache License 2.0', # 许可证
)python开发成本低,但运行速度堪忧,c/c++速度无人能敌,但内存管理、模板编程等对程序猿来说,开发成本太高。那么python+c的混合编程的解决方案应运而生,博采众长,python就像前端,简单的语言赏心悦目,c就像后端,适合做计算密集型任务。而且c/c++还可以有效规避掉python的GIL锁,速度更上一层楼。
python+c/c++混合编程的技术路径有很多,如:
本质上setuptools是根据setup.py配置来指导生成gcc命令行,当然你也可以粗暴地直接用gcc命令行来编译c/c++拓展源码,但工程量太大,setuptools支持很多混合编程技术cython、SWIG等等。所以甭管你采用什么混合编程技术,绕不开setuptools。setuptools编译c/c++拓展源码的过程主要是把源代码编译成动态连接库(linux下是.so,windows下是.pyd)。这样就可以在.py中愉快import并使用拓展模块了。
setuptools.Extension类有几个重要的构造参数(详见API文档)
https://singularityhub.com/topics/#robotics
https://newatlas.com/robotics/
https://techxplore.com/robotics-news/
https://www.sciencedaily.com/news/computers_math/robotics/
https://ai.stanford.edu/blog/robotics/
https://news.mit.edu/topic/robotics
https://github.com/msadowski/awesome-weekly-robotics?tab=readme-ov-file
https://techcrunch.com/category/robotics/
科研神器
Research Rabbit是一款实用的科研工具。 它能依据你输入的文献或关键词智能推荐相关文献,帮你发现更多有用资料。**还可展示文献间的关联,形成网络,让你看清研究间的联系。 有着不错的文献管理功能,方便你整理、标记文献。同时支持团队协作,界面简洁易上手,核心功能免费,能助力科研工作更高效开展。**
1.胡月居:https://www.bilibili.com/video/BV16B4y1Q7jQ?spm_id_from=333.788.videopod.episodes&bvid=BV16B4y1Q7jQ&vd_source=e898668a475e6de0272851f4a5fc6328&p=2 https://www.guyuehome.com/Bubble/index
公众号:
Depth-Sensing