本篇文章依托于赵虚左老师的ROS课程,实现HelloWorld打印,并安装VScode环境
课程链接
讲义链接
文章目录
- 前言
- 一、基本操作过程
- 1. 先创建一个工作空间;
- 2. 再创建一个功能包;
- 二、使用步骤
- (1)C++文件与配置
- 1.编辑源文件
- 2.编辑配置文件Cmakelists.txt
- 3.编译并执行
- 2.Python文件配置
- 1.编辑源文件
- 2.为 python 文件添加可执行权限
- 3.编辑 ros 包下的 CamkeList.txt 文件
- 4.编译并执行
- 三、终端推荐
- 四、launch文件演示
-
前言
ROS中涉及的编程语言以C++和Python为主,ROS中的大多数程序两者都可以实现。
ROS中的程序即便使用不同的编程语言,实现流程也大致类似,以当前HelloWorld程序为例,实现流程大致如下:
- 先创建一个工作空间;
- 再创建一个功能包;
- 编辑源文件;
- 编辑配置文件;
- 编译并执行。
上述流程中,C++和Python只是在步骤3和步骤4的实现细节上存在差异,其他流程基本一致。本文以hello world为例进行说明
一、基本操作过程
1. 先创建一个工作空间;
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
创建完成后,编译工作空间
cd ~/catkin_ws/
catkin_make
然后设置环境变量,可以参看我的上一篇文章
ROS学习记录(二)玩转海龟——海龟保姆级教程
2. 再创建一个功能包;
cd src
catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs
上述命令,会在工作空间下生成一个功能包,该功能包依赖于 roscpp、rospy 与 std_msgs,其中roscpp是使用C++实现的库,而rospy则是使用python实现的库,std_msgs是标准消息库,创建ROS功能包时,一般都会依赖这三个库实现。
创建完成后,还需要编译一下工作空间
cd ..
catkin_make
-
编辑源文件;
-
编辑配置文件;
-
编译并执行。
后三步对于C++与Python各有不同,将分别展示
二、使用步骤
(1)C++文件与配置
1.编辑源文件
在功能包的src文件夹新建.cpp文件
代码如下(示例):
#include "ros/ros.h"
int main(int argc, char *argv[])
{
ros::init(argc,argv,"hello");
ros::NodeHandle n;
ROS_INFO("hello world!");
return 0;
}
2.编辑配置文件Cmakelists.txt
add_executable(步骤3的源文件名
src/步骤3的源文件名.cpp
)
target_link_libraries(步骤3的源文件名
${catkin_LIBRARIES}
)
3.编译并执行
输入以下命令进行编译
cd ~/catkin_ws/
catkin_make
![在这里插入图片描述](https://img-blog.csdnimg.cn/ed52954f0d2e4231ae3126c3a61491fe.png)
打开新的终端,启动roscore
roscore
打开新的终端,在工作空间目录下运行程序
rosrun 包名 节点名
效果如下
![在这里插入图片描述](https://img-blog.csdnimg.cn/845ecf9d9328473580f5a5b3e57f51a8.png)
2.Python文件配置
1.编辑源文件
在功能包的src文件夹中新建.py文件
代码如下(示例):
"""
Python 版 HelloWorld
"""
import rospy
if __name__ == "__main__":
rospy.init_node("Hello")
rospy.loginfo("Hello World!!!!")
2.为 python 文件添加可执行权限
chmod +x 自定义文件名.py
3.编辑 ros 包下的 CamkeList.txt 文件
catkin_install_python(PROGRAMS scripts/自定义文件名.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
4.编译并执行
输入以下命令进行编译
cd ~/catkin_ws/
catkin_make
![](https://img-blog.csdnimg.cn/020f40d1d28c48039fcf986ae8eabdf9.png)
打开新的终端,启动roscore
roscore
打开新的终端,在工作空间目录下运行程序
rosrun 功能包名 文件名.py
遇到了下图这样的错误
![在这里插入图片描述](https://img-blog.csdnimg.cn/8e97433d54644c7e9655a85a05c5637e.png)
这是因为Python在默认状态下不支持源文件中的编码所致,Python2是ASII编码,而编写的文件中使用了中文。解决方法如下:在文件的头部添加# coding=utf-8,然后中文问题解决。
然后又遇到了新的错误
![在这里插入图片描述](https://img-blog.csdnimg.cn/b1355329b56943b5847963b3d591f639.png)
这是因为在刚刚添加# coding=utf-8
后#! /usr/bin/env python
没有放在第一行,换一下顺序即可。
![在这里插入图片描述](https://img-blog.csdnimg.cn/851a3931113d4009a03fbe41e28d39b4.png)
三、终端推荐
在 ROS 中,需要频繁的使用到终端,且可能需要同时开启多个窗口,推荐一款较为好用的终端:Terminator。效果如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/95c45e7ecc074774be78d08d2c74a7a9.png)
用以下命令安装
sudo apt install terminator
相关快捷操作见 ROS学习记录(一)常用命令与快捷键
四、launch文件演示
1.需求
一个程序中可能需要启动多个节点,比如:ROS 内置的小乌龟案例,如果要控制乌龟运动,要启动多个窗口,分别启动
roscore、乌龟界面节点、键盘控制节点。如果每次都调用 rosrun 逐一启动,显然效率低下,如何优化?
官方给出的优化策略是使用 launch 文件,可以一次性启动多个 ROS 节点。
2.实现
- 选定功能包右击 —> 添加 launch 文件夹
- 选定 launch 文件夹右击 —> 添加 launch 文件
- 编辑 launch 文件内容
<launch>
<node pkg="helloworld" type="demo_hello" name="hello" output="screen" />
<node pkg="turtlesim" type="turtlesim_node" name="t1"/>
<node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
</launch>
具体含义为
node —> 包含的某个节点
pkg -----> 功能包
type ----> 被运行的节点文件
name --> 为节点命名
output-> 设置日志的输出目标
输入以下命令运行launch文件
roslaunch 包名 launch文件名
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)