(10 intermediate revisions by one user not shown)
Line 5: Line 5:
 
{{alert success footer}}
 
{{alert success footer}}
 
<br>
 
<br>
This tutorial will show how to open & close CAN communication. Also, how to get position data and send pwm to operate Allegro Hand. You will follow step by step with adding sample codes. Source code assumes you have a peak-systems pcan to usb adapter so if you are not using PEAK CAN device, please check your own device CAN api and channel.
+
This tutorial will show how to open & close CAN communication. Also, how to get position data and send pwm to operate Allegro Hand. You will follow step by step with adding sample codes. Source code assumes you have a peak-systems pcan to usb adapter so if you are not using PEAK CAN device, please check your own device CAN api and channel.<br><br>
  
 
===simple diagram===
 
===simple diagram===
 
Below picture shows a structure of a sample program for this tutorial.<br>
 
Below picture shows a structure of a sample program for this tutorial.<br>
 
[[Image:tutorial_.png|300px]]
 
[[Image:tutorial_.png|300px]]
 +
<br>
  
===main.cpp===
+
===steps===
You can find '''main.cpp''' in grasp directory. There are 3 functions you have to edit.
+
*[[Read CAN data]] : how to Initialize CAN I/O thread and get CAN data.
<br><br>
+
*[[Send PWM data]] : how to send data to Allegro Hand.
 +
<br>
  
OpenCAN() function initialize CAN I/O thread and start it.
+
===build & run===
<syntaxhighlight lang="cpp">
+
cd {The directory where you extracted CAN_tutorial.zip.}
// Open a CAN data channel
+
mkdir build
bool OpenCAN()
+
cd build
{
+
cmake ..
    printf(">CAN(%d): open\n", CAN_Ch);
+
make install
 
+
./bin/grasp
    // CAN open
+
    int ret = command_can_open(CAN_Ch);
+
    if(ret < 0)
+
    {
+
        printf("ERROR command_can_open !!! \n");
+
        return false;
+
    }
+
 
+
    // initialize CAN I/O thread
+
    ioThreadRun = true;
+
    pthread_create(&hThread, NULL, ioThreadProc, 0);
+
    printf(">CAN: starts listening CAN frames\n");
+
   
+
    // set periodic communication parameters(period)
+
    printf(">CAN: Comm period set\n");
+
    short comm_period[3] = {3, 0, 0}; // millisecond {position, imu, temperature}
+
    ret = command_set_period(CAN_Ch, comm_period);
+
    if(ret < 0)
+
    {
+
        printf("ERROR command_set_period !!! \n");
+
        command_can_close(CAN_Ch);
+
        return false;
+
    }
+
 
+
    // servo on
+
    printf(">CAN: servo on\n");
+
    ret = command_servo_on(CAN_Ch);
+
    if(ret < 0)
+
    {
+
        printf("ERROR command_servo_on !!! \n");
+
        command_set_period(CAN_Ch, 0);
+
        command_can_close(CAN_Ch);
+
        return false;
+
    }
+
 
+
    return true;
+
}
+
</syntaxhighlight>
+
<br><br>
+
 
+
 
+
static void* ioThreadProc(void* inst)
+
<syntaxhighlight lang="cpp">
+
// --
+
 
+
</syntaxhighlight>
+
<br><br>
+
 
+
 
+
void CloseCAN()
+
<syntaxhighlight lang="cpp">
+
// --
+
 
+
</syntaxhighlight>
+
<br><br>
+

Latest revision as of 18:30, 2 July 2019

Contents

[edit] CAN Communication Tutorial

Please download CAN_tutorial.zip file and follow below steps. File:CAN tutorial.zip
CAN_tutorial.zip contains CMakeList.txt, README and grasp directory.

This tutorial will show how to open & close CAN communication. Also, how to get position data and send pwm to operate Allegro Hand. You will follow step by step with adding sample codes. Source code assumes you have a peak-systems pcan to usb adapter so if you are not using PEAK CAN device, please check your own device CAN api and channel.

[edit] simple diagram

Below picture shows a structure of a sample program for this tutorial.
Tutorial .png

[edit] steps


[edit] build & run

cd {The directory where you extracted CAN_tutorial.zip.}
mkdir build
cd build
cmake ..
make install
./bin/grasp




Whos here now:   Members 0   Guests 0   Bots & Crawlers 1