【ROS】最初接触时的一些简单记录
之前在电脑本地的一些记录,记录遍布各个文件夹,需要的时候查找翻阅不便,现归纳到此。
安装ROS
ROS官网:有一些在linux下的安装步骤说明
前期准备:更换国内源以及将“软件和更新”下的“可从互联网下载”的四个选项都勾选上。
安装步骤:
-
添加ROS软件源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
-
添加密钥
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C6543.
-
安装ROS(安装失败可以连手机热点试试)
$ sudo apt update //更新软件源 $ sudo apt install ros-melodic-desktop-full
-
初始化rosdep
$ sudo rosdep init $ rosdep update
出现问题1
-
当运行
sudo rosdep init
出现sudo: rosdep:找不到命令
时: -
执行
rospack find rosdep
,找出rosdep这个包的路径,如果 没有,则会显示
Command 'rospack' not found, but can be installed with:
sudo apt install rospack-tools
- 使用以下命令安装:
$ sudo apt install rospack-tools
- 安装好后,即可执行:
sudo rosdep init
出现问题2
- 运行
sudo rosdep init
出现:
ERROR: cannot download default sources list from: https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list Website may be down.
-
报错原因:GitHub的raw.githubusercontent.com无法连接
-
需要解决:GitHub的raw.githubusercontent.com无法连接问题
-
通过IPAddress.com首页,输入raw.githubusercontent.com查询到真实IP地址,会看到四个地址(四个地址到时候都试试,另外不行的话换手机热点)
-
修改hosts Ubuntu:
$ sudo nano/etc/hosts
添加以下内容并保存:
185.199.108.133 raw.githubusercontent.com //如果不行的话,ip地址换成四个地址中别的地址
-
然后运行:
sudo rosdep init
就会显示以下内容,就表示ok了,然后就按照说明运行rosdep update
Wrote /etc/ros/rosdep/sources.list.d/20-default.list Recommended: please run rosdep update
出现问题3
- 运行
rosdep update
报错,主要原因是因为网络造成的响应超时,也可以FQ解决。或者用CSDN教程,方法三牛逼!
-
-
设置环境变量
$ echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc $ source ~/.bashrc
-
安装rosinstall,也是帮助安装ros依赖包的
$ sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
-
这样安装就基本完成了,接着输入命令可以查看是否安装成功,可以看到版本号就说明安装成功了
$ roscore
-
启动小海龟仿真器,新开一个终端输入
$ rosrun turtlesim turtlesim_node
-
启动海龟控制节点,新开一个终端输入,这个用方向键可以控制海龟运动
$ rosrun turtlesim turtle_teleop_key
ROS的生态系统
-
发行版(Distribution):ROS发行版包括一系列带有版本号、可以直接安装的功能包。
-
软件源(Repository):ROS依赖于共享网络上的开源代码,不同的组织机构可以开发或者共享自己的机器人软件。
-
ROS wiki:记录ROS信息 文档的主要论坛。
-
邮件列表(Mailing list):交流ROS更新的主要渠道,同时也可以交流ROS开发的各种疑问。
-
ROS Answer:咨询ROS相关问题的网站。
-
博客(Blog):发布ROS社区中的新闻、图片、视频(http://www.ros.org/news)
节点与节点管理器
节点 (Node):——执行单元
-
执行具体任务的进程、独立运行的可执行文件;
-
不同节点可使用不同的编程语言,可分布式运行在不同的主机;
-
节点在系统中的名称必须是唯一的。
节点管理器(ROS Master)——控制中心 (ROS2 中取消了Master)
-
为节点提供命名和注册服务;
-
跟踪和记录话题/服务通信,辅助节点相互查找、建立连接;
-
提供参数服务器,节点使用此服务器存储和检索运行时的参数。
ROS1 与ROS2部分比较
- ROS 1主要构建于Linux系统之上,主要支持Ubuntu。而ROS 2采用全新的架构,底层基于DDS(Data Distribution Service)通信机制,支持实时性、嵌入式、分布式、多操作系统。ROS 2支持的系统包括Linux、windows、Mac、RTOS,甚至是单片机等没有操作系统的裸机。
- ROS 1的通讯系统基于TCPROS/UDPROS,强依赖于master节点的处理,而ROS 2的通讯系统是基于DDS,进而取消了master,同时在ROS2内部提供了DDS的抽象层实现,有了这个抽象层,用户就可以不去关注底层的DDS使用了哪个商家的API。
话题通信
话题(Topic)——异步通信机制
- 节点间用来传输数据的重要总线
- 使用发布\订阅模型,数据由发布者传输到订阅者,同一个话题的订阅者或发布者可以不唯一。
消息(Message)——话题数据
- 具有一定的类型和数据结构,包括ROS提供的标准类型和用户自定义类型;
- 使用编程语言无关的.msg文件定义,编译过程中生成对应的代码文件。
ROS是通过节点来进行消息传递的,所以需要节点管理平台来负责分配相互匹配的节点。
服务通信
服务(service)——同步通信机制
- 使用客户端/服务器(C/S)模型,客户端发送请求数据,服务器完成处理后返回应答数据;
- 使用编程语言无关的.srv文件定义请求和应答数据结构,编译过程中生成对应的代码文件。
文件系统
功能包(Package)
- ROS软件中的基本单元,包含节点源码、配置文件、数据定义等
功能包清单(Package manifest)
- 记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志等
元功能包(Meta Packages)
- 组织多个用于同一目的功能包
ROS命令行工具
常用命令:
rostopic:显示一些rostopic的指令信息
-
rostopic list:例举话题信息
-
比如可以通过rostopic控制小海龟运动,表示向前走1个单位:
$ rostopic pub /turtle1/cmd_vel geometist "linear: x: 1.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0"
循环发送指令,
-r 10
表示频率是10,即一秒钟运行10次(用Ctrl + C
关闭):$ rostopic pub -r 10 /turtle1/cmd_vel geometist "linear: x: 1.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 0.0"
rosservice:
-
比如:发布服务请求(在(5.0,5.0)处创建了一个叫‘turtle2’的海龟):
$ rosservice call /spawn "x:5.0 y:5.0 theta:0.0 name:'turtle2'"
rosnode:显示rosnode节点相关的指令
- rosnode list:将节点都列出来的指令
- rosnode info /turtlesim:查看节点/turtlesim的信息
rosparam:
rosmsg:查看发送的消息的指令
rossrv:
rosbag:可以用来采集数据然后复现
-
话题记录:
$ rosbag record -a -O cmd_record
-
话题复现:
$ rosbag play cmd_record.bag
rqt_graph
:【rqt开头的指令都是基于QT的可视化工具】这条指令是显示系统计算图例的可视化工具
创建工作空间与功能包
工作空间(workspace)是一个存放工程开发相关文件的文件夹
- 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 $ catkin_make //产生install安装空间
-
设置环境变量:
$ source devel/setup.bash
-
检查环境变量:
$ echo $ROS_PACKAGE_PATH
创建功能包
同一个工作空间下,不允许存在同名功能包
不同工作空间下,允许存在同名功能包
创建功能包的形式如下:
$ catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
-
创建功能包:
$ 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++/Python)
- 初始化ROS节点;
- 向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型;
- 创建消息数据;
- 按照一定的频率循环发布消息。
如何配置CMakeLists.txt中的编译规则
- 设置需要编译的代码和生成的可执行文件
- 设置链接库
add_executable(velocity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})
编译并运行发布者
$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash //设置环境变量
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun learning_topic velocity_publisher
其中环境变量设置可以去 /home/bck
路径下Ctrl + C
打开隐藏文件,打开.bashrc
文件,在最后一行加上
source /home/bck/catkin_ws/devel/setup.bash
这样在文件夹里面就不用每次设置环境变量了
订阅者Subscriber的编程实现
创建订阅者代码(C++)
**如何实现一个订阅者 **
- 初始化ROS节点
- 订阅需要的话题
- 循环等待话题消息,接收到消息后进入回调函数
- 在回调函数中完成消息处理
客户端client的编程实现
创建功能包
$ cd ~/catkin_ws/src
$ catkin_create_pkg learning_service roscpp rospy std_msgs geometry_msgs turtlesim
编译并运行客户端
$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun learning_service turtle_spawn
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库