{"id":344534,"date":"2023-06-15T10:40:31","date_gmt":"2023-06-15T01:40:31","guid":{"rendered":"https:\/\/techshare.co.jp\/faq\/?p=344534"},"modified":"2023-06-15T10:40:31","modified_gmt":"2023-06-15T01:40:31","slug":"mg400-ros-python","status":"publish","type":"post","link":"https:\/\/techshare.co.jp\/faq\/dobot\/mg400\/mg400-ros-python.html","title":{"rendered":"[MG400, Python] ROS\u3067MG400\u3092\u52d5\u304b\u3059\u65b9\u6cd5"},"content":{"rendered":"<h4><span style=\"color: #000000;\">1. \u306f\u3058\u3081\u306b<\/span><\/h4>\n<p>\u672c\u7a3f\u3067\u306f\u3001ROS \u3092\u4f7f\u3063\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\u3067MG400\u3092\u5b9f\u969b\u306b\u52d5\u304b\u3059\u65b9\u6cd5\u3092\u3054\u6848\u5185\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u4f8b\u3068\u3057\u3066Python\u3092\u4f7f\u3063\u3066\u66f8\u3044\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u3054\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n<p>Windows\u306bROS\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u65b9\u6cd5\u306f\u3001\u4ee5\u524d\u306e\u8a18\u4e8b\u3092\u3054\u53c2\u7167\u304f\u3060\u3055\u3044\u3002<br \/>\n<a href=\"https:\/\/techshare.co.jp\/faq\/dobot\/mg400\/mg400-wsl2-rviz.html\">[MG400] Windows\u306eWSL2\u306bROS\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3001MG400\u3092rviz\u4e0a\u3067\u52d5\u304b\u3059\u65b9\u6cd5<\/a><\/p>\n<p>&nbsp;<\/p>\n<div>\n<h4><span style=\"color: #000000;\">2. \u74b0\u5883<\/span><\/h4>\n<\/div>\n<div>\n<div>\n<p><span style=\"color: #ff0000;\">\u4ee5\u4e0b\u306e\u74b0\u5883\u306b\u3066\u3001\u3053\u306e\u624b\u9806\u304c\u6709\u52b9\u3067\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u3044\u307e\u3059\u3002<\/span><\/p>\n<p>OS: Windows 10 (64bit)<br \/>\nWSL2: Ubuntu-20.04<br \/>\nROS: Noetic<\/p>\n<h4><span style=\"color: #333333;\">3. \u624b\u9806<\/span><\/h4>\n<h6><span style=\"color: #333333;\">3.1 MG400_ROS \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/span><\/h6>\n<\/div>\n<p>ROS\u3067MG400\u306e\u5b9f\u6a5f\u3092\u52d5\u304b\u3059\u305f\u3081\u306b\u306f\u3001\u5f0a\u793e\u306eMG400_ROS\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>\u4ee5\u524d\u306e<a href=\"https:\/\/techshare.co.jp\/faq\/dobot\/mg400\/mg400-wsl2-rviz.html\" target=\"_blank\" rel=\"noopener\">\u8a18\u4e8b<\/a>\u3067Dobot\u793e\u306eMG400_ROS \u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3044\u305f\u5834\u5408\u306f\u7af6\u5408\u3057\u3066\u3057\u307e\u3046\u305f\u3081\u3001\u4ee5\u524d\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u524a\u9664\u3059\u308b\u304b\u3001\u65b0\u3057\u3044\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u4f5c\u308a\u305d\u3053\u306b\u65b0\u305f\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>(1) \u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306b\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u5c55\u958b\u3059\u308b\u3002<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism lang-plain\"><code>$ cd ~\/catkin_ws\/src\r\n$ git clone https:\/\/github.com\/TechShare-inc\/MG400_ROS.git <\/code><\/pre>\n<\/div>\n<p>(2) \u30d3\u30eb\u30c9\u3059\u308b\u3002<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism lang-plain\"><code>$ cd ~\/catkin_ws\r\n$ catkin_make<\/code><\/pre>\n<\/div>\n<p>(3) \u74b0\u5883\u8a2d\u5b9a\u3092\u3059\u308b\u3002<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism lang-plain\"><code>$ echo \"source ~\/catkin_ws\/devel\/setup.bash\" &gt;&gt; ~\/.bashrc\r\n$ source ~\/.bashrc<\/code><\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<h6><span style=\"color: #333333;\">3.2 \u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u66f8\u304f<\/span><\/h6>\n<p>(1) \u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u3001\u30ce\u30fc\u30c9\u3092\u5b9f\u884c\u53ef\u80fd\u306b\u3059\u308b\u3002\u3053\u3053\u3067\u306f\u3001sample.py \u306b\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u66f8\u3044\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism lang-plain\"><code>$ cd ~\/catkin_ws\/src\/MG400_ROS\/mg400_bringup\/\r\n$ mkdir scripts\r\n$ touch scripts\/sample.py\r\n$ chmod +x scripts\/sample.py<\/code><\/pre>\n<\/div>\n<p>(2) Python\u3067\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u66f8\u304f<\/p>\n<p>ROS\u3067MG400\u3092\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306b\u3001MG400_ROS\/mg400_bringup\/srv\u3001\/msg \u5185\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\u3055\u307e\u3056\u307e\u306a\u30b5\u30fc\u30d3\u30b9\u304a\u3088\u3073\u30c8\u30d4\u30c3\u30af\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u3053\u3067\u5229\u7528\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n<p>\u30fbMovJ\uff08\u5f15\u6570 &#8211; float64 x y z r\u3001\u623b\u308a\u5024 &#8211; int32 res\uff09: \u4e0e\u3048\u305f\u76f4\u4ea4\u5ea7\u6a19\u7cfb\u306e\u70b9\u307e\u3067\u52d5\u304b\u3059\u3002\u6210\u529f\u3057\u305f\u3089 0 \u3092\u8fd4\u3059\u3002<br \/>\n\u30fbEnableRobot\uff08\u5f15\u6570 &#8211; \u306a\u3057\u3001\u623b\u308a\u5024 &#8211; int32 res\uff09: \u30ed\u30dc\u30c3\u30c8\u3092\u6709\u52b9\u5316\u3055\u305b\u308b\u3002<br \/>\n\u30fbDisableRobot\uff08\u5f15\u6570 &#8211; \u306a\u3057\u3001\u623b\u308a\u5024 &#8211; int32 res\uff09: \u30ed\u30dc\u30c3\u30c8\u3092\u7121\u52b9\u5316\u3055\u305b\u308b\u3002<br \/>\n\u30fbClearError\uff08\u5f15\u6570 &#8211; \u306a\u3057\u3001\u623b\u308a\u5024 &#8211; int32 res\uff09: \u30a8\u30e9\u30fc\u3092\u53d6\u308a\u9664\u304f\u3002<\/p>\n<p>\u5404\u30b5\u30fc\u30d3\u30b9\u306e\u60c5\u5831\u3092\u8868\u793a\u3055\u305b\u305f\u3044\u5834\u5408\u3001\u30bf\u30fc\u30df\u30ca\u30eb\u3067\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n<div class=\"hcb_wrap\">\n<pre lang-plain=\"\"><code>$ rosservice info &lt;\u30b5\u30fc\u30d3\u30b9\u540d&gt;<\/code><\/pre>\n<\/div>\n<p>\u305f\u3068\u3048\u3070\u3001\u30b5\u30fc\u30d3\u30b9\u540d\u306bmg400_bringup\/srv\/MovJ \u3092\u5165\u308c\u308b\u3068\u3001<\/p>\n<div class=\"hcb_wrap\">\n<pre lang-plain=\"\"><code>$ rosservice info mg400_bringup\/srv\/MovJ\r\nNode: \/mg400_bringup\r\nURI: rosrpc:\/\/VortexNote-03:50085\r\nType: mg400_bringup\/MovJ\r\nArgs: x y z r<\/code><\/pre>\n<\/div>\n<p>\u30b5\u30fc\u30d3\u30b9\u306e\u5f15\u6570\u3001\u623b\u308a\u5024\u3092\u78ba\u8a8d\u3057\u305f\u3044\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n<div class=\"hcb_wrap\">\n<pre lang-plain=\"\"><code>$ rossrv show &lt;\u30b5\u30fc\u30d3\u30b9\u306e\u578b&gt; <\/code><\/pre>\n<\/div>\n<p>\u305f\u3068\u3048\u3070\u3001<\/p>\n<div class=\"hcb_wrap\">\n<pre lang-plain=\"\"><code>$ rossrv show mg400_bringup\/MovJ\r\nfloat64 x\r\nfloat64 y\r\nfloat64 z\r\nfloat64 r\r\n---\r\nint32 res<\/code><\/pre>\n<\/div>\n<p>\u5404\u30b5\u30fc\u30d3\u30b9\u306e\u8aac\u660e\u306f\u3001Dobot\u793e\u306e<a href=\"https:\/\/github.com\/Dobot-Arm\/TCP-IP-Protocol\/blob\/master\/README-EN.md\" target=\"_blank\" rel=\"noopener\">TCP-IP Protocol<\/a>\u3092\u3054\u53c2\u7167\u304f\u3060\u3055\u3044 (\u82f1\u8a9e)\u3002\u30b5\u30fc\u30d3\u30b9\u306e\u7a2e\u985e\u3084\u5f15\u6570\u306a\u3069\u306f\u7570\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>sample.py \u306b\u306f\u3001MG400\u304c3\u70b9\u3092\u79fb\u52d5\u3059\u308b\u30b5\u30a4\u30af\u30eb\u304c10\u56de\u7e70\u308a\u8fd4\u3055\u308c\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u66f8\u304d\u307e\u3059\u3002\u30b5\u30fc\u30d3\u30b9 MovJ \u3092\u5229\u7528\u3057\u3066\u6307\u5b9a\u3057\u305f\u70b9\u3078MG400\u3092\u52d5\u304b\u3057\u3066\u3044\u307e\u3059\u3002\u524d\u306e\u52d5\u304d\u304c\u5b8c\u4e86\u3057\u3066\u304b\u3089\u6b21\u306e\u52d5\u304d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u308b\u305f\u3081\u3001\u30c8\u30d4\u30c3\u30af RobotStatus \u3092\u8cfc\u8aad\u3057\u3001\u30ed\u30dc\u30c3\u30c8\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u306b\u5fdc\u3058\u3066\u5f85\u3064\u304b\u6b21\u306e\u52d5\u304d\u306b\u9032\u3080\u304b\u3092\u5224\u65ad\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u30ed\u30dc\u30c3\u30c8\u306e\u52d5\u4f5c\u3092\u5909\u66f4\u3059\u308b\u305f\u3081\u306b\u306f move() \u95a2\u6570\u5185\u3092\u5909\u66f4\u3057\u307e\u3059\u3002wait() \u3084 sleep() \u95a2\u6570\u7b49\u3092\u4f7f\u7528\u3057\u3066\u5404\u52d5\u4f5c\u3092\u53cd\u6620\u3055\u305b\u307e\u3059\u3002<\/p>\n<div>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-python\" data-lang=\"Python\"><code>#!\/usr\/bin\/env python\r\n\r\nimport rospy\r\nfrom mg400_bringup.srv import *\r\nfrom mg400_bringup.msg import RobotStatus\r\n\r\nclass Move:\r\n\u00a0 \u00a0 def __init__(self):\r\n\u00a0 \u00a0 \u00a0 \u00a0 # \u65b0\u3057\u3044\u30ce\u30fc\u30c9\u3092\u4f5c\u308b\r\n\u00a0 \u00a0 \u00a0 \u00a0 rospy.init_node('MG400_work')\r\n\u00a0 \u00a0 \u00a0 \u00a0 # MG400 \u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u3092\u683c\u7d0d\u3059\u308b\u5909\u6570\r\n\u00a0 \u00a0 \u00a0 \u00a0 self.status = 0\r\n\u00a0 \u00a0 \u00a0 \u00a0 # \u4f7f\u7528\u3059\u308b\u30b5\u30fc\u30d3\u30b9\u3092\u547c\u3076\u30cf\u30f3\u30c9\u30e9\u30fc\r\n\u00a0 \u00a0 \u00a0 \u00a0 self.enable = rospy.ServiceProxy('mg400_bringup\/srv\/EnableRobot', EnableRobot)\r\n\u00a0 \u00a0 \u00a0 \u00a0 self.moveJ = rospy.ServiceProxy('mg400_bringup\/srv\/MovJ', MovJ)\r\n\u00a0 \u00a0 \u00a0 \u00a0 self.disable = rospy.ServiceProxy('mg400_bringup\/srv\/DisableRobot', DisableRobot)\r\n\u00a0 \u00a0 \u00a0 \u00a0 self.clear_error = rospy.ServiceProxy('mg400_bringup\/srv\/ClearError', ClearError)\r\n\u00a0 \u00a0 \u00a0 \u00a0 # RobotStatus\u30c8\u30d4\u30c3\u30af\u3092\u8cfc\u8aad\r\n\u00a0 \u00a0 \u00a0 \u00a0 rospy.Subscriber(\"mg400_bringup\/msg\/RobotStatus\", RobotStatus, self.robotStatus_callback)\r\n\u00a0 \u00a0 \u00a0 \u00a0 self.rate = rospy.Rate(20)\r\n\r\n\u00a0 \u00a0 # \u6307\u5b9a\u306e\u6642\u9593\u30b9\u30ea\u30fc\u30d7\u3055\u305b\u308b\r\n\u00a0 \u00a0 def sleep(self, duration):\r\n\u00a0 \u00a0 \u00a0 \u00a0 now = rospy.Time().now()\r\n\u00a0 \u00a0 \u00a0 \u00a0 while now + rospy.Duration(duration) &gt; rospy.Time().now():\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.rate.sleep()\r\n\r\n\r\n\u00a0 \u00a0 # \u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u305f\u969b\u306b\u3001\u30ea\u30b9\u30bf\u30fc\u30c8\u3092\u3059\u308b\u304b\u9078\u629e\u3055\u305b\u308b\r\n\u00a0 \u00a0 def restart(self):\r\n\u00a0 \u00a0 \u00a0 \u00a0 answer = input(\"Error detected. Do you want to continue? [y\/N]: \").lower()\r\n\u00a0 \u00a0 \u00a0 \u00a0 self.sleep(2)\r\n\u00a0 \u00a0 \u00a0 \u00a0 self.disable()\r\n\u00a0 \u00a0 \u00a0 \u00a0 self.clear_error()\r\n\u00a0 \u00a0 \u00a0 \u00a0 if answer in ['y', 'yes']:\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.enable()\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.sleep(2)\r\n\u00a0 \u00a0 \u00a0 \u00a0 elif answer in ['n', 'no']:\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.sleep(2)\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.disable()\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 sys.exit(1) \u00a0# \u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u7d42\u4e86\u3055\u308c\u308b\r\n\r\n\r\n\u00a0 \u00a0 # \u8cfc\u8aad\u3057\u305f\u30c8\u30d4\u30c3\u30af\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3067\u5909\u6570\u3092\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3059\u308b\r\n\u00a0 \u00a0 def robotStatus_callback(self, robot_status):\r\n\u00a0 \u00a0 \u00a0 \u00a0 \"\"\"\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 1: \u00a0\"ROBOT_MODE_INIT\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 2: \u00a0\"ROBOT_MODE_BRAKE_OPEN\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 3: \u00a0\"\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 4: \u00a0\"ROBOT_MODE_DISABLED\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 5: \u00a0\"ROBOT_MODE_ENABLE\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 6: \u00a0\"ROBOT_MODE_BACKDRIVE\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 7: \u00a0\"ROBOT_MODE_RUNNING\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 8: \u00a0\"ROBOT_MODE_RECORDING\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 9: \u00a0\"ROBOT_MODE_ERROR\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 10: \"ROBOT_MODE_PAUSE\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 11: \"ROBOT_MODE_JOG\"\r\n\u00a0 \u00a0 \u00a0 \u00a0 \"\"\"\r\n\u00a0 \u00a0 \u00a0 \u00a0 self.status = robot_status.robot_status\r\n\u00a0 \u00a0 \u00a0 \u00a0\r\n\r\n\u00a0 \u00a0 # \u524d\u306e\u52d5\u304d\u304c\u6b62\u307e\u308b\u307e\u3067\u5f85\u3064\r\n\u00a0 \u00a0 def wait(self):\r\n\u00a0 \u00a0 \u00a0 \u00a0 if self.status == 9: \u00a0# \u30a8\u30e9\u30fc\u306e\u3068\u304d\u306f restart()\u3092\u547c\u3076\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.restart()\r\n\u00a0 \u00a0 \u00a0 \u00a0 self.sleep(0.5)\r\n\u00a0 \u00a0 \u00a0 \u00a0 while self.status !=5:\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if self.status == 9:\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.restart()\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 break\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.rate.sleep()\r\n\r\n\r\n\u00a0 \u00a0 # \u30ed\u30dc\u30c3\u30c8\u3092\u52d5\u304b\u3059\r\n\u00a0 \u00a0 def move(self):\r\n\u00a0 \u00a0 \u00a0 \u00a0 # \u6307\u5b9a\u306e\u30b5\u30fc\u30d3\u30b9\u304c\u4f7f\u3048\u308b\u3088\u3046\u306b\u306a\u308b\u307e\u3067\u5f85\u6a5f\r\n\u00a0 \u00a0 \u00a0 \u00a0 rospy.wait_for_service('mg400_bringup\/srv\/EnableRobot') \u00a0\r\n\u00a0 \u00a0 \u00a0 \u00a0 try:\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.enable()\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.wait()\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.sleep(1)\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 for _ in range(10): \u00a0# 10\u30b5\u30a4\u30af\u30eb\u7e70\u308a\u8fd4\u3059\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.moveJ(280, 165, -60, 30)\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.wait()\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.moveJ(275, -170, -30, -30)\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.wait()\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.moveJ(220, -35, 48, -10)\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.wait() \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 self.disable() \u00a0 \u00a0 \u00a0 \u00a0\r\n\u00a0 \u00a0\r\n\u00a0 \u00a0 \u00a0 \u00a0 except rospy.ServiceException as e:\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 print(\"Service call failed: %s\"%e)\r\n\r\n\r\nif __name__ == \"__main__\": \u00a0\r\n\u00a0 \u00a0 print(\"MG400 sample start\")\r\n\u00a0 \u00a0 mv = Move()\r\n\u00a0 \u00a0 mv.move()\r\n\u00a0 \u00a0 rospy.spin()<\/code><\/pre>\n<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<h6><span style=\"color: #333333;\">3.3 \u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3059\u308b<\/span><\/h6>\n<\/div>\n<p>(1) MG400 \u306e LAN1\u3068PC\u3092\u30b1\u30fc\u30d6\u30eb\u3067\u7e4b\u3052\u3001\u96fb\u6e90\u3092\u5165\u308c\u308b\u3002<\/p>\n<p>(2) PC \u306e\u30a4\u30fc\u30b5\u30cd\u30c3\u30c8\u306eIP\u30a2\u30c9\u30ec\u30b9\u3092\u56fa\u5b9a\u3059\u308b\u3002\u300c<a href=\"https:\/\/techshare.co.jp\/faq\/dobot\/mg400\/mg400-m1pro-setup.html\" target=\"_blank\" rel=\"noopener\">[MG400, M1Pro] DobotStudioPro \u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u65b9\u6cd5<\/a>\u300d\u306e 3-2. IP\u30a2\u30c9\u30ec\u30b9\u306e\u56fa\u5b9a\u3092\u3054\u53c2\u7167\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>(3) MG400\u306eIP\u30a2\u30c9\u30ec\u30b9\u3092\u6307\u5b9a\u3057\u306a\u304c\u3089 mg400_bringup \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u8d77\u52d5\u3059\u308b\u3002<\/p>\n<div class=\"hcb_wrap\">\n<pre lang-plain=\"\"><code>$ roslaunch mg400_bringup mg400_bringup.launch robot_ip:=192.168.1.6\r\n<\/code><\/pre>\n<\/div>\n<p>(4) \u5225\u306e\u30bf\u30fc\u30df\u30ca\u30eb\u3067\u3001<\/p>\n<div class=\"hcb_wrap\">\n<pre lang-plain=\"\"><code>$ rosrun mg400_bringup sample.py\r\n<\/code><\/pre>\n<\/div>\n<div>\n<p>&nbsp;<\/p>\n<h6><span style=\"color: #333333;\">3.4 \u3046\u307e\u304f\u52d5\u4f5c\u3057\u306a\u3044\u5834\u5408<\/span><\/h6>\n<\/div>\n<ul>\n<li>\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3057\u3066\u3082MG400\u304c\u52d5\u304b\u306a\u3044<\/li>\n<\/ul>\n<p>\u89e3\u6c7a\u65b9\u6cd5\uff1amg400_bringup\u3092\u8d77\u52d5\u3055\u305b\u306a\u304c\u3089\u3001\u5225\u30bf\u30fc\u30df\u30ca\u30eb\u3067<\/p>\n<div class=\"hcb_wrap\">\n<pre lang-plain=\"\"><code>$ rosservice call \/mg400_bringup\/srv\/ResetRobot<\/code><\/pre>\n<\/div>\n<p>\u3092\u547c\u3093\u3060\u5f8c\u3001\u518d\u5ea6\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3059\u308b\u3002\u4ed6\u306b\u3082\u3001\u30b5\u30fc\u30d3\u30b9\u3092\u30bf\u30fc\u30df\u30ca\u30eb\u304b\u3089\u76f4\u63a5\u547c\u3076\u306b\u306f\u300crosservice call &lt;\u30b5\u30fc\u30d3\u30b9\u540d&gt;\u300d\u30b3\u30de\u30f3\u30c9\u304c\u4f7f\u7528\u3067\u304d\u308b\u3002<\/p>\n<ul>\n<li>\u30a8\u30e9\u30fc\u3067LED\u30e9\u30a4\u30c8\u304c\u8d64\u304f\u306a\u308a\u505c\u6b62\u3059\u308b<\/li>\n<\/ul>\n<p>\u89e3\u6c7a\u65b9\u6cd5\uff1a<\/p>\n<p>MovJ \u306a\u3069\u3067\u6307\u5b9a\u3057\u305f\u5ea7\u6a19\u304c\u53ef\u52d5\u57df\u5916\u3067\u306a\u3044\u304b\u78ba\u8a8d\u3059\u308b\u3002\u4e00\u6642\u7684\u306a\u30a8\u30e9\u30fc\u306e\u5834\u5408\u306f\u3001<\/p>\n<div class=\"hcb_wrap\">\n<pre lang-plain=\"\"><code>$ rosservice call \/mg400_bringup\/srv\/ClearError<\/code><\/pre>\n<\/div>\n<p>\u3067\u30a8\u30e9\u30fc\u3092\u53d6\u308a\u9664\u304d\u3001\u518d\u5ea6\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3059\u308b\u3002<\/p>\n<p>\u7e70\u308a\u8fd4\u3057\u30a8\u30e9\u30fc\u304c\u8d77\u3053\u308b\u306a\u3089\u3070\u3001DobotStudio Pro \u3092\u3064\u306a\u304e\u306a\u304c\u3089\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3057\u3001\u30a8\u30e9\u30fc\u5185\u5bb9\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002DobotStudioPro \u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u65b9\u6cd5\u306f<a href=\"https:\/\/techshare.co.jp\/faq\/dobot\/mg400\/mg400-m1pro-setup.html\" target=\"_blank\" rel=\"noopener\">\u3053\u3061\u3089<\/a>\u3002<\/p>\n<ul>\n<li>\u300c<code>\/usr\/bin\/env: 'python\\r': No such file or directory<\/code>\u300d\u3068\u8868\u793a\u3055\u308c\u308b<\/li>\n<\/ul>\n<p>\u89e3\u6c7a\u65b9\u6cd5\uff1a\u6539\u884c\u30b3\u30fc\u30c9\u3092\u300cLF\u300d\u306b\u5909\u66f4\u3059\u308b\u3002<\/p>\n<p>\u5909\u66f4\u3057\u3066\u3082\u300c<code>\/usr\/bin\/env: 'python': No such file or directory<\/code>\u300d\u3068\u51fa\u308b\u5834\u5408\u306f\u3001\u300c<code>python -V<\/code>\u300d\u3067python 3\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304b\u3089\u3001\u5b9f\u884c\u3059\u308b\u30d5\u30a1\u30a4\u30eb\u306e\u6700\u4e0a\u90e8\u306b\u3042\u308b\u300c<code>#!\/usr\/bin\/env python<\/code>\u300d\u3092\u300c<code>#!\/usr\/bin\/env python3<\/code>\u300d\u306b\u5909\u66f4\u3059\u308b\u3002<\/p>\n<p>&nbsp;<\/p>\n<h6><span style=\"color: #333333;\">3.5 \u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u5b9f\u884c\u7d50\u679c<\/span><\/h6>\n<p>\u4eca\u56de\u4f5c\u6210\u3057\u305fsample.py \u3092\u5b9f\u884c\u3055\u305b\u308b\u3068\u3001MG400\u304c\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u52d5\u304f\u306e\u304c\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002<\/p>\n<div style=\"width: 852px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-344534-1\" width=\"852\" height=\"480\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/techshare.co.jp\/faq\/wp-content\/uploads\/2023\/06\/mg400_ros.mp4?_=1\" \/><a href=\"https:\/\/techshare.co.jp\/faq\/wp-content\/uploads\/2023\/06\/mg400_ros.mp4\">https:\/\/techshare.co.jp\/faq\/wp-content\/uploads\/2023\/06\/mg400_ros.mp4<\/a><\/video><\/div>\n<p>&nbsp;<\/p>\n<p>\u672c\u7a3f\u3067\u306f\u3001ROS\u3092\u5229\u7528\u3057\u305fPython\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3067MG400\u306e\u5b9f\u6a5f\u3092\u52d5\u304b\u3059\u65b9\u6cd5\u3092\u3054\u7d39\u4ecb\u3057\u307e\u3057\u305f\u3002<\/p>\n<p><span>\u3054\u4e0d\u660e\u70b9\u7b49\u3054\u3056\u3044\u307e\u3057\u305f\u3089\u3001\u304a\u6c17\u8efd\u306b<\/span><a href=\"mailto:dobot@techshare.co.jp\">dobot@techshare.co.jp<\/a><span>\u307e\u3067\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. \u306f\u3058\u3081\u306b \u672c\u7a3f\u3067\u306f\u3001ROS \u3092\u4f7f\u3063\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\u3067MG400\u3092\u5b9f\u969b\u306b\u52d5\u304b\u3059\u65b9\u6cd5\u3092\u3054\u6848\u5185\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u4f8b\u3068\u3057\u3066Python\u3092\u4f7f\u3063\u3066\u66f8\u3044\u305f\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u3054\u7d39\u4ecb\u3057\u307e\u3059\u3002 Windows\u306bROS\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u65b9\u6cd5\u306f\u3001\u4ee5 &hellip;<\/p>\n","protected":false},"author":20,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-344534","post","type-post","status-publish","format-standard","hentry","category-mg400"],"_links":{"self":[{"href":"https:\/\/techshare.co.jp\/faq\/wp-json\/wp\/v2\/posts\/344534","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techshare.co.jp\/faq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techshare.co.jp\/faq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techshare.co.jp\/faq\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/techshare.co.jp\/faq\/wp-json\/wp\/v2\/comments?post=344534"}],"version-history":[{"count":23,"href":"https:\/\/techshare.co.jp\/faq\/wp-json\/wp\/v2\/posts\/344534\/revisions"}],"predecessor-version":[{"id":344563,"href":"https:\/\/techshare.co.jp\/faq\/wp-json\/wp\/v2\/posts\/344534\/revisions\/344563"}],"wp:attachment":[{"href":"https:\/\/techshare.co.jp\/faq\/wp-json\/wp\/v2\/media?parent=344534"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techshare.co.jp\/faq\/wp-json\/wp\/v2\/categories?post=344534"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techshare.co.jp\/faq\/wp-json\/wp\/v2\/tags?post=344534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}