ROS环境中主要涉及C++和python两种语言环境,C++运行效率高但是编码效率低,而Python则反之,基于二者互补的特点,各有各的好处,搭配使用可以提高开发效率,但无论如何在ROS中实现都需要进行五个步骤。首先在桌面上打开一个终端。
1.创建工作空间
mkdir -p catkin_ws/src
cd catkin_ws
catkin_make
上述命令,首先会创建一个名为catkin_ws工作空间以及一个 src 子目录,然后再进入catkin_ws工作空间打开终端调用 catkin_make命令编译,这一步过后src里面回会多出两个文件:
2.创建功能包
cd src
catkin_create_pkg turtle_pose roscpp rospy std_msgs
上述命令,会在工作空间下生成一个名为turtle_pose(此名可由自定义)的功能包,该功能包依赖于 roscpp、rospy 与 std_msgs,其中roscpp是使用C++实现的库,而rospy则是使用python实现的库,std_msgs是标准消息库,创建ROS功能包时,一般都会依赖这三个库实现。
3.创建源文件
ROS中py文件需要放置在scripts中,所以我们需要创建一个这样的文件。
cd turtle_pose
mkdir scripts
cd scripts
touch turtle_pose.py
粘贴至turtle_pose.py下列代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 该例程将订阅/turtle1/pose话题,消息类型turtlesim::Pose
import rospy
from turtlesim.msg import Pose
def poseCallback(msg):
rospy.loginfo("Turtle pose: x:%0.6f, y:%0.6f", msg.x, msg.y)
def pose_subscriber():
# ROS节点初始化
rospy.init_node('pose_subscriber', anonymous=True)
# 创建一个Subscriber,订阅名为/turtle1/pose的topic,注册回调函数poseCallback
rospy.Subscriber("/turtle1/pose", Pose, poseCallback)
# 循环等待回调函数
rospy.spin()
if __name__ == '__main__':
pose_subscriber()
给创建好的py文件加入权限,否则无法直接运行
chmod +x turtle_pose.py
4.创建配置文件
在刚刚已经创建好的turtle_pose文件夹中找到CmakeList.txt文件,添加配置文件,turtle_pose.py是具体的文件名称,代码如下:
catkin_install_python(PROGRAMS scripts/turtle_pose.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
5.编译执行和测试
桌面任意打开新终端,切换目录到工作空间,并进行编译。
cd catkin_ws
catkin_make
下面开始测试:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
rosrun turtle_pose turtle_pose.py
第二个指令为弹出图形化界面,第三个指令为键盘控制乌龟移动,第四个指令为获取乌龟pose文件指令。(PS:注意:光标必须聚焦在键盘控制窗口,否则无法控制乌龟运动)
如果无法运行py文件,需注意要调用source指令,在运行py文件前,先cd到工作空间,再进行
source ./devel/setup.bash
PS:source /工作空间/devel/setup.bash可以添加进.bashrc文件,使用上更方便
添加方法:
1.打开终端输入 gedit ~/.bashrc 打开文本编辑器
2.套用ps,我的是source /home/ros1/catkin_ws/devel/setup.bash,大家可以参考进行使用。
添加完成后,无需再次进行source指令的调用。
以下为指令运行后结果: