系统:Ubuntu16.04 LST
ros版本:kinetic
创建名称为catkin_ws 的工作空间
mkdir -p catkin_ws/src #新建catkin_ws/src 目录
cd catkin_ws/src
catkin_init_workspace
cd .. #退到 catkin_ws 路径下
catkin_make #编译
source devel/setup.bash #配置暂时的环境变量
echo $ROS_PACKAGE_PATH # 查看刚刚配置的环境变量是否生效
创建名称为 my_ros_helloworld 的软件包
cd catkin_ws/src # 进入工作空间下的 src 目录 (注意路径!!!)
catkin_create_pkg my_ros_helloworld std_msgs rospy roscpp
cd .. #退到 catkin_ws 工作空间路径下
catkin_make #编译软件包
在 ~/catkin_ws/src/my_ros_helloworld 工作空间的软件包目录下 创建 scripts文件夹(用于存储可执行文件,即python文件)
在 ~/catkin_ws/src/my_ros_helloworld/script中创建 talker.py python脚本
# coding=utf-8
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def talker():
pub = rospy.Publisher('chatter', String, queue_size=10) # 当订阅者接收的不如发布的快,最多有10个最新的消息预留在缓存区中
rospy.init_node('talker', anonymous=True) # anonymous=True表示当有节点名称重复时,可以在后边自动加数字区分
rate = rospy.Rate(10) # 10hz 与rate.sleep()配合使用,表示以10hz的频率发布消息
while not rospy.is_shutdown(): #循环:检查rospy没有被关闭则执行
hello_str = "hello world %s" % rospy.get_time()
rospy.loginfo(hello_str) #三个任务:消息被打印到屏幕;它被写入Node的日志文件;被写入rosout(可以使用rqt_console来提取消息)
pub.publish(hello_str) #发布
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
修改 talker.py 为可执行文件(用python talker.py 命令单独运行 可不需要设置,用 rosrun my_ros_helloworld talker.py命令运行则需要,否则会报错找不到可执行文件节点)
chmod +x talker.py
在 ~/catkin_ws/src/my_ros_helloworld/script中创建 listener.py python脚本
# coding=utf-8
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def callback(data):
rospy.loginfo(rospy.get_caller_id() + 'I heard %s', data.data)
def listener():
# In ROS, nodes are uniquely named. If two nodes with the same
# name are launched, the previous one is kicked off. The
# anonymous=True flag means that rospy will choose a unique
# name for our 'listener' node so that multiple listeners can
# run simultaneously.
rospy.init_node('listener', anonymous=True)
rospy.Subscriber('chatter', String, callback) # 订阅话题
# spin() simply keeps python from exiting until this node is stopped
rospy.spin()
if __name__ == '__main__':
listener()
修改 listener.py 为可执行文件 (用python listener.py 命令单独运行 可不需要设置,用 rosrun my_ros_helloworld listener.py命令运行则需要,否则会报错找不到可执行文件节点)
chmod +x listener.py
注意:用echo $ROS_PACKAGE_PATH 查看此工作空间是否在环境变量中
若没有则运行此命令 source ~/catkin_ws/devel/setup.bash 也可以通过 直接将此命令写入 home目录下的 .bashrc文件中,这样就不需要每次都source ~/catkin_ws/devel/setup.bash 。因为每打开一个新的终端,都会先加载 .bashrc文件。
确保环境变量加载正确,否则rosrun 找不到 软件包 !!!
开三个终端,分别运行如下命令:
先运行命令 roscore
rosrun my_ros_helloworld talker.py 或者进入scripts目录运行 python talker.py
rosrun my_ros_helloworld listener.py 或者进入scripts目录运行 python listener.py
注意:用echo $ROS_PACKAGE_PATH 查看此工作空间是否在环境变量中
若没有则运行此命令 source ~/catkin_ws/devel/setup.bash 也可以通过 直接将此命令写入 home目录下的 .bashrc文件中,这样就不需要每次都source ~/catkin_ws/devel/setup.bash 。因为每打开一个新的终端,都会先加载 .bashrc文件。