bhaptics / haptic-library

SDK for bhaptics haptic devices
http://bhaptics.com
Other
35 stars 12 forks source link

[Defining patterns programmatically] 관한 질문입니다. #216

Closed kyungeunvoyage closed 2 years ago

kyungeunvoyage commented 2 years ago

안녕하세요, bhaptics vest 유저입니다. bhaptics의 진동을 코드제어를 통해 동적으로 작동시키고 싶어

BhapticsManager.GetHaptic().Submit(string key, PositionType position, List points, int durationMillis) BhapticsManager.GetHaptic().Submit(string key, PositionType position, List points, int durationMillis)

위 코드를 사용해 제작해보고자 했습니다.

void PathPointsTest() { var motorCount = 2; float x_position = 0.5f; float y_position = 0.5f; int intensity = 4; int duration = 100000;

        List<PathPoint> pathPoints = new List<PathPoint>
        {
            new PathPoint(x_position, y_position, intensity)
            , new PathPoint(x_position + 0.2f, y_position, intensity, motorCount)
        };

        BhapticsManager.GetHaptic().Submit("Point", PositionType.Vest, pathPoints, duration);

    }

이렇게 지정을 해주고 테스트를 해봤는데, 아무런 반응이 없습니다. 혹시 수정해야할 부분이 어디일까요?

그리고 DotPoint 클래스를 사용할때의 인자 중에 하나인 int index 의 범위가 어디서부터 어디인지, PathPoint에서의 x,y float는 0~ 1 사이의 float 값이 맞는지 궁금합니다. 그리고 그 float 값들이 haptic vest 어디에 해당하는지 궁금합니다.

답변 부탁드립니다. 감사합니다!

SanghunK commented 2 years ago

안녕하세요, 우선 저희 제품에 관심을 가져주셔서 감사합니다!

여쭈어보신 내용을 답해드리자면, PositionType.Vest 대신 PositionType.VestFrontPositionType.VestBack을 사용해주셔야 합니다.

그리고 DotPoint 클래스의 int index0~19까지 총 20개의 모터를 제어한다고 생각하고 사용해주시면 되고,

PathPoint 클래스의 x,y float값들은 0~1 사이의 float값이 맞습니다. 조끼를 착용한 상태 기준으로 앞 뒤 모두 (x=0, y=0)이 좌측 상단, (x=1, y=1)이 우측 하단이 울리게 되어 있습니다.

추가로 Intensity0~100까지의 범위이고, Durationms단위입니다.

더 궁금하신점 있으시면 이 스레드에서 이어서 말씀해주시면 감사하겠습니다. @kyungeunvoyage

kyungeunvoyage commented 2 years ago

안녕하세요, 우선 이전에 답변 주신 덕에 도움이 많이 되었습니다. 감사합니다.

제가 코드를 구상해보다, 한가지 궁금한점이 생겨 스레드에 이어 여쭈어 봅니다.

우선 [SerializeField] private List<DotPoint> dotpoint = new List<DotPoint>() { new DotPoint(1, 10), new DotPoint(2, 10) };

위 코드와 같이 리스트에 제가 원하는 dotpoint 를 설정해주었습니다.

이후,

            `BhapticsManager.GetHaptic().Submit("test", Bhaptics.Tact.PositionType.VestFront, dotpoint, 10);`

와 같이 frontvest 에 리스트에 있는 두개의 dotpoint 가 동시에 진동하게끔 코드를 작성했는데요,

제가 원하는 것은 리스트에 있는 첫번째 dotpoint 가 진동 한 뒤, 약 5초 뒤에 리스트의 두번째 dotpoint 가 진동하는 것을 원해서,

               ` BhapticsManager.GetHaptic().Submit("test", Bhaptics.Tact.PositionType.VestFront, dotpoint[0], 10);`

을 작성한 후, 코루틴으로 시간을 조정한 뒤, 리스트 두번째 dotpoint가 진동하게끔 하려했습니다.

하지만, 위 코드는 CS1503 : 3 인수 : 'Bhaptics.Tact.DotPoint'에서 'System.Collections.Generic.List' 으로 변환할 수 없습니다. 라는 에러가 났는데요,

리스트에 있는 property들을 시간 차이로 진동을 주고 싶을 땐 어떻게 코드를 수정해야 하는지 조언 주시면 감사하겠습니다!

SanghunK commented 2 years ago

말씀하신 에러는 다른 타입의 값을 전달인자로 넘겨서 생긴 에러인 것 같습니다.

BhapticsManager.GetHaptic().Submit("test", Bhaptics.Tact.PositionType.VestFront, dotpoint[0], 10);

대신

BhapticsManager.GetHaptic().Submit("test0", Bhaptics.Tact.PositionType.VestFront, new List<DotPoint>() { dotpoint[0] }, 10);
BhapticsManager.GetHaptic().Submit("test1", Bhaptics.Tact.PositionType.VestFront, new List<DotPoint>() { dotpoint[1] }, 10);

과 같이 사용하시면 될 것 같습니다.

test대신 test0,test1을 사용하는 이유는 test처럼 같은 이름으로 호출할 시 두번째 진동이 첫번째 진동을 정지하고 재생하기 때문입니다. 물론 duration이 10ms이고 5초 뒤에 두번째 진동을 준다고 하셨으니, 진동이 겹칠일은 없지만 참고차 알려드립니다. 이에 대한 예시는 5_Identifier_Play Scene을 참고하시면 되겠습니다.

감사합니다.

kyungeunvoyage commented 2 years ago

안녕하세요, 지난번 주신 답변 역시 도움이 많이 되었습니다. 감사합니다.

혹시 택토시 관련해서, 두개 페어 이상을 연결하게 되면, 두개의 택토시를 어떻게 각각 불러와야 할지 여쭙고 싶습니다.

Bhaptics.Tact.PositionType.ForearmL 이라고 코드를 불러오게 되는데, 이때 제가 임의로 forearmL 으로 페어링이 완료된 두개의 택토시를 각각 불러올 수 있는 방법이 있을지 여쭙습니다.

동일하게, bhaptics designer 에서 불러온 tact file 을 Play 함수를 사용해 재생하게 되면 두개의 tactosy에서 모두 울리게 되는데, 이 역시 두개의 택토시를 분리해서 사용할 수 있는 방법이 있는지 궁금합니다.

답변주시면 감사하겠습니다!