Git Product home page Git Product logo

crane_x7_ros's Introduction

English | 日本語

crane_x7_ros

industrial_ci

crane_x7_gazebo

CRANE-X7のROSパッケージです。

製品ページはこちらです。
https://www.rt-net.jp/products/crane-x7

ROS Wikiはこちらです。
https://wiki.ros.org/crane_x7

ROSのサンプルコード集はこちらです。
crane_x7_examples

サポートするROSディストリビューション

  • Melodic
  • Noetic

ROS 2

インストール方法

ソースからビルドする方法

  • ROS Wikiを参照しROSをインストールします。

  • gitを使用して本パッケージをダウンロードします。

    mkdir -p ~/catkin_ws/src
    cd ~/catkin_ws/src
    git clone https://github.com/rt-net/crane_x7_ros.git
  • crane_x7_descriptionパッケージをダウンロードします。 このパッケージには株式会社アールティの非商用ライセンスが適用されています。

    cd ~/catkin_ws/src
    git clone https://github.com/rt-net/crane_x7_description.git
  • 依存関係にあるパッケージをインストールします。

    cd ~/catkin_ws/src
    rosdep install -r -y --from-paths . --ignore-src
  • catkin_makeを使用して本パッケージをビルドします。

    cd ~/catkin_ws && catkin_make
    source ~/catkin_ws/devel/setup.bash

v1.0.0以前のバージョンからv2.x.xへ更新する場合

バージョンの違いについては #154 を参照してください。

次の手順でパッケージを更新してください。

# crane_x7_rosを更新
cd ~/catkin_ws/src/crane_x7_ros
git pull origin master

# crane_x7_descriptionをダウンロード
cd ~/catkin_ws/src
git clone https://github.com/rt-net/crane_x7_description.git
rosdep install -r -y --from-paths . --ignore-src

# ビルド環境を初期化し、パッケージを再ビルド
# 同じワークスペースにある、CRANE-X7以外の他のROSパッケージについても再ビルドを行います
cd ~/catkin_ws
rm -r build devel
catkin_make

セットアップ方法

crane_x7_controlが実機と通信する際には/dev/ttyUSB0へのアクセス権が必要です。 /dev/ttyUSB0へのアクセス権を変更するには下記のコマンドを実行します。

sudo chmod 666 /dev/ttyUSB0

パッケージ概要

CRANE-X7の各パッケージはcrane_x7_rosにまとめています。

crane_x7_control

CRANE-X7の制御を行うパッケージです。
dynamixel_sdkのC++ライブラリが必要です。
実機との通信には/dev/ttyUSB0へのアクセス権が必要です。

通信に使用するポートの名前やサーボ情報はconfig/crane_x7_control.yamlに記載します。
設定されたUSBポートが無い場合、コントローラからの指示通りの値を返すダミージョイントモードで動作します。
ハードウェアを使用しなくてもデバッグが出来るので便利に使って下さい。

起動時は設定されたホームポジションへ5秒かけて移動します。
ノードを停止するとサーボをブレーキモードに変更してから終了するので安全に停止することができます。

crane_x7_moveit_config

MoveItのパッケージです。下記のコマンドで起動します。

roslaunch crane_x7_moveit_config demo.launch

crane_x7_bringup

CRANE-X7の起動に必要なlaunchファイルをまとめたパッケージです。

crane_x7_examples

サンプルコード集です。 使い方については./crane_x7_examples/README.mdを参照してください。

crane_x7_gazebo

GazeboでCRANE-X7のシミュレーションを行うパッケージです。

次のコマンドで起動します。実機との接続やcrane_x7_bringupの実行は必要ありません。

roslaunch crane_x7_gazebo crane_x7_with_table.launch


ライセンス

(C) 2018 RT Corporation <[email protected]>

各ファイルはライセンスがファイル中に明記されている場合、そのライセンスに従います。 特に明記されていない場合は、Apache License, Version 2.0に基づき公開されています。
ライセンスの全文はLICENSEまたはhttps://www.apache.org/licenses/LICENSE-2.0から確認できます。

本パッケージが依存するcrane_x7_descriptionには株式会社アールティの非商用ライセンスが適用されています。 詳細はcrane_x7_description/LICENSEを参照してください。

開発について

  • 本ソフトウェアはオープンソースですが、開発はオープンではありません。
  • 本ソフトウェアは基本的にオープンソースソフトウェアとして「AS IS」(現状有姿のまま)で提供しています。
  • 本ソフトウェアに関する無償サポートはありません。
  • バグの修正や誤字脱字の修正に関するリクエストは常に受け付けていますが、 それ以外の機能追加等のリクエストについては社内のガイドラインを優先します。 詳しくはコントリビューションガイドラインに従ってください。

crane_x7_ros's People

Contributors

gbiggs avatar kuwamai avatar nomumu avatar rt-corp avatar shotaak avatar tiryoh avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

crane_x7_ros's Issues

最大加速度の制限値が高すぎる

MoveIt!のjoint_limits.yamlで定義しているmax_acceleration設定がハードウェアに対応した値になっていない。最新のハードウェアに適した値に修正すべきである。

ハードウェア情報が古い

制限角度や重量、重心位置などのハードウェア情報が古いので最新データに更新した方が良い。

demo.launchのargument名を変更する

demo.launch の argument fake_execution はシンプルでよいと思いますが入力時に補完が効かないので、例えば sim などもう少し短くてわかりやすい名称に変更してもよいと思います。

controller起動時に実機が急に動くことがある

crane_x7_controlの起動時に実機の姿勢を読み込んだ後、トルクONまでの間に姿勢を変更すると、読み込んだ姿勢へ急に移動するため危ない。
急に移動すると危険なので処理の順番を変更するなどした方が良い。

ROS2への対応

ROS2への対応予定はありますか。
多くの機械学習モデルがPython3系で公開されているので、ROS2で利用できるとありがたいです。

display.launch が動かない

次のコマンドでdisplay.launchを実行しましたが、
エラーが表示され、モデルが正常に描画されませんでした。

$ roslaunch crane_x7_description display.launch

実行環境はUbuntu18.04、ROS Melodicです。

エラーログ

roslaunch crane_x7_description display.launch 
... logging to /home/shotaak/.ros/log/b8a8d610-4e0a-11ea-a521-b88584a3c7d9/roslaunch-shotaak-Alienware-Aurora-R7-12907.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

xacro: in-order processing became default in ROS Melodic. You can drop the option.
Deprecated: xacro tag 'crane_x7' w/o 'xacro:' xml namespace prefix (will be forbidden in Noetic)
when processing file: /home/shotaak/catkin_ws/src/crane_x7_ros/crane_x7_description/urdf/crane_x7.urdf.xacro
Use the following command to fix incorrect tag usage:
find . -iname "*.xacro" | xargs sed -i 's#<\([/]\?\)\(if\|unless\|include\|arg\|property\|macro\|insert_block\)#<\1xacro:\2#g'

started roslaunch server http://shotaak-Alienware-Aurora-R7:44771/

SUMMARY
========

PARAMETERS
 * /rate: 10
 * /robot_description: <?xml version="1....
 * /rosdistro: melodic
 * /rosversion: 1.14.3
 * /source_list: ['joint_states_so...
 * /use_gui: True

NODES
  /
    joint_state_publisher (joint_state_publisher/joint_state_publisher)
    robot_state_publisher (robot_state_publisher/robot_state_publisher)
    rviz (rviz/rviz)

auto-starting new master
process[master]: started with pid [12930]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to b8a8d610-4e0a-11ea-a521-b88584a3c7d9
process[rosout-1]: started with pid [12941]
started core service [/rosout]
process[joint_state_publisher-2]: started with pid [12944]
process[robot_state_publisher-3]: started with pid [12945]
process[rviz-4]: started with pid [12946]
[WARN] [1581561855.692786]: The 'use_gui' parameter was specified, which is deprecated.  We'll attempt to find and run the GUI, but if this fails you should install the 'joint_state_publisher_gui' package instead and run that.  This backwards compatibility option will be removed in Noetic.
[ERROR] [1581561855.693473]: Could not find the GUI, install the 'joint_state_publisher_gui' package
[joint_state_publisher-2] process has died [pid 12944, exit code 1, cmd /opt/ros/melodic/lib/joint_state_publisher/joint_state_publisher __name:=joint_state_publisher __log:=/home/shotaak/.ros/log/b8a8d610-4e0a-11ea-a521-b88584a3c7d9/joint_state_publisher-2.log].
log file: /home/shotaak/.ros/log/b8a8d610-4e0a-11ea-a521-b88584a3c7d9/joint_state_publisher-2*.log

スクリーンショット_2020-02-13_11-48-01

TravisCIでのテストでエラーが発生している

現象

次のようなエラーが出てTravisCIでのテストに失敗しています。
https://travis-ci.com/rt-net/crane_x7_ros/builds/89108172

Extracting templates from packages: 100%
E: Unable to locate package ros-kinetic-moveit-planners-ompl
ERROR: the following rosdeps failed to install
  apt: command [apt-get install -y ros-kinetic-moveit-planners-ompl] failed

原因

現段階では.travis.ymlでのテスト対象のリモートリポジトリにros-shadow-fixedのみを設定しています。
このリポジトリは次期リリースのパッケージが公開されており、discourseでアナウンスされる「prepareing for kinetic sync」などはここのリポジトリ(ros-shadow-fixed)から通常の手順でセットアップするリポジトリ(ros)へsyncするということらしいです。
http://wiki.ros.org/ShadowRepository
アップデートが頻繁にあるパッケージでは、ビルドエラーが出てros-shadow-fixedにてパッケージが空になっているタイミングがあり、今回はそのエラーに遭遇しているようです。

参考:
jsk-enshu/robot-programming#233

対処方法

以下のようにテスト対象を変更しようと思います。

  • 変更前
    • ビルドテスト(結果に反映)
      • ROS: kinetic, リポジトリ: ros-shadow-fixed
    • ビルドテスト(テストのみでエラーは無視)
      • ROS: melodic, リポジトリ: ros-shadow-fixed
  • 変更後
    • ビルドテスト(結果に反映)
      • ROS: kinetic, リポジトリ: ros
    • ビルドテスト(テストのみでエラーは無視)
      • ROS: kinetic, リポジトリ: ros-shadow-fixed
      • ROS: melodic, リポジトリ: ros
      • ROS: melodic, リポジトリ: ros-shadow-fixed

パッケージのinstallに対応する

'crane_x7_control'、'crane_x7_description'がパッケージのインストール操作に対応できていないので、'CMakeLists.txt'を適切に修正する必要がある。
installの動作確認を実施した時に他の漏れもあれば対応する。

`crane_x7_control.yaml`が2回ロードされている

crane_x7_control.launchで設定ファイルのcrane_x7_control.yamlが2回含まれています。パラメータサーバでパラメータはネームスペースありとなしで重複します。

<rosparam file="$(find crane_x7_control)/config/crane_x7_control.yaml" command="load"/>

<rosparam file="$(find crane_x7_control)/config/crane_x7_control.yaml" command="load"/>

USB未接続時にcrane_x7_controlを起動するとエラーが出ることがある

エラーが出る時と出ない時の差がまだわかっていませんが、USB未接続時にcrane_x7_controlを起動するとエラーが出る場合があります。

[PortHandlerLinux::SetupPort] Error opening serial port!
[ INFO] [1539416433.446369738]: SKIP SELF CHECK...
terminate called after throwing an instance of 'std::runtime_error'
  what():  Duration is out of dual 32-bit range
[INFO] [1539416433.581602]: Controller Spawner: Waiting for service controller_manager/load_controller
[INFO] [1539416433.582375]: Controller Spawner: Waiting for service controller_manager/switch_controller
[INFO] [1539416433.583056]: Controller Spawner: Waiting for service controller_manager/unload_controller
[INFO] [1539416433.583743]: Loading controller: joint_state_controller
Traceback (most recent call last):
  File "/opt/ros/kinetic/lib/controller_manager/spawner", line 207, in <module>
    if __name__ == '__main__': main()
  File "/opt/ros/kinetic/lib/controller_manager/spawner", line 185, in main
    resp = load_controller(name)
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/rospy/impl/tcpros_service.py", line 435, in __call__
    return self.call(*args, **kwds)
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/rospy/impl/tcpros_service.py", line 505, in call
    raise ServiceException("unable to connect to service: %s"%e)
rospy.service.ServiceException: unable to connect to service: [Errno 104] Connection reset by peer
[crane_x7/crane_x7_control-3] process has died [pid 13425, exit code -6, cmd /home/rt-user/catkin_ws/devel/lib/crane_x7_control/crane_x7_control __name:=crane_x7_control __log:=/home/rt-user/.ros/log/43a91a8e-cebb-11e8-a6f2-b46bfcb8910b/crane_x7-crane_x7_control-3.log].
log file: /home/rt-user/.ros/log/43a91a8e-cebb-11e8-a6f2-b46bfcb8910b/crane_x7-crane_x7_control-3*.log
[INFO] [1539416433.753274]: Shutting down spawner. Stopping and unloading controllers...
[INFO] [1539416433.753846]: Stopping all controllers...
[WARN] [1539416433.757798]: Controller Spawner error while taking down controllers: unable to connect to service: [Errno 111] Connection refused
[crane_x7/controller_manager-2] process has died [pid 13424, exit code 1, cmd /opt/ros/kinetic/lib/controller_manager/spawner joint_state_controller arm_controller gripper_controller __name:=controller_manager __log:=/home/rt-user/.ros/log/43a91a8e-cebb-11e8-a6f2-b46bfcb8910b/crane_x7-controller_manager-2.log].
log file: /home/rt-user/.ros/log/43a91a8e-cebb-11e8-a6f2-b46bfcb8910b/crane_x7-controller_manager-2*.log

詳細なログ

$ roslaunch crane_x7_control crane_x7_control.launch 
... logging to /home/rt-user/.ros/log/43a91a8e-cebb-11e8-a6f2-b46bfcb8910b/roslaunch-rt-user-zenbookpro-13380.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://192.168.10.128:41827/

SUMMARY
========

PARAMETERS
 * /crane_x7/arm_controller/joints: ['crane_x7_should...
 * /crane_x7/arm_controller/publish_rate: 250
 * /crane_x7/arm_controller/type: position_controll...
 * /crane_x7/crane_x7_control/arm_controller/joints: ['crane_x7_should...
 * /crane_x7/crane_x7_control/arm_controller/publish_rate: 250
 * /crane_x7/crane_x7_control/arm_controller/type: position_controll...
 * /crane_x7/crane_x7_control/dynamixel_port/baud_rate: 3000000
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_gripper_finger_a_joint/center: 2048
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_gripper_finger_a_joint/effort_const: 1.79
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_gripper_finger_a_joint/home: 2048
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_gripper_finger_a_joint/id: 9
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_gripper_finger_a_joint/mode: 3
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_lower_arm_fixed_part_joint/center: 2048
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_lower_arm_fixed_part_joint/effort_const: 1.79
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_lower_arm_fixed_part_joint/home: 2048
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_lower_arm_fixed_part_joint/id: 6
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_lower_arm_fixed_part_joint/mode: 3
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_lower_arm_revolute_part_joint/center: 2048
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_lower_arm_revolute_part_joint/effort_const: 1.79
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_lower_arm_revolute_part_joint/home: 2048
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_lower_arm_revolute_part_joint/id: 7
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_lower_arm_revolute_part_joint/mode: 3
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_shoulder_fixed_part_pan_joint/center: 2048
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_shoulder_fixed_part_pan_joint/effort_const: 1.79
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_shoulder_fixed_part_pan_joint/home: 2048
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_shoulder_fixed_part_pan_joint/id: 2
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_shoulder_fixed_part_pan_joint/mode: 3
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_shoulder_revolute_part_tilt_joint/center: 2048
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_shoulder_revolute_part_tilt_joint/effort_const: 2.79
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_shoulder_revolute_part_tilt_joint/home: 2048
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_shoulder_revolute_part_tilt_joint/id: 3
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_shoulder_revolute_part_tilt_joint/mode: 3
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_upper_arm_revolute_part_rotate_joint/center: 2048
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_upper_arm_revolute_part_rotate_joint/effort_const: 1.79
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_upper_arm_revolute_part_rotate_joint/home: 2048
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_upper_arm_revolute_part_rotate_joint/id: 5
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_upper_arm_revolute_part_rotate_joint/mode: 3
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_upper_arm_revolute_part_twist_joint/center: 2048
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_upper_arm_revolute_part_twist_joint/effort_const: 1.79
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_upper_arm_revolute_part_twist_joint/home: 2048
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_upper_arm_revolute_part_twist_joint/id: 4
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_upper_arm_revolute_part_twist_joint/mode: 3
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_wrist_joint/center: 2048
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_wrist_joint/effort_const: 1.79
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_wrist_joint/home: 2048
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_wrist_joint/id: 8
 * /crane_x7/crane_x7_control/dynamixel_port/crane_x7_wrist_joint/mode: 3
 * /crane_x7/crane_x7_control/dynamixel_port/joints: ['crane_x7_should...
 * /crane_x7/crane_x7_control/dynamixel_port/port_name: /dev/ttyUSB0
 * /crane_x7/crane_x7_control/gripper_controller/joint: crane_x7_gripper_...
 * /crane_x7/crane_x7_control/gripper_controller/publish_rate: 250
 * /crane_x7/crane_x7_control/gripper_controller/type: position_controll...
 * /crane_x7/crane_x7_control/joint_limits/arm_joint1/has_acceleration_limits: False
 * /crane_x7/crane_x7_control/joint_limits/arm_joint1/has_effort_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint1/has_jerk_limits: False
 * /crane_x7/crane_x7_control/joint_limits/arm_joint1/has_position_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint1/has_velocity_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint1/max_effort: 4.0
 * /crane_x7/crane_x7_control/joint_limits/arm_joint1/max_position: 1.5707963268
 * /crane_x7/crane_x7_control/joint_limits/arm_joint1/max_velocity: 5.969211435
 * /crane_x7/crane_x7_control/joint_limits/arm_joint1/min_position: -1.5707963268
 * /crane_x7/crane_x7_control/joint_limits/arm_joint2/has_acceleration_limits: False
 * /crane_x7/crane_x7_control/joint_limits/arm_joint2/has_effort_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint2/has_jerk_limits: False
 * /crane_x7/crane_x7_control/joint_limits/arm_joint2/has_position_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint2/has_velocity_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint2/max_effort: 4.0
 * /crane_x7/crane_x7_control/joint_limits/arm_joint2/max_position: 0.0
 * /crane_x7/crane_x7_control/joint_limits/arm_joint2/max_velocity: 5.969211435
 * /crane_x7/crane_x7_control/joint_limits/arm_joint2/min_position: -1.5707963268
 * /crane_x7/crane_x7_control/joint_limits/arm_joint3/has_acceleration_limits: False
 * /crane_x7/crane_x7_control/joint_limits/arm_joint3/has_effort_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint3/has_jerk_limits: False
 * /crane_x7/crane_x7_control/joint_limits/arm_joint3/has_position_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint3/has_velocity_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint3/max_effort: 4.0
 * /crane_x7/crane_x7_control/joint_limits/arm_joint3/max_position: 1.5707963268
 * /crane_x7/crane_x7_control/joint_limits/arm_joint3/max_velocity: 5.969211435
 * /crane_x7/crane_x7_control/joint_limits/arm_joint3/min_position: -1.5707963268
 * /crane_x7/crane_x7_control/joint_limits/arm_joint4/has_acceleration_limits: False
 * /crane_x7/crane_x7_control/joint_limits/arm_joint4/has_effort_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint4/has_jerk_limits: False
 * /crane_x7/crane_x7_control/joint_limits/arm_joint4/has_position_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint4/has_velocity_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint4/max_effort: 4.0
 * /crane_x7/crane_x7_control/joint_limits/arm_joint4/max_position: 2.726204
 * /crane_x7/crane_x7_control/joint_limits/arm_joint4/max_velocity: 5.969211435
 * /crane_x7/crane_x7_control/joint_limits/arm_joint4/min_position: 0.0
 * /crane_x7/crane_x7_control/joint_limits/arm_joint5/has_acceleration_limits: False
 * /crane_x7/crane_x7_control/joint_limits/arm_joint5/has_effort_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint5/has_jerk_limits: False
 * /crane_x7/crane_x7_control/joint_limits/arm_joint5/has_position_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint5/has_velocity_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint5/max_effort: 4.0
 * /crane_x7/crane_x7_control/joint_limits/arm_joint5/max_position: 1.5707963268
 * /crane_x7/crane_x7_control/joint_limits/arm_joint5/max_velocity: 5.969211435
 * /crane_x7/crane_x7_control/joint_limits/arm_joint5/min_position: -1.5707963268
 * /crane_x7/crane_x7_control/joint_limits/arm_joint6/has_acceleration_limits: False
 * /crane_x7/crane_x7_control/joint_limits/arm_joint6/has_effort_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint6/has_jerk_limits: False
 * /crane_x7/crane_x7_control/joint_limits/arm_joint6/has_position_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint6/has_velocity_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint6/max_effort: 4.0
 * /crane_x7/crane_x7_control/joint_limits/arm_joint6/max_position: 1.047196
 * /crane_x7/crane_x7_control/joint_limits/arm_joint6/max_velocity: 5.969211435
 * /crane_x7/crane_x7_control/joint_limits/arm_joint6/min_position: -2.094395
 * /crane_x7/crane_x7_control/joint_limits/arm_joint7/has_acceleration_limits: False
 * /crane_x7/crane_x7_control/joint_limits/arm_joint7/has_effort_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint7/has_jerk_limits: False
 * /crane_x7/crane_x7_control/joint_limits/arm_joint7/has_position_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint7/has_velocity_limits: True
 * /crane_x7/crane_x7_control/joint_limits/arm_joint7/max_effort: 4.0
 * /crane_x7/crane_x7_control/joint_limits/arm_joint7/max_position: 2.96706
 * /crane_x7/crane_x7_control/joint_limits/arm_joint7/max_velocity: 5.969211435
 * /crane_x7/crane_x7_control/joint_limits/arm_joint7/min_position: -2.96706
 * /crane_x7/crane_x7_control/joint_limits/hand_joint1/has_acceleration_limits: False
 * /crane_x7/crane_x7_control/joint_limits/hand_joint1/has_effort_limits: True
 * /crane_x7/crane_x7_control/joint_limits/hand_joint1/has_jerk_limits: False
 * /crane_x7/crane_x7_control/joint_limits/hand_joint1/has_position_limits: True
 * /crane_x7/crane_x7_control/joint_limits/hand_joint1/has_velocity_limits: True
 * /crane_x7/crane_x7_control/joint_limits/hand_joint1/max_effort: 4.0
 * /crane_x7/crane_x7_control/joint_limits/hand_joint1/max_position: 0.523598776
 * /crane_x7/crane_x7_control/joint_limits/hand_joint1/max_velocity: 5.969211435
 * /crane_x7/crane_x7_control/joint_limits/hand_joint1/min_position: 0.0
 * /crane_x7/crane_x7_control/joint_state_controller/publish_rate: 250
 * /crane_x7/crane_x7_control/joint_state_controller/type: joint_state_contr...
 * /crane_x7/dynamixel_port/baud_rate: 3000000
 * /crane_x7/dynamixel_port/crane_x7_gripper_finger_a_joint/center: 2048
 * /crane_x7/dynamixel_port/crane_x7_gripper_finger_a_joint/effort_const: 1.79
 * /crane_x7/dynamixel_port/crane_x7_gripper_finger_a_joint/home: 2048
 * /crane_x7/dynamixel_port/crane_x7_gripper_finger_a_joint/id: 9
 * /crane_x7/dynamixel_port/crane_x7_gripper_finger_a_joint/mode: 3
 * /crane_x7/dynamixel_port/crane_x7_lower_arm_fixed_part_joint/center: 2048
 * /crane_x7/dynamixel_port/crane_x7_lower_arm_fixed_part_joint/effort_const: 1.79
 * /crane_x7/dynamixel_port/crane_x7_lower_arm_fixed_part_joint/home: 2048
 * /crane_x7/dynamixel_port/crane_x7_lower_arm_fixed_part_joint/id: 6
 * /crane_x7/dynamixel_port/crane_x7_lower_arm_fixed_part_joint/mode: 3
 * /crane_x7/dynamixel_port/crane_x7_lower_arm_revolute_part_joint/center: 2048
 * /crane_x7/dynamixel_port/crane_x7_lower_arm_revolute_part_joint/effort_const: 1.79
 * /crane_x7/dynamixel_port/crane_x7_lower_arm_revolute_part_joint/home: 2048
 * /crane_x7/dynamixel_port/crane_x7_lower_arm_revolute_part_joint/id: 7
 * /crane_x7/dynamixel_port/crane_x7_lower_arm_revolute_part_joint/mode: 3
 * /crane_x7/dynamixel_port/crane_x7_shoulder_fixed_part_pan_joint/center: 2048
 * /crane_x7/dynamixel_port/crane_x7_shoulder_fixed_part_pan_joint/effort_const: 1.79
 * /crane_x7/dynamixel_port/crane_x7_shoulder_fixed_part_pan_joint/home: 2048
 * /crane_x7/dynamixel_port/crane_x7_shoulder_fixed_part_pan_joint/id: 2
 * /crane_x7/dynamixel_port/crane_x7_shoulder_fixed_part_pan_joint/mode: 3
 * /crane_x7/dynamixel_port/crane_x7_shoulder_revolute_part_tilt_joint/center: 2048
 * /crane_x7/dynamixel_port/crane_x7_shoulder_revolute_part_tilt_joint/effort_const: 2.79
 * /crane_x7/dynamixel_port/crane_x7_shoulder_revolute_part_tilt_joint/home: 2048
 * /crane_x7/dynamixel_port/crane_x7_shoulder_revolute_part_tilt_joint/id: 3
 * /crane_x7/dynamixel_port/crane_x7_shoulder_revolute_part_tilt_joint/mode: 3
 * /crane_x7/dynamixel_port/crane_x7_upper_arm_revolute_part_rotate_joint/center: 2048
 * /crane_x7/dynamixel_port/crane_x7_upper_arm_revolute_part_rotate_joint/effort_const: 1.79
 * /crane_x7/dynamixel_port/crane_x7_upper_arm_revolute_part_rotate_joint/home: 2048
 * /crane_x7/dynamixel_port/crane_x7_upper_arm_revolute_part_rotate_joint/id: 5
 * /crane_x7/dynamixel_port/crane_x7_upper_arm_revolute_part_rotate_joint/mode: 3
 * /crane_x7/dynamixel_port/crane_x7_upper_arm_revolute_part_twist_joint/center: 2048
 * /crane_x7/dynamixel_port/crane_x7_upper_arm_revolute_part_twist_joint/effort_const: 1.79
 * /crane_x7/dynamixel_port/crane_x7_upper_arm_revolute_part_twist_joint/home: 2048
 * /crane_x7/dynamixel_port/crane_x7_upper_arm_revolute_part_twist_joint/id: 4
 * /crane_x7/dynamixel_port/crane_x7_upper_arm_revolute_part_twist_joint/mode: 3
 * /crane_x7/dynamixel_port/crane_x7_wrist_joint/center: 2048
 * /crane_x7/dynamixel_port/crane_x7_wrist_joint/effort_const: 1.79
 * /crane_x7/dynamixel_port/crane_x7_wrist_joint/home: 2048
 * /crane_x7/dynamixel_port/crane_x7_wrist_joint/id: 8
 * /crane_x7/dynamixel_port/crane_x7_wrist_joint/mode: 3
 * /crane_x7/dynamixel_port/joints: ['crane_x7_should...
 * /crane_x7/dynamixel_port/port_name: /dev/ttyUSB0
 * /crane_x7/gripper_controller/joint: crane_x7_gripper_...
 * /crane_x7/gripper_controller/publish_rate: 250
 * /crane_x7/gripper_controller/type: position_controll...
 * /crane_x7/joint_limits/arm_joint1/has_acceleration_limits: False
 * /crane_x7/joint_limits/arm_joint1/has_effort_limits: True
 * /crane_x7/joint_limits/arm_joint1/has_jerk_limits: False
 * /crane_x7/joint_limits/arm_joint1/has_position_limits: True
 * /crane_x7/joint_limits/arm_joint1/has_velocity_limits: True
 * /crane_x7/joint_limits/arm_joint1/max_effort: 4.0
 * /crane_x7/joint_limits/arm_joint1/max_position: 1.5707963268
 * /crane_x7/joint_limits/arm_joint1/max_velocity: 5.969211435
 * /crane_x7/joint_limits/arm_joint1/min_position: -1.5707963268
 * /crane_x7/joint_limits/arm_joint2/has_acceleration_limits: False
 * /crane_x7/joint_limits/arm_joint2/has_effort_limits: True
 * /crane_x7/joint_limits/arm_joint2/has_jerk_limits: False
 * /crane_x7/joint_limits/arm_joint2/has_position_limits: True
 * /crane_x7/joint_limits/arm_joint2/has_velocity_limits: True
 * /crane_x7/joint_limits/arm_joint2/max_effort: 4.0
 * /crane_x7/joint_limits/arm_joint2/max_position: 0.0
 * /crane_x7/joint_limits/arm_joint2/max_velocity: 5.969211435
 * /crane_x7/joint_limits/arm_joint2/min_position: -1.5707963268
 * /crane_x7/joint_limits/arm_joint3/has_acceleration_limits: False
 * /crane_x7/joint_limits/arm_joint3/has_effort_limits: True
 * /crane_x7/joint_limits/arm_joint3/has_jerk_limits: False
 * /crane_x7/joint_limits/arm_joint3/has_position_limits: True
 * /crane_x7/joint_limits/arm_joint3/has_velocity_limits: True
 * /crane_x7/joint_limits/arm_joint3/max_effort: 4.0
 * /crane_x7/joint_limits/arm_joint3/max_position: 1.5707963268
 * /crane_x7/joint_limits/arm_joint3/max_velocity: 5.969211435
 * /crane_x7/joint_limits/arm_joint3/min_position: -1.5707963268
 * /crane_x7/joint_limits/arm_joint4/has_acceleration_limits: False
 * /crane_x7/joint_limits/arm_joint4/has_effort_limits: True
 * /crane_x7/joint_limits/arm_joint4/has_jerk_limits: False
 * /crane_x7/joint_limits/arm_joint4/has_position_limits: True
 * /crane_x7/joint_limits/arm_joint4/has_velocity_limits: True
 * /crane_x7/joint_limits/arm_joint4/max_effort: 4.0
 * /crane_x7/joint_limits/arm_joint4/max_position: 2.726204
 * /crane_x7/joint_limits/arm_joint4/max_velocity: 5.969211435
 * /crane_x7/joint_limits/arm_joint4/min_position: 0.0
 * /crane_x7/joint_limits/arm_joint5/has_acceleration_limits: False
 * /crane_x7/joint_limits/arm_joint5/has_effort_limits: True
 * /crane_x7/joint_limits/arm_joint5/has_jerk_limits: False
 * /crane_x7/joint_limits/arm_joint5/has_position_limits: True
 * /crane_x7/joint_limits/arm_joint5/has_velocity_limits: True
 * /crane_x7/joint_limits/arm_joint5/max_effort: 4.0
 * /crane_x7/joint_limits/arm_joint5/max_position: 1.5707963268
 * /crane_x7/joint_limits/arm_joint5/max_velocity: 5.969211435
 * /crane_x7/joint_limits/arm_joint5/min_position: -1.5707963268
 * /crane_x7/joint_limits/arm_joint6/has_acceleration_limits: False
 * /crane_x7/joint_limits/arm_joint6/has_effort_limits: True
 * /crane_x7/joint_limits/arm_joint6/has_jerk_limits: False
 * /crane_x7/joint_limits/arm_joint6/has_position_limits: True
 * /crane_x7/joint_limits/arm_joint6/has_velocity_limits: True
 * /crane_x7/joint_limits/arm_joint6/max_effort: 4.0
 * /crane_x7/joint_limits/arm_joint6/max_position: 1.047196
 * /crane_x7/joint_limits/arm_joint6/max_velocity: 5.969211435
 * /crane_x7/joint_limits/arm_joint6/min_position: -2.094395
 * /crane_x7/joint_limits/arm_joint7/has_acceleration_limits: False
 * /crane_x7/joint_limits/arm_joint7/has_effort_limits: True
 * /crane_x7/joint_limits/arm_joint7/has_jerk_limits: False
 * /crane_x7/joint_limits/arm_joint7/has_position_limits: True
 * /crane_x7/joint_limits/arm_joint7/has_velocity_limits: True
 * /crane_x7/joint_limits/arm_joint7/max_effort: 4.0
 * /crane_x7/joint_limits/arm_joint7/max_position: 2.96706
 * /crane_x7/joint_limits/arm_joint7/max_velocity: 5.969211435
 * /crane_x7/joint_limits/arm_joint7/min_position: -2.96706
 * /crane_x7/joint_limits/hand_joint1/has_acceleration_limits: False
 * /crane_x7/joint_limits/hand_joint1/has_effort_limits: True
 * /crane_x7/joint_limits/hand_joint1/has_jerk_limits: False
 * /crane_x7/joint_limits/hand_joint1/has_position_limits: True
 * /crane_x7/joint_limits/hand_joint1/has_velocity_limits: True
 * /crane_x7/joint_limits/hand_joint1/max_effort: 4.0
 * /crane_x7/joint_limits/hand_joint1/max_position: 0.523598776
 * /crane_x7/joint_limits/hand_joint1/max_velocity: 5.969211435
 * /crane_x7/joint_limits/hand_joint1/min_position: 0.0
 * /crane_x7/joint_state_controller/publish_rate: 250
 * /crane_x7/joint_state_controller/type: joint_state_contr...
 * /robot_description: <?xml version="1....
 * /rosdistro: kinetic
 * /rosversion: 1.12.14

NODES
  /crane_x7/
    controller_manager (controller_manager/spawner)
    crane_x7_control (crane_x7_control/crane_x7_control)
    robot_state_publisher (robot_state_publisher/robot_state_publisher)

auto-starting new master
process[master]: started with pid [13393]
ROS_MASTER_URI=http://192.168.10.128:11311

setting /run_id to 43a91a8e-cebb-11e8-a6f2-b46bfcb8910b
process[rosout-1]: started with pid [13406]
started core service [/rosout]
process[crane_x7/controller_manager-2]: started with pid [13424]
process[crane_x7/crane_x7_control-3]: started with pid [13425]
process[crane_x7/robot_state_publisher-4]: started with pid [13426]
[PortHandlerLinux::SetupPort] Error opening serial port!
[ INFO] [1539416433.446369738]: SKIP SELF CHECK...
terminate called after throwing an instance of 'std::runtime_error'
  what():  Duration is out of dual 32-bit range
[INFO] [1539416433.581602]: Controller Spawner: Waiting for service controller_manager/load_controller
[INFO] [1539416433.582375]: Controller Spawner: Waiting for service controller_manager/switch_controller
[INFO] [1539416433.583056]: Controller Spawner: Waiting for service controller_manager/unload_controller
[INFO] [1539416433.583743]: Loading controller: joint_state_controller
Traceback (most recent call last):
  File "/opt/ros/kinetic/lib/controller_manager/spawner", line 207, in <module>
    if __name__ == '__main__': main()
  File "/opt/ros/kinetic/lib/controller_manager/spawner", line 185, in main
    resp = load_controller(name)
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/rospy/impl/tcpros_service.py", line 435, in __call__
    return self.call(*args, **kwds)
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/rospy/impl/tcpros_service.py", line 505, in call
    raise ServiceException("unable to connect to service: %s"%e)
rospy.service.ServiceException: unable to connect to service: [Errno 104] Connection reset by peer
[crane_x7/crane_x7_control-3] process has died [pid 13425, exit code -6, cmd /home/rt-user/catkin_ws/devel/lib/crane_x7_control/crane_x7_control __name:=crane_x7_control __log:=/home/rt-user/.ros/log/43a91a8e-cebb-11e8-a6f2-b46bfcb8910b/crane_x7-crane_x7_control-3.log].
log file: /home/rt-user/.ros/log/43a91a8e-cebb-11e8-a6f2-b46bfcb8910b/crane_x7-crane_x7_control-3*.log
[INFO] [1539416433.753274]: Shutting down spawner. Stopping and unloading controllers...
[INFO] [1539416433.753846]: Stopping all controllers...
[WARN] [1539416433.757798]: Controller Spawner error while taking down controllers: unable to connect to service: [Errno 111] Connection refused
[crane_x7/controller_manager-2] process has died [pid 13424, exit code 1, cmd /opt/ros/kinetic/lib/controller_manager/spawner joint_state_controller arm_controller gripper_controller __name:=controller_manager __log:=/home/rt-user/.ros/log/43a91a8e-cebb-11e8-a6f2-b46bfcb8910b/crane_x7-controller_manager-2.log].
log file: /home/rt-user/.ros/log/43a91a8e-cebb-11e8-a6f2-b46bfcb8910b/crane_x7-controller_manager-2*.log

world nameを"default" にしないと、gazeboが立ち上がらない。

/crane_x7_ros/crane_x7_gazebo/worlds/table.worldファイル内のworld nameを"CRANE-X7 with Table"から"default"に変更しないと、gazeboが立ち上がらないです。
~/.gazebo/modelsにモデルがダウンロードされていることも確認しています。
開発環境のバージョンは下記となります。
OS: Ubuntu 18.04.4 LTS
ROS: Melodic Morenia 1.14.3
Gazebo: 9.0.0

melodic対応

CRANE-X7のROSパッケージはどうやらmelodicでも動くようだが、アールティでエビデンスが取れてない。
正式にサポートを表明したいので、動作検証してkineticと異なる箇所があればbranchを分けて対応コードを公開したいと考えています。

No root/virtual joint specified in SRDF

[ INFO] [1539407738.974455785]: Loading robot model 'crane_x7'...
[ INFO] [1539407738.974480297]: No root/virtual joint specified in SRDF. Assuming fixed joint

Gazebo STLファイルのインポート

CRANE-X7のGazebo上でメッシュをインポートしようと思います。Model EditorでSTLをインポートしましたが、[import]を押してからの後操作が分かりません。ご教授お願い致します。

crane_x7_controlがVC++でビルドエラーがでます。

crane_x7_contorl/include/crane_x7_control/joint_control.h の222行目:

 ST_JOINT_PARAM set_joint_param( ST_JOINT_PARAM set_param){ param = set_param; }

となっていますが、返り値が必要なのに、return分がありません。

ST_JOINT_PARAM set_joint_param( ST_JOINT_PARAM set_param){ param = set_param; return param;}

とするか

void set_joint_param( ST_JOINT_PARAM set_param){ param = set_param; }

とする必要があると思います。

また、crane_x7_contorl/src/dxlport_control.cpp の131行目:

/* packetHandlerはdeleteしないほうが良さそう*/

の最後の部分で 「う*/」を 「う */」のように空白を挿入しないと、文字コードの関係でVC++ではエラーになります。これはLinuxでは問題ないのですが、日本語をソースコードに入れる場合には、コンパイラによってはエラーとなりますので、

/* packetHandlerはdeleteしないほうが良さそう */

と修正をお願いいたします。

Gazeboパッケージを追加したい

MoveIt!を使ったコーディングと動作確認は、現在の実装でも実機無しで実現可能だが、ロボット外部の物体をPick&Placeするなどアームを何かに作用させてシミュレーション学習するコンテンツが無い。
CRANE-X7をGazeboに対応させて、箱のモデルをPick&Placeするサンプルを追加したいと考えています。

crane_x7_controlのREADMEを追加する

crane_x7_controlが備えている各機能について説明を追加する。
・サーボ状態(角度、温度、電流)のトピック配信について
・dynamic_reconfigureからの設定について
・通信ポートの変更方法について
・制御モードの切り替えについて

PIDゲインをプリセットした後、gripperが動かなくなる

preset_reconfigure.pyを使用して、PIDゲインをプリセットした。
その後、MoveGroupCommanderを使ってgripperを動かそうとしたが、gripperが動かない。
以下のようなWARNINGが表示される。

実行したノード側

[ INFO] [1549266826.331669047]: ABORTED: Solution found but controller failed during execution

MoveGroup側

[ INFO] [1549266878.110681061]: Combined planning and execution request received for MoveGroup action. Forwarding to planning and execution pipeline.
[ INFO] [1549266878.110724622]: Planning attempt 1 of at most 1
[ INFO] [1549266878.110957243]: Planner configuration 'gripper' will use planner 'geometric::RRTConnect'. Additional configuration parameters will be set when the planner is constructed.
[ INFO] [1549266878.111047362]: RRTConnect: Starting planning with 1 states already in datastructure
[ INFO] [1549266878.122025542]: RRTConnect: Created 5 states (2 start + 3 goal)
[ INFO] [1549266878.122045365]: Solution found in 0.011030 seconds
[ INFO] [1549266878.129828240]: SimpleSetup: Path simplification took 0.007764 seconds and changed from 4 to 2 states
[ WARN] [1549266878.569546134]: Controller handle /crane_x7/gripper_controller reports status ABORTED
[ INFO] [1549266878.569578106]: Completed trajectory execution with status ABORTED ...

また、preset_reconfigure.pyのコールバックにsleepを入れると、プリセット後もgripperが動くようになった。

    def preset_no_callback(self, no):
        joint_no = 0
        for conf in self.reconfigure:
            conf["client"].update_configuration( {"position_p_gain":self.preset_list[no.data][joint_no]["p_gain"],"position_i_gain":self.preset_list[no.data][joint_no]["i_gain"],"position_d_gain":self.preset_list[no.data][joint_no]["d_gain"]} )
            joint_no = joint_no + 1
+           rospy.sleep(0.1)

PIDゲインプリセットツールを追加する

ハンド部の重量が変化するとPIDの設定値を適した値に設定したくなるが、適切なツールが備わっていない。Sciurus17にはPIDゲインプリセットツールが実装されているので、これを移植した方が便利である。
(sciurus17_ros/sciurus17_control/scripts/preset_reconfigure.py)

warning on building crane_x7_msgs

CMake Warning at /home/ubuntu/catkin_ws/build/crane_x7_ros/crane_x7_msgs/cmake/crane_x7_msgs-genmsg.cmake:3 (message):
  Invoking generate_messages() without having added any message or service
  file before.

  You should either add add_message_files() and/or add_service_files() calls
  or remove the invocation of generate_messages().
Call Stack (most recent call first):
  /opt/ros/kinetic/share/genmsg/cmake/genmsg-extras.cmake:307 (include)
  crane_x7_ros/crane_x7_msgs/CMakeLists.txt:10 (generate_messages)

RobotStateが更新されない

Robot State TopicがないためRobotStateが初期姿勢のまま更新されません。
47b40ebfake_executiontruefalse でそれぞれ試し、どちらもRobotStateが更新されないことを確認しました。
実機を動かす場合は、RobotStateが更新されてRviz上でロボットの状態を確認できた方が便利かもしれないと思いました。

Image from Gyazo

bringup/demo.launchの引数が、moveit_config/demo.launchに渡されていない

https://github.com/rt-net/crane_x7_ros/blob/master/crane_x7_bringup/launch/demo.launch にて

includeの中で引数を渡しているが、defaultで新たに宣言されている。

正しくはvalue="$(arg ***)" とすべき。

  <include file="$(find crane_x7_moveit_config)/launch/demo.launch">
    <arg name="db" default="$(arg db)" />
    <arg name="db_path" default="$(arg db_path)" />
    <arg name="debug" default="$(arg debug)" />
    <arg name="fake_execution" default="$(arg fake_execution)" />
    <arg name="use_gui" default="$(arg use_gui)" />
  </include>

rosdep install error

rosdep install したときに ros/rosdistro に未定義のパッケージでエラーが出ます。
https://github.com/ros/rosdistro/tree/master/rosdep

dependencies から削除してみてどう影響が出るか確認します。

ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
crane_x7_description: Cannot locate rosdep definition for [generate_distutils_setup]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.