質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.37%

  • Node.js

    1219questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

  • GitHub

    514questions

    GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

  • Raspberry Pi

    462questions

    Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

  • Socket.IO

    147questions

    Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

socket.ioを用いて、sphero(ロボット)を操作したい

受付中

回答 2

投稿 2017/12/05 18:12 ・編集 2017/12/06 01:01

  • 評価
  • クリップ 2
  • VIEW 80

marumori

score 0

プログラミング初心者です。

socket.ioを用いて、sphero(球体ロボット)を操作しようと考えています。
そこで、リンク内容を参考にしました。

[コマンドプロンプト]
git clone https://github.com/juliancheal/sphero-colour.git
cd sphero-colour
npm install
node app.js
[app.js]
var Cylon = require('cylon');
var colour = 0xFF0066;

var express = require('express'),
    app = express(),
    server = require('http').createServer(app),
    io = require('socket.io').listen(server);

server.listen(8080);

// app.get('/', function(req, res){
//     res.sendfile(__dirname + '/index.html');
// });
app.use(express.static(__dirname + "/public/"));

Cylon.robot({
  connection: { name: 'sphero', adaptor: 'sphero', port: 'dev/tty.Sphero-BOO-RN-SPP' },
  device: {name: 'sphero', driver: 'sphero'},

    work: function(my) {
        io.sockets.on('connection', function (socket) {
          socket.on('color', function (data) {
                colour = parseInt(data,10);
            console.log(colour);

                my.sphero.setColor(colour);
                // console.log(my.sphero.getRGB());
          });
        });
  }
}).start();


// for debugging when no sphero present
io.sockets.on('connection', function (socket) {
  socket.on('color', function (data) {
        colour = parseInt(data,10);
    console.log(colour);
    });    
});
[エラー]
2017-12-05T09:03:18.809Z : The single-object 'connection' syntax for robots is not valid.
2017-12-05T09:03:18.816Z : Instead, use the multiple-value 'connections' key syntax.
2017-12-05T09:03:18.817Z : Details: http://cylonjs.com/documentation/guides/working-with-robots/
/home/pi/sphero-colour/node_modules/cylon/lib/validator.js:15
  throw RobotDSLError;
  ^

RobotDSLError: Unable to start robot due to a syntax error
    at die (/home/pi/sphero-colour/node_modules/cylon/lib/validator.js:13:23)
    at fatal (/home/pi/sphero-colour/node_modules/cylon/lib/validator.js:26:3)
    at /home/pi/sphero-colour/node_modules/cylon/lib/validator.js:50:7
    at Array.map (<anonymous>)
    at checks.singleObjectSyntax (/home/pi/sphero-colour/node_modules/cylon/lib/validator.js:45:28)
    at /home/pi/sphero-colour/node_modules/cylon/lib/validator.js:100:5
    at Object.iterate [as each] (/home/pi/sphero-colour/node_modules/cylon/lib/utils/helpers.js:82:10)
    at Object.validate (/home/pi/sphero-colour/node_modules/cylon/lib/validator.js:99:5)
    at new Robot (/home/pi/sphero-colour/node_modules/cylon/lib/robot.js:32:13)
    at Object.create [as robot] (/home/pi/sphero-colour/node_modules/cylon/lib/mcp.js:37:13)

ご教授おねがいします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

※直接の答にはなっていないかもしれませんのでご了承ください。
かなり固有な技術トピックのように思いますので、もしかしたらなかなか回答がつきづらいかもしれません。私の方では動作させる環境がありませんので想像と、気がついた部分の指摘のみですが、

[エラー]
2017-12-05T09:03:18.809Z : The single-object 'connection' syntax for robots is not valid.

とあるので、なんとなく’connection’関連の部分に文法エラーの問題があるように思います。質問者様のコード、

[Cylon.robot({
connection: { name: 'sphero', adaptor: 'sphero', port: 'dev/tty.Sphero-BOO-RN-SPP' },


のJSON部分で、port: 'dev/tty.Sphero-BOO-RN-SPP'の部分は、質問者様が参考にされたgithubのソースを見ると、port: '/dev/tty.Sphero-BOO-RN-SPP’となっています。'dev'の前に'/'が抜けていませんか?少なくともこの1点は誤りかと思われます。

それと、コードを貼り付けるときはシンタックスハイライトを使用しましょう。コードが見づらいと、それだけ回答もつきづらくなると思います。
質問するときのヒント

投稿 2017/12/06 00:39

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/06 00:53

    夜遅くに回答をくださり、ありがとうございます。
    コードの指摘をして頂きありがとうございます。明日確認をしてみます。

    また、解答されるための工夫などご教授いただき感謝します。
    早速編集してみます。

    キャンセル

  • 2017/12/06 16:38

    ”/”を入れて試してみたのですがやはり同じエラーが出てしまいます。
    回答者様が言ったように、’connection’部分の文法を変更しましたが。
    以下のようなエラーが出てしまいました。

    ```app.js
    Cylon.robot({
    connection: { name: 'sphero', adaptor: 'sphero', port: '/dev/tty.Sphero-BOO-RN-SPP' },
    device: {name: 'sphero', driver: 'sphero'},
    ```

    ```
    Cylon.robot({
    connections: {
    bluetooth: { adaptor: 'central', uuid:’spheroのUUID’, module: 'cylon-ble'}
    },

    devices: {
    bb8: { driver: 'bb8', module: 'cylon-sphero-ble'}
    },
    ```

    ```error
    /home/pi/sphero-colour/app.js:23
    bluetooth: { adaptor: 'central', uuid:FB:A6:D4:37:86:FE, module: 'cylon-ble'}
    ^

    SyntaxError: Unexpected token :
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:588:28)
    at Object.Module._extensions..js (module.js:635:10)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Function.Module.runMain (module.js:665:10)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:607:3

    ```

    これはそもそも文法がおかしいため出るエラーでしょうか?

    動作環境がないので、厳しいとは思いますがご教授おねがいします。

    キャンセル

  • 2017/12/08 00:35 編集

    当方で使える環境に無いままなのですが、質問者様の方で参考にされたgithubリポジトリのソースは適切なのでしょうか。sphero-colourのREADME.md は2014年4月にコミットされたものです。古過ぎる、と言うことはありませんか。例えばもう少し新しい(2015年12月18日)qiitaのこちらの記事https://qiita.com/quetz-design/items/c164f8eab9eaeccb67fd や、CylonのSphero用のサンプルコード
    https://cylonjs.com/documentation/platforms/sphero/
    https://cylonjs.com/documentation/examples/cylon/js/sphero_shakeometer/
    を見ると、JSON周りの設定方法が違っているように思います。
    Cyronを使うことによる問題なのかどうか切り分けられないのであれば、Cyronは使わず、Spheroの公式のチュートリアルから進めると言うのも手かと思います。https://sphero.docsapp.io/docs/get-started

    キャンセル

0

現在のエラーで気になるのは以下で、app.js の23行目でエラーが出ているように思いますが、

/home/pi/sphero-colour/app.js:23
bluetooth: { adaptor: 'central', uuid:FB:A6:D4:37:86:FE, module: 'cylon-ble'}
^

SyntaxError: Unexpected token :


marumori様ご提示のコードには合致した部分がありませんが、’:’部分が期待しない文字扱いで、SyntaxErrorが起きてます。uuid:FB:A6:D4:37:86:FE はmarumori様がセットされているのでしょうか。"uuid:FB:A6:D4:37:86:FE"と言う記述の仕方が変な気もしますし、UUIDで6バイト相当と言うのもまた変な気がします。

投稿 2017/12/08 08:40

編集 2017/12/08 08:42

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/08 08:45

    前の回答に追記またはコメントするつもりでしたが誤って新しい回答で投稿してしまいました。回答の流れとしては不適切かもしれませんので低評価としてくださっても結構です。

    キャンセル

  • 2017/12/08 17:10

    回答ありがとうございます。
    私が扱っているロボットがspheroSPRK+というロボットで、通信の仕様がBLE通信となっています。
    なので、cylon.jsでSphero BLE(https://cylonjs.com/documentation/platforms/sphero-ble/)のコードを参考にしました。ロボットは正常に動作します。


    当初の目的では、Sphero bb-8をブラウザから動かしてみた(https://liginc.co.jp/238181)を参考に、ブラウザからspheroをコントロールさせるはずでしたが、milkcocoa[リアルタイム通信やIoTデバイスとの連携を簡単に実装できるサービス・ライブラリ]との連携がうまくいきませんでした。(ローカル環境での簡単なチャット機能も作れませんでした…)

    socket.ioでは簡単なチャット機能が実行できることが分かったので、socket.ioとNode.Jsを用いてSphero SPRK+(BLE)をブラウザから制御したいと思っています。
    しかし、socket.ioを実装するコードをどのように書けば、ブラウザから動かせるのかわかりません。

    分かりずらいとは思いますが、ご教授いただけたらと思います。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.37%

関連した質問

同じタグがついた質問を見る

  • Node.js

    1219questions

    Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

  • GitHub

    514questions

    GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

  • Raspberry Pi

    462questions

    Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

  • Socket.IO

    147questions

    Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。