Appearance
olive® Camera
Technical Specifications
Feature Category | Feature Subcategory | Specification |
---|---|---|
Form Factor | Dimensions (W x H x D) | 40mm x 40mm x 30mm |
Weight | 89 grams | |
Processor Unit | Application Processor | Dual Cortex-A7 up to 800 MHz |
Real-Time Processor | Cortex-M4 MPU up to 200 MHz | |
TPU AI Accelerator | 4 Trillion Operations Per Second | |
Memory | On Chip (SoC) | 512 MB RAM |
On Chip EEPROM (SoC) | 512 Bytes x 8 | |
On SOM | 64 GByte SD Flash | |
Sensors | Image Sensor | 1/2.7" OmniVision OV2710 |
Max Resolution | 1920(H)x1080(V) pixels | |
Lens | 2.1mm (L210) / 1.8mm (L180) | |
Frame Rate | 640x480 VGA @120fps, 1280x720 HD @60fps, 1920x1080 FHD @30fps | |
IMU Sensor | 6-Axis Automotive-Proven IMU | |
IMU Range & Sensitivity | Accelerometer: 0.06 mg/LSB, Gyroscope: 0.004 dps/LSB | |
Connectivity | High-Speed Connectivity | 1x Virtual Ethernet USB Type C @ 60 MBps |
Other I/O | 1x User Switch, 3x User LEDs | |
Software | Yocto BSP | Available for batch purchases |
Linux Kernel | Linux 5.10 | |
Operating System | Debian 11 | |
Communication middleware | Apache Cyclone DDS | |
Robotic Operating Systems | ROS Noetic Ninjemys, ROS 2 Humble Hawksbill | |
Power and Thermal | Power Consumption | USB Type C PD (15 W max) |
Voltage | PD 5.0v | |
Max Current | 3000mA | |
Temperature Range | Commercial: 0°C to 85°C, Industrial: -40°C to +85°C |
TPU
A TPU, or Tensor Processing Unit, is a type of AI accelerator specifically designed by Google to accelerate machine learning tasks. TPUs are application-specific integrated circuits (ASICs) that have been optimized for the efficient execution of tensor operations, which are fundamental to deep learning and other machine learning algorithms.
The primary goal of a TPU is to enhance the performance and energy efficiency of machine learning workloads, allowing AI models to be trained and executed more quickly and with lower power consumption than traditional CPU or GPU-based hardware. This is achieved through a combination of specialized hardware components and optimizations tailored to the unique requirements of machine learning tasks.
Enable / Disable TPU acceleration
In order to enable the tpu chip do
./opt/olive/script/enable_tpu.sh
./opt/olive/script/enable_tpu.sh
and to disable the tpu do
./opt/olive/script/disable_tpu.sh
./opt/olive/script/disable_tpu.sh
to verify the TPU is enabled you can do
lsusb
lsusb
The result will be:
Bus 001 Device 004: ID 1a6e:089a Global Unichip Corp.
Bus 001 Device 003: ID 32e4:9230 HD USB Camera HD USB Camera
Bus 001 Device 002: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 004: ID 1a6e:089a Global Unichip Corp.
Bus 001 Device 003: ID 32e4:9230 HD USB Camera HD USB Camera
Bus 001 Device 002: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Which the "Global Unichip Corp" is the TPU chip.
TPU Apps
All the python3 based TPU examples are located in /home/olive/apps. To run an object detection example using TPU after enabling the tpu in the previus step run
python3 /home/olive/apps/packages/src/app_tpu_python/tpu_python/app_node.py
python3 /home/olive/apps/packages/src/app_tpu_python/tpu_python/app_node.py
INFO
Note that you have to change the topic name of the app subscriber to your current device topic name in oder to subscribe to the image. In order to to this you have to edit the app_node.py
After running this example the camera will detect objects based on Coral object detection example.
General pipeline diagram
For more information about Google® coral please visit:
For other python example source projects please visit:
https://github.com/olive-robotics/olv_camera_tpu_playground_py
Quick Setup
Quick start guide for the olive® Camera module:
Install ROS2 (https://docs.ros.org/en/humble/index.html) on your host computer. This will provide the necessary tools and libraries to communicate with the Olive Robotics modules.
Connect the Olive Robotics modules to your host computer using the USB Type C cables.
Check if your compueter asigns an IP address to your component. This may take up to 30~60 seconds. Each module ships with a defauld static IP address asigned to it. The defauls address for smart components is
10.42.0.7
and can be changed later via the web interface.You can check the if the connection is stablished or not in two ways:
ping the device using the following command in your terminal:
ping 10.42.0.7
ping 10.42.0.7
and if the module is connected successfully, you should see something like this:
PING 10.42.0.7 (10.42.0.7) 56(84) bytes of data. 64 bytes from 10.42.0.7: icmp_seq=1 ttl=64 time=0.402 ms 64 bytes from 10.42.0.7: icmp_seq=2 ttl=64 time=0.371 ms 64 bytes from 10.42.0.7: icmp_seq=3 ttl=64 time=0.397 ms 64 bytes from 10.42.0.7: icmp_seq=4 ttl=64 time=0.398 ms
PING 10.42.0.7 (10.42.0.7) 56(84) bytes of data. 64 bytes from 10.42.0.7: icmp_seq=1 ttl=64 time=0.402 ms 64 bytes from 10.42.0.7: icmp_seq=2 ttl=64 time=0.371 ms 64 bytes from 10.42.0.7: icmp_seq=3 ttl=64 time=0.397 ms 64 bytes from 10.42.0.7: icmp_seq=4 ttl=64 time=0.398 ms
Check if the network adapter is attached and recognized by your host computer.
ifconfig
ifconfig
and if the device is recognized successfully, you should see something like this:
enxd8de9b838d35: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.42.0.79 netmask 255.255.255.0 broadcast 10.42.0.255 inet6 fe80::ef0a:e686:27aa:6307 prefixlen 64 scopeid 0x20<link> ether d8:de:9b:83:8d:35 txqueuelen 1000 (Ethernet) RX packets 1846 bytes 272143 (272.1 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 195 bytes 34984 (34.9 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enxd8de9b838d35: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.42.0.79 netmask 255.255.255.0 broadcast 10.42.0.255 inet6 fe80::ef0a:e686:27aa:6307 prefixlen 64 scopeid 0x20<link> ether d8:de:9b:83:8d:35 txqueuelen 1000 (Ethernet) RX packets 1846 bytes 272143 (272.1 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 195 bytes 34984 (34.9 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Check if the data is alreaddy published to your system using:
ros2 topic list
ros2 topic list
you should be able to see all the topics published from the module. For exampe for IMU module you will see:
/olive/imu/x1681709875/image/camera_info /olive/imu/x1681709875/image/compressed /olive/imu/x1681709875/imu /olive/imu/x1681709875/magnetometer /olive/imu/x1681709875/status /olive/imu/x1681709875/switch /olive/imu/x1681709875/led /parameter_events /rosout
/olive/imu/x1681709875/image/camera_info /olive/imu/x1681709875/image/compressed /olive/imu/x1681709875/imu /olive/imu/x1681709875/magnetometer /olive/imu/x1681709875/status /olive/imu/x1681709875/switch /olive/imu/x1681709875/led /parameter_events /rosout
INFO
The number 1681709875 is your device's serial number and will be displayed in accordance with your device.
Visualize the data using:
Embedded Web Interface (https://docs.olive-robotics.com/software/gui/gui.html)
Visualize the topics:
Plot the data from the IMU messages:
Visualize the Image:
Change the parameters of the DCM:
rviz2 (https://github.com/ros2/rviz).
- Visualize the IMU data in Rviz2
- Visualize the IMU data in Rviz2
Visualize the data and change the parameters like IP, Topic Name, etc using the embedded web interface. You just need to open your browser on your host computer and enter the IP address of the device. If you didn't change the IP address, then it must be
10.42.0.7
.
ROS Topics and Services
Topic Name | Message Type | Type | Description |
---|---|---|---|
.../image/camera_info | sensor_msgs/CameraInfo | Publisher | Camera image information |
.../image/compressed | sensor_msgs/CompressedImage | Publisher | Camera image |
.../imu | sensor_msgs/Imu | Publisher | Messured acc/gyro/quaternion |
.../magnetometer | sensor_msgs/MagneticField | Publisher | Messured Magnetic field. |
.../status | diagnostic_msgs/DiagnosticStatus | Publisher | Device status. |
.../switch | std_msgs/Bool | Publisher | Device micro-switch status. |
.../led | std_msgs/Bool | Subscriber | User defined LED. |
Advanced Settings
The device allows certain parameters to be changed at runtime. To get an overview of all changeable parameters use ros2 param list
. To change a parameter use ros2 param set /dcm_camera <parameter> <new_value>
Camera
Parameter | Type | Range Min | Range Max | Default | Description |
---|---|---|---|---|---|
frequency | int | 0 | 120 | 30 | Camera publish rate |
brightness | double | 0.0 | 1.0 | 0.5 | Camera brightness parameter |
contrast | double | 0.0 | 1.0 | 0.5 | Camera contrast parameter |
saturation | double | 0.0 | 1.0 | 0.5 | Camera saturation parameter |
gamma | double | 0.0 | 1.0 | 0.5 | Camera gamma parameter |
whitebalance | double | 0.0 | 1.0 | 0.5 | Camera whitebalance parameter |
resolution | string | "320x240" | "1920x1080" | "640x480" | Camera image resolution |
IMU
Parameter | Type | Range Min | Range Max | Default | Description |
---|---|---|---|---|---|
filter_frequency | int | 0 | 1200 | 100 | IMU filter frequency |
filter_gain | int | 0 | 1 | 0.2 | IMU filter gain |
frequency_imu | int | 0 | 1200 | 100 | IMU publish rate |
frequency_mag | int | 0 | 100 | 100 | Magnetometer publish rate |
System
Parameter | Type | Range Min | Range Max | Default | Description |
---|---|---|---|---|---|
frequency | int | 0 | 10 | 10 | System status publish rate |
Downloads
Type | Format | Version | Link |
---|---|---|---|
3D Models | |||
OBJ | 1.0 | Download | |
DAE | 1.0 | Download |