{"id":89,"date":"2015-08-05T18:00:42","date_gmt":"2015-08-05T09:00:42","guid":{"rendered":"http:\/\/masahiroshiomi.jp\/blog\/?p=89"},"modified":"2017-04-06T23:46:29","modified_gmt":"2017-04-06T14:46:29","slug":"python%e3%81%a7%e3%82%bd%e3%82%b1%e3%83%83%e3%83%88%e8%b6%8a%e3%81%97%e3%81%ab%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e3%82%92%e5%8f%97%e3%81%91%e5%8f%96%e3%81%a3%e3%81%a6roomba%e3%82%92ros%e3%81%a7","status":"publish","type":"post","link":"https:\/\/masahiroshiomi.jp\/blog\/ros\/89\/","title":{"rendered":"Python\u3067\u30bd\u30b1\u30c3\u30c8\u8d8a\u3057\u306b\u30b3\u30de\u30f3\u30c9\u3092\u53d7\u3051\u53d6\u3063\u3066Roomba\u3092ROS\u3067\u5236\u5fa1\u3059\u308b"},"content":{"rendered":"<p>\u81ea\u524d\u306e\u30b7\u30b9\u30c6\u30e0\u304b\u3089\u6307\u4ee4\u3092\u9001\u3063\u3066Roomba\u3092ROS\u8d8a\u3057\u306b\u5236\u5fa1\u3059\u308b\u305f\u3081\u306e\u6e96\u5099\u3002<br \/>\n\u307e\u305a\u306f\u30c6\u30b9\u30c8\u3068\u3044\u3046\u3053\u3068\u3067\u3001Python\u3067\u4f55\u304b\u6587\u5b57\u5217\u3092\u53d7\u3051\u53d6\u3063\u305f\u3089\u79fb\u52d5\u30b3\u30de\u30f3\u30c9\u3092\u767a\u884c\u3059\u308b\u7c21\u5358\u306a\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u4f5c\u6210\u3057\u3066\u307f\u305f\u3002<br \/>\nROS\u3067\u306f\u3058\u3081\u308b\u30ed\u30dc\u30c3\u30c8\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3092\u53c2\u8003\u306b\u3001\u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u4f5c\u6210\u304b\u3089\u30b3\u30f3\u30d1\u30a4\u30eb\u307e\u3067\u4ee5\u4e0b\u306e\u901a\u308a\u3084\u3063\u3066\u307f\u305f\u3002<br \/>\n\u6587\u5b57\u5217\u3092\u89e3\u91c8\u3057\u3066Topic\u306e\u5185\u5bb9\u3092\u5909\u3048\u308b\u2026\u3068\u304b\u306f\uff0c\u3053\u3053\u307e\u3067\u51fa\u6765\u308c\u3070\u5f8c\u306f\u7c21\u5358\u306a\u306f\u305a\u3002<\/p>\n<p><div class=\"my-ad-space\">\n<div class=\"my-ad-label\">\u30b9\u30dd\u30f3\u30b5\u30fc\u30ea\u30f3\u30af<\/div>\n<div>\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<!-- \u30ec\u30b9\u30dd\u30f3\u30b7\u30d6 -->\n<ins class=\"adsbygoogle\"\n     style=\"display:block\"\n     data-ad-client=\"ca-pub-1956541408145992\"\n     data-ad-slot=\"6517671867\"\n     data-ad-format=\"auto\"><\/ins>\n<script>\n(adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n<\/div>\n<\/div>\n<br><br \/>\n<div class=\"ad-space-bottom\">\n      <div class=\"ad-label\">\u30b9\u30dd\u30f3\u30b5\u30fc\u30ea\u30f3\u30af<\/div>\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<!-- \u30ec\u30b9\u30dd\u30f3\u30b7\u30d6 -->\n<ins class=\"adsbygoogle\"\n     style=\"display:block\"\n     data-ad-client=\"ca-pub-1956541408145992\"\n     data-ad-slot=\"6517671867\"\n     data-ad-format=\"auto\"><\/ins>\n<script>\n(adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n<\/div><\/p>\n<p>\uff08~\/rostest\u3092\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3068\u3057\u3066\u3044\u308b\uff09<br \/>\nmkdir -p ~\/rostest\/src<br \/>\ncd ~\/rostest\/src<br \/>\ncatkin_init_workspace<br \/>\ncd ~\/rostest<br \/>\ncatkin_make<br \/>\nsource ~\/rostest\/devel\/setup.bach<br \/>\n\uff08\u5fc5\u8981\u306a\u3089~\/.bashrc\u306b\u8ffd\u8a18\u3057\u3066\u8aad\u307f\u8fbc\u307f\u3092\u81ea\u52d5\u5316\u3059\u308b\uff09<br \/>\ncd ~\/rostest\/src<br \/>\ncatkin_create_pkg python_test rospy roscpp std_msgs<br \/>\ncd ~\/rostest<br \/>\ncatkin_make<br \/>\nsource ~\/rostest\/devel\/setup.bach<br \/>\ncd ~\/rostest\/src\/python_test<br \/>\n\uff08\u3053\u3053\u306btalker.py\u3092\u4f5c\u308b\u3002\u30b3\u30fc\u30c9\u306f\u5f8c\u3067\uff09<br \/>\nchmod 755 talker.py<br \/>\n\uff08roscore, rosrun roomba_500_series roomba500_light_node\u3092\u5225\u30bf\u30fc\u30df\u30ca\u30eb\u3067\u5b9f\u884c\u3057\u3066\u304a\u304f\uff09<br \/>\nrosrun python_test talker.py<\/p>\n<p>\u4ee5\u4e0a\u3092\u5b9f\u884c\u3057\u305f\u3046\u3048\u3067\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u304b\u3089\u4f55\u304b\u6587\u5b57\u5217\u3092\u9001\u308c\u3070talker.py\u304b\u3089Topic\u304c\u9001\u3089\u308c\u3066Roomba\u304c\u5de6\u65b9\u5411\u306b2\u79d2\u3001\u53f3\u65b9\u5411\u306b2\u79d2\u52d5\u304f\u306f\u305a\u3002\u81ea\u5206\u306f<a href=\"http:\/\/homepage2.nifty.com\/nonnon\/Download\/SocketTool\/\">TCP\/IP\u30c6\u30b9\u30c8\u30c4\u30fc\u30eb<\/a>\u3092\u4f7f\u3063\u305f\u3002<\/p>\n<p>\u4ee5\u4e0b\u3001talker.py\u306e\u4e2d\u8eab\u3002<\/p>\n<pre class=\"lang:default decode:true \" >#!\/usr\/bin\/env python\r\n\r\nfrom __future__ import print_function\r\n\r\nimport rospy\r\nimport roslib\r\nfrom std_msgs.msg import String\r\nfrom geometry_msgs.msg import Twist\r\nimport socket\r\nimport select\r\n\r\nrospy.init_node('talker')\r\npub=rospy.Publisher('chatter',String, queue_size=10)\r\nrate = rospy.Rate(10)\r\n\r\nhost = 'localhost'\r\nport = 12000\r\nbacklog = 10\r\nbufsize = 4096\r\n\r\nserver_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\r\nreadfds = set([server_sock])\r\ntry:\r\n    server_sock.bind((host, port))\r\n    server_sock.listen(backlog)\r\n\r\n    while True:\r\n        rready, wready, xready = select.select(readfds, [], [])\r\n        for sock in rready:\r\n            if sock is server_sock:\r\n                conn, address = server_sock.accept()\r\n                readfds.add(conn)\r\n            else:\r\n                msg = sock.recv(bufsize)\r\n                if len(msg) == 0:\r\n                    sock.close()\r\n                    readfds.remove(sock)\r\n                else:\r\n                    print(msg)\r\n                    #sock.send(msg)\r\n                    #\u4f55\u304b\u3092\u53d7\u3051\u53d6\u3063\u305f\u3089\u3001\u4ee5\u4e0b\u306e\u56de\u8ee2\u30fb\u9759\u6b62\u30b3\u30de\u30f3\u30c9\u3092\u767a\u884c\r\n                    if not rospy.is_shutdown():\r\n                        pub.publish(msg)\r\n                        p=rospy.Publisher('cmd_vel', Twist, queue_size=10)\r\n                        twist=Twist()\r\n                        twist.angular.z = 0.5\r\n                        p.publish(twist)\r\n                        rospy.sleep(2)\r\n                        twist=Twist()\r\n                        twist.angular.z = -0.5\r\n                        p.publish(twist) \r\n                        rospy.sleep(2)\r\n                        twist=Twist()\r\n                        p.publish(twist)\r\n                        rospy.sleep(2)\r\nfinally:\r\n    for sock in readfds:\r\n            sock.close()\r\n<\/pre>\n<p><div class=\"my-ad-space\">\n<div class=\"my-ad-label\">\u30b9\u30dd\u30f3\u30b5\u30fc\u30ea\u30f3\u30af<\/div>\n<div>\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<!-- \u30ec\u30b9\u30dd\u30f3\u30b7\u30d6 -->\n<ins class=\"adsbygoogle\"\n     style=\"display:block\"\n     data-ad-client=\"ca-pub-1956541408145992\"\n     data-ad-slot=\"6517671867\"\n     data-ad-format=\"auto\"><\/ins>\n<script>\n(adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n<\/div>\n<\/div>\n<br><br \/>\n<div class=\"ad-space-bottom\">\n      <div class=\"ad-label\">\u30b9\u30dd\u30f3\u30b5\u30fc\u30ea\u30f3\u30af<\/div>\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<!-- \u30ec\u30b9\u30dd\u30f3\u30b7\u30d6 -->\n<ins class=\"adsbygoogle\"\n     style=\"display:block\"\n     data-ad-client=\"ca-pub-1956541408145992\"\n     data-ad-slot=\"6517671867\"\n     data-ad-format=\"auto\"><\/ins>\n<script>\n(adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n<\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u81ea\u524d\u306e\u30b7\u30b9\u30c6\u30e0\u304b\u3089\u6307\u4ee4\u3092\u9001\u3063\u3066Roomba\u3092ROS\u8d8a\u3057\u306b\u5236\u5fa1\u3059\u308b\u305f\u3081\u306e\u6e96\u5099\u3002 \u307e\u305a\u306f\u30c6\u30b9\u30c8\u3068\u3044\u3046\u3053\u3068\u3067\u3001Python\u3067\u4f55\u304b\u6587\u5b57\u5217\u3092\u53d7\u3051\u53d6\u3063\u305f\u3089\u79fb\u52d5\u30b3\u30de\u30f3\u30c9\u3092\u767a\u884c\u3059\u308b\u7c21\u5358\u306a\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u4f5c\u6210\u3057\u3066\u307f\u305f\u3002 ROS\u3067\u306f\u3058\u3081\u308b\u30ed\u30dc\u30c3&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[27,4],"class_list":["post-89","post","type-post","status-publish","format-standard","hentry","category-ros","tag-python","tag-ros"],"_links":{"self":[{"href":"https:\/\/masahiroshiomi.jp\/blog\/wp-json\/wp\/v2\/posts\/89","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/masahiroshiomi.jp\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/masahiroshiomi.jp\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/masahiroshiomi.jp\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/masahiroshiomi.jp\/blog\/wp-json\/wp\/v2\/comments?post=89"}],"version-history":[{"count":9,"href":"https:\/\/masahiroshiomi.jp\/blog\/wp-json\/wp\/v2\/posts\/89\/revisions"}],"predecessor-version":[{"id":398,"href":"https:\/\/masahiroshiomi.jp\/blog\/wp-json\/wp\/v2\/posts\/89\/revisions\/398"}],"wp:attachment":[{"href":"https:\/\/masahiroshiomi.jp\/blog\/wp-json\/wp\/v2\/media?parent=89"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/masahiroshiomi.jp\/blog\/wp-json\/wp\/v2\/categories?post=89"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/masahiroshiomi.jp\/blog\/wp-json\/wp\/v2\/tags?post=89"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}