NVIDIAのJetson NanoでROSを使ってみました。
2年前にVirtualBoxでテストしたときのことを考えると、さすがGPUがのっているだけあって快適です。
Gazebo multi-robot simulator(ver9.0.0) のインストールとタートルボットの実行
sudo apt install ros-melodic-turtlebot3-gazebo
sudo apt install ros-melodic-turtlebot3-description
export TURTLEBOT3_MODEL=burger
roslaunch turtlebot3_gazebo turtlebot3_world.launch
これに、オライリーの「プログラミングROS(Pythonによるロボットアプリケーション開発)」にあるWander-botを動かしてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import rospy from geometry_msgs.msg import Twist from sensor_msgs.msg import LaserScan def scan_callback(msg): global g_range_ahead g_range_ahead = min(msg.ranges) g_range_ahead = 1 # anything to start scan_sub = rospy.Subscriber('scan', LaserScan, scan_callback) cmd_vel_pub = rospy.Publisher('cmd_vel', Twist, queue_size=1) rospy.init_node('wander') state_change_time = rospy.Time.now() driving_forward = True rate = rospy.Rate(10) while not rospy.is_shutdown(): if driving_forward: if (g_range_ahead < 0.8 or rospy.Time.now() > state_change_time): driving_forward = False state_change_time = rospy.Time.now() + rospy.Duration(5) else: if rospy.Time.now() > state_change_time: driving_forward = True state_change_time = rospy.Time.now() + rospy.Duration(30) twist = Twist() if driving_forward: twist.linear.x = 1 else: twist.angular.z = 1 cmd_vel_pub.publish(twist) rate.sleep() |
scanトピックからセンサーデータを読み込み(Subscribe)、障害物までの距離によって回転・直進を切り替えます(Publish)。
またシミュレータではトピックの値をプロットすることができます。
まだ初歩ですが、JetsonでROSがこれだけ使えることがわかり有益でした。