[ros-users] [Discourse.ros.org] Are serious things done with ROS in Python?
Sam Pfeiffer
ros.discourse at gmail.com
Fri Apr 6 08:32:12 UTC 2018
I find this topic pretty interesting and starting from @Martin_Guenther work, I digged a bit more in.
I made [another script](https://gist.github.com/awesomebytes/18c6a3f0c20ec6d62ec872db694ead68) (warning, I mostly executed everything on an ipython terminal by parts, so I may have missed something) to clone the repos (in github, I tried to clone also the ones in bitbucket but it fails on my machine for some unrelated reason) and to compute the LOC on them for C++ and Python.
The output is:
> From 625 packages analysed
> There are 413 packages using C++
> There are 317 packages using Python
> And, actually, using both languages: 193
> 88.8747413208 % is CPP code
> 11.1252586792 % is Python code
I also recreated the table with this LOC data:
| rank | repo name | stars | language |
|------|--------------------------------------------------------------|------:|-----------------|
| 1. | IntelRealSense/librealsense | 1295 | C++ (99.6), Python (0.4) |
| 2. | ros/ros | 697 | Python (95.6), C++ (4.4) |
| 3. | wjwwood/serial | 521 | C++ (99.7), Python (0.3) |
| 4. | introlab/rtabmap | 490 | C++ (100.0), Python (0.0) |
| 5. | OctoMap/octomap | 383 | C++ (99.7), Python (0.3) |
| 6. | ros-planning/navigation | 320 | C++ (99.1), Python (0.9) |
| 7. | ethz-asl/grid_map | 281 | C++ (99.7), Python (0.3) |
| 8. | AutonomyLab/ardrone_autonomy | 264 | C |
| 9. | ros/ros_comm | 239 | Python (44.8), C++ (55.2) |
| 10. | dartsim/dart | 214 | C++ (98.7), Python (1.3) |
| 11. | introlab/find-object | 210 | C++ (100.0), Python (0.0) |
| 12. | vrpn/vrpn | 201 | C |
| 13. | intel-ros/realsense | 194 | C++ (99.2), Python (0.8) |
| 14. | robopeak/rplidar_ros | 191 | C++ (100.0), Python (0.0) |
| 15. | ros-planning/moveit | 173 | C++ |
| 16. | ros-visualization/rviz | 171 | C++ (97.6), Python (2.4) |
| 17. | mavlink/mavros | 169 | C++ (92.1), Python (7.9) |
| 18. | ros-drivers/rosserial | 164 | C++ (67.2), Python (32.8) |
| 19. | introlab/rtabmap_ros | 162 | C++ (99.4), Python (0.6) |
| 20. | cra-ros-pkg/robot_localization | 161 | C++ (99.4), Python (0.6) |
| 21. | ros/ros_tutorials | 144 | C++ |
| 22. | RobotWebTools/rosbridge_suite | 139 | Python (100.0), C++ (0.0) |
| 23. | leggedrobotics/darknet_ros | 133 | C++ (100.0), Python (0.0) |
| 24. | ros/catkin | 130 | Python (97.6), C++ (2.4) |
| 25. | ros-perception/slam_gmapping | 128 | C++ (94.3), Python (5.7) |
| 26. | ros-drivers/velodyne | 128 | C++ (95.2), Python (4.8) |
| 27. | ros-industrial/universal_robot | 127 | Python (54.9), C++ (45.1) |
| 28. | ccny-ros-pkg/imu_tools | 125 | C++ (100.0), Python (0.0) |
| 29. | orocos/orocos_kinematics_dynamics | 122 | C++ (97.4), Python (2.6) |
| 30. | ros-simulation/gazebo_ros_pkgs | 120 | C++ (96.3), Python (3.7) |
| 31. | ros-controls/ros_control | 112 | C++ (92.0), Python (8.0) |
| 32. | rosjava/rosjava_core | 110 | Java |
| 33. | ros-perception/image_pipeline | 109 | C++ (77.9), Python (22.1) |
| 34. | turtlebot/turtlebot | 103 | C++ (88.9), Python (11.1) |
| 35. | facontidavide/PlotJuggler | 103 | C++ (100.0), Python (0.0) |
| 36. | ROBOTIS-GIT/turtlebot3 | 101 | Python (65.0), C++ (35.0) |
| 37. | ROBOTIS-GIT/DynamixelSDK | 94 | C# |
| 38. | rst-tu-dortmund/teb_local_planner | 90 | C++ (95.4), Python (4.6) |
| 39. | ros-perception/vision_opencv | 85 | C++ (84.7), Python (15.3) |
| 40. | turtlebot/turtlebot_apps | 79 | C++ (65.2), Python (34.8) |
| 41. | yujinrobot/kobuki | 76 | C++ (55.0), Python (45.0) |
| 42. | ros-controls/ros_controllers | 73 | C++ (96.3), Python (3.7) |
| 43. | ankitdhall/lidar_camera_calibration | 72 | C++ (100.0), Python (0.0) |
| 44. | PickNikRobotics/rviz_visual_tools | 69 | C++ (100.0), Python (0.0) |
| 45. | ipa320/cob_driver | 68 | C++ (94.2), Python (5.8) |
| 46. | swri-robotics/mapviz | 66 | C++ (100.0), Python (0.0) |
| 47. | plasmodic/ecto | 65 | C++ (71.6), Python (28.4) |
| 48. | ros-drivers/usb_cam | 65 | C++ (100.0), Python (0.0) |
| 49. | AutonomyLab/bebop_autonomy | 63 | C++ (94.9), Python (5.1) |
| 50. | wg-perception/people | 61 | C++ (97.0), Python (3.0) |
| 51. | ros/geometry | 59 | C++ (82.7), Python (17.3) |
| 52. | ipa320/cob_common | 59 | Python (100.0), C++ (0.0) |
| 53. | ros-perception/perception_pcl | 58 | C++ (99.6), Python (0.4) |
| 54. | AndreaCensi/csm | 57 | C |
| 55. | ipa320/cob_simulation | 57 | Python (100.0), C++ (0.0) |
| 56. | Intermodalics/tango_ros | 57 | C++ (100.0), Python (0.0) |
| 57. | clearpathrobotics/robot_upstart | 54 | Python (100.0), C++ (0.0) |
| 58. | jsk-ros-pkg/jsk_recognition | 52 | C++ (85.3), Python (14.7) |
| 59. | ipa320/cob_extern | 52 | C |
| 60. | intel/ros_intel_movidius_ncs | 50 | C++ (100.0), Python (0.0) |
| 61. | AutonomyLab/create_autonomy | 50 | C++ (100.0), Python (0.0) |
| 62. | lagadic/vision_visp | 49 | C++ (99.2), Python (0.8) |
| 63. | RobotWebTools/web_video_server | 48 | C++ (100.0), Python (0.0) |
| 64. | skasperski/navigation_2d | 46 | C++ (100.0), Python (0.0) |
| 65. | fkie/multimaster_fkie | 46 | Python (100.0), C++ (0.0) |
| 66. | ccny-ros-pkg/scan_tools | 44 | C++ (100.0), Python (0.0) |
| 67. | stdr-simulator-ros-pkg/stdr_simulator | 44 | C++ (98.6), Python (1.4) |
| 68. | ros-industrial/industrial_core | 43 | C++ (100.0), Python (0.0) |
| 69. | ros-planning/navigation_tutorials | 43 | C++ (100.0), Python (0.0) |
| 70. | ipa320/cob_robots | 43 | Python (100.0), C++ (0.0) |
| 71. | ros-drivers/pointgrey_camera_driver | 43 | C++ |
| 72. | orocos-toolchain/log4cpp | 42 | C++ (100.0), Python (0.0) |
| 73. | ros-perception/openslam_gmapping | 42 | C++ (100.0), Python (0.0) |
| 74. | yujinrobot/yujin_ocs | 41 | C++ (83.3), Python (16.7) |
| 75. | paulbovbel/frontier_exploration | 41 | C++ (100.0), Python (0.0) |
| 76. | ros-industrial/ros_canopen | 41 | C++ (100.0), Python (0.0) |
| 77. | ros-industrial/abb | 40 | C++ (100.0), Python (0.0) |
| 78. | ros/geometry2 | 39 | C++ (91.9), Python (8.1) |
| 79. | ros/executive_smach | 39 | Python (100.0), C++ (0.0) |
| 80. | OctoMap/octomap_mapping | 37 | C++ (99.0), Python (1.0) |
| 81. | ros-industrial/kuka_experimental | 37 | C++ (100.0), Python (0.0) |
| 82. | ipa320/schunk_modular_robotics | 36 | C++ (99.3), Python (0.7) |
| 83. | arebgun/dynamixel_motor | 35 | Python (100.0), C++ (0.0) |
| 84. | youbot/youbot_driver | 35 | C++ (100.0), Python (0.0) |
| 85. | davetcoleman/ros_control_boilerplate | 35 | C++ |
| 86. | ros/actionlib | 34 | C++ (68.3), Python (31.7) |
| 87. | beltransen/velo2cam_calibration | 34 | C++ (100.0), Python (0.0) |
| 88. | ros/common_msgs | 34 | C++ (82.5), Python (17.5) |
| 89. | hasauino/rrt_exploration | 33 | C++ (49.8), Python (50.2) |
| 90. | magazino/move_base_flex | 33 | C++ (97.0), Python (3.0) |
| 91. | turtlebot/turtlebot_simulator | 33 | EmberScript |
| 92. | vanadiumlabs/arbotix_ros | 32 | Python (93.1), C++ (6.9) |
| 93. | ros-visualization/visualization_tutorials | 32 | C++ (74.8), Python (25.2) |
| 94. | ros-drivers/joystick_drivers | 32 | Python (68.8), C++ (31.2) |
| 95. | cbandera/rosparam_handler | 31 | Python (54.3), C++ (45.7) |
| 96. | wg-perception/object_recognition_core | 31 | C++ (54.3), Python (45.7) |
| 97. | ros-naoqi/nao_robot | 30 | Python (95.1), C++ (4.9) |
| 98. | ipa320/cob_command_tools | 30 | Python (79.5), C++ (20.5) |
| 99. | mrpt-ros-pkg/mrpt_navigation | 30 | C++ (100.0), Python (0.0) |
| 100. | ethz-asl/rqt_multiplot_plugin | 30 | C++ (99.9), Python (0.1) |
I think Python has it's position on glueing things together, dealing with text, making apps and tools, and overall taking advantage of the big amount of third party libraries that ease doing stuff. If you need speed, C++ for sure. If you need something done quick, Python I'd say.
---
[Visit Topic](https://discourse.ros.org/t/are-serious-things-done-with-ros-in-python/4359/8) or reply to this email to respond.
More information about the ros-users
mailing list