安装命令
conda下
// conda python=3.7.9
(base) adocir@adocir:~$ conda install -c conda-forge ros-rospy
ubuntu python3下
// Python 3.7.9
// pip已更改为指向python3,若未修改则使用pip3
(base) adocir@adocir:~$ pip install rospkg
(base) adocir@adocir:~$ pip install catkin-tools
测试脚本
conda配置参考 ROS : 话题通信 (Python)
msg格式
// Num.msg
int64 num
listener
cv2为本人测试用,可以自行删除
// talker.py
#!/usr/bin/env python
# coding=utf-8
import rospy
from beginner_tutorials.msg import Num
import threading
import sys
sys.path.remove('/opt/ros/kinetic/lib/python2.7/dist-packages')
import cv2
def callback(data):
rospy.loginfo(rospy.get_caller_id() + 'I heard %d', data.num)
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', Num, callback)
# spin() simply keeps python from exiting until this node is stopped
rospy.spin()
def opencv():
cap = cv2.VideoCapture(0, cv2.CAP_V4L2)
print(cap.isOpened())
while True:
ret, frame = cap.read()
cv2.imshow("frame", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
if __name__ == '__main__':
threading.Thread(target=opencv, daemon=True).start()
listener()
talker
// talker.py
#!/usr/bin/env python
# coding=utf-8
# import roslib;roslib.load_manifest('beginner_tutorials')
import rospy
from beginner_tutorials.msg import Num
def talker():
pub = rospy.Publisher('chatter', Num, queue_size = 10)
rospy.init_node('talker', anonymous = True)
rate = rospy.Rate(10)
while not rospy.is_shutdown():
mynum = int(rospy.get_time())
msg = Num()
msg.num = mynum
rospy.loginfo(mynum)
pub.publish(msg)
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
ros一些包的说明
genmetry_msgs: genmetry_msgs
std_msgs: std_msgs